Jump to content
Tom Next - Daytrading Community

Verwaltung von offenen Trades als Positionen


FinGeR

Recommended Posts

Die wohl größte Veränderung beim Wechsel von Metatrader 4 zu MetaTrader 5 ist die Verwaltung von offenen Trades als Positionen.

Zu jeder Zeit kann es nur eine offene Position pro Symbol geben, und die Größe dieser Position wird vom Broker angepasst beim

hinzufügen oder entfernen weiterer Aufträge des Symbols. Dies deckt sich mit der NFA 2-43 (b) FIFO-Regel die in den USA

eingeführt wurde und passt auch mit der Art des Handel in vielen anderen Märkten wie Futures, Rohstoffe und CFDs.

 

Auf MQL5.com gibt es ein Artikel mit Beispielen wie man trotzdem mit Hilfe eines Virtual Order-Manager mehrere

Positionen verwalten kann. Diese Klassenbibliothek kann in eine MT5 Expert Advisor benutzt werden.

 

Der Artikel ist in Englisch hier zu finden. http://www.mql5.com/en/articles/88

 

Ich habe eine Beispiel Video erstellt für ein besseres Verständnis.

 

  • Upvote 4
Link to comment
Share on other sites

Das füge ich mal dazu, weil es zum Thema passt.

 

Die BJF Trading Group entwickelte, nicht ganz billig aber ein sehr Interessant, das Tool MetaTrader

MT5 to MT4 account copier. Es handelt sich dabei um ein MetaTrader orientierte Forex-Software,

die es ermöglicht, Handel-Operationen vom MetaTrader 5 Terminal zu MetaTrader 4

Terminals synchrone zu kopieren.

 

Diese Forex-Software ist für die gleichzeitige Verwaltung von mehreren Konten, also hilfreich für

diejenigen, die Investoren Konten verwalten und für Händler die mit viele Konten gleichzeitig arbeiten.

 

  • MetaTrader 5 vereint alle offenen Aufträge in einer Position.
  • MetaTrader 4 dagegen listet jeden Auftrag als Position.

BJF Trading Group haben das folgende Verhalten implementiert. Es werden alle Aufträge von

Metatrader 5 synchrone zu einen oder mehreren Metatrader 4 Terminals kopiert.

 

Beispiel:

1. Schritt

Metatrader 5: öffnet 0.2 lot BUY EURUSD , Zusammenfassung der offenen Position 0.2 Lot BUY EURUSD

Metatrader 4: synchrone Kopie offen 0.2 lot BUY EURUSD.

2. Schritt

Metatrader 5: fügt 0.3 Lot BUY EURUSD hinzu, Zusammenfassung der offenen Position 0.5 Lot BUY EURUSD

Metatrader 4: synchrone Kopie offen 0.3 Lot BUY EURUSD, jetzt haben wir 2 Positionen in Metatrader 4 offen (0.2 Lot und 0.3 Lot)

3. Schritt

Metatrader 4: schließt 0.1 lot von der BUY EURUSD Position, Zusammenfassung der offenen Position 0.4 Lot BUY EURUSD

Metatrader 5: synchrone Kopie schließt 0.1 Lot BUY EURUSD, Zusammenfassung der offenen Position wir haben jetzt 2 Positionen in Metatrader 4 offen (0.1 und 0.3 Lot)

  • Upvote 2
Link to comment
Share on other sites

  • 3 weeks later...

Das füge ich mal dazu, weil es zum Thema passt.

 

Die BJF Trading Group entwickelte, nicht ganz billig aber ein sehr Interessant, das Tool MetaTrader

MT5 to MT4 account copier. Es handelt sich dabei um ein MetaTrader orientierte Forex-Software,

die es ermöglicht, Handel-Operationen vom MetaTrader 5 Terminal zu MetaTrader 4

Terminals synchrone zu kopieren.

 

Diese Forex-Software ist für die gleichzeitige Verwaltung von mehreren Konten, also hilfreich für

diejenigen, die Investoren Konten verwalten und für Händler die mit viele Konten gleichzeitig arbeiten.

 

  • MetaTrader 5 vereint alle offenen Aufträge in einer Position.
  • MetaTrader 4 dagegen listet jeden Auftrag als Position.

BJF Trading Group haben das folgende Verhalten implementiert. Es werden alle Aufträge von

Metatrader 5 synchrone zu einen oder mehreren Metatrader 4 Terminals kopiert.

 

Beispiel:

1. Schritt

Metatrader 5: öffnet 0.2 lot BUY EURUSD , Zusammenfassung der offenen Position 0.2 Lot BUY EURUSD

Metatrader 4: synchrone Kopie offen 0.2 lot BUY EURUSD.

2. Schritt

Metatrader 5: fügt 0.3 Lot BUY EURUSD hinzu, Zusammenfassung der offenen Position 0.5 Lot BUY EURUSD

Metatrader 4: synchrone Kopie offen 0.3 Lot BUY EURUSD, jetzt haben wir 2 Positionen in Metatrader 4 offen (0.2 Lot und 0.3 Lot)

3. Schritt

Metatrader 4: schließt 0.1 lot von der BUY EURUSD Position, Zusammenfassung der offenen Position 0.4 Lot BUY EURUSD

Metatrader 5: synchrone Kopie schließt 0.1 Lot BUY EURUSD, Zusammenfassung der offenen Position wir haben jetzt 2 Positionen in Metatrader 4 offen (0.1 und 0.3 Lot)

Es gibt eine kostenlose Anleitung. Wie man so etwas auch selbst programmieren könnte.

How to Copy Trading from MetaTrader 5 to MetaTrader 4

http://www.mql5.com/en/articles/189

 

 

top.gif

  • Upvote 3
Link to comment
Share on other sites

  • 1 year later...
  • 5 months later...

Speichert MT5 zu jedem Trade auch eine Magicnumber? Das wäre doch das einfachste für alle. So kann der EA anhand der Magicnumber seine letzte Position ermitteln und entsprechend handeln, unabhängig davon, die die Gesamtposition zu diesem Instrument ausieht.

 

Ja.

 

Schau mal hier http://www.mql5.com/en/articles/112

Link to comment
Share on other sites

  • 1 year later...

Brauche Hilfe : Für mein System muss ich analysieren , ob eine Position komplett geschlossen wurde . Dann beginnt ein neuer Handelszyklus des Systemes .

 

Bislang versucht :

1.) Was scheinbar nicht geht, ist die Magic Nummer im laufenden Betrieb des EA zu ändern . Also das ich nach jedem abgeschlossenen Trade durch den EA eine neue Magic vergebe (dMagic++;) . 2.) Leider komme ich auch mit Ordercomment nicht weiter, denn der Broker (Activetrades) überschreibt die Comments in der Historie mit dem SL-Wert (Anfrage ob abstellbar läuft gerade) . 3.) Die Suche nach der Ticketnummer der Posi habe ich auch nicht hinbekommen, wird die verändert , wenn von Order nach Deal nach SL in die History geht ?

 

KB

 

PS.: Und diese MQL5 : Superlösung des Trademanagment hat mir viel weitergeholfen, nur der Knoten blieb halt leider ... ein Knoten ;)

Link to comment
Share on other sites

Da wir gerade bei Positionen und Stopps sind. Wie stehen Die Chance folgendes zu realisieren: Kann man einen EA coden der automatisch erkennt, dass eine Position ohne SL und TP geöffnet wurde und anschließend nach welchen Regeln auch immer SL und TP setzt? Sind die Order in einer Art Orderliste drin oder haben diese eine Bezug zum Objekt "Position"?

 

Gibt es Befehle, um Infos über bestehende Positionen einholen zu können?

Link to comment
Share on other sites

Da wir gerade bei Positionen und Stopps sind. Wie stehen Die Chance folgendes zu realisieren: Kann man einen EA coden der automatisch erkennt, dass eine Position ohne SL und TP geöffnet wurde und anschließend nach welchen Regeln auch immer SL und TP setzt? Sind die Order in einer Art Orderliste drin oder haben diese eine Bezug zum Objekt "Position"?

 

Gibt es Befehle, um Infos über bestehende Positionen einholen zu können?

 

Erkennen ob TP/SL fehlen und ggfs nachziehen auf vorher definierte Werte

 

//+------------------------------------------------------------------+
//| Check position for missing Limits SL/TP                          |
//+------------------------------------------------------------------+
void CheckForLimit()
  {
   double lots=0;

   for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionSelect(Symbol()))
        {
         double takeprofit=PositionGetDouble(POSITION_TP);
         double stoploss= PositionGetDouble(POSITION_SL);
         long currPosId = PositionGetInteger(POSITION_IDENTIFIER);
         if(takeprofit!=0 && stoploss!=0) break;// Limit
                                                // buy order type
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY         //
            ) //
           {
            lots=PositionGetDouble(POSITION_VOLUME);
            if(stoploss==0) stoploss=dBid-Std_SL*PipFaktor*Point();//
            if(takeprofit==0) takeprofit=dAsk+Std_TP*PipFaktor*Point();//
            if(SL_limit!=0) stoploss=SL_limit;// Zielpreis übernehmen
            if(TP_Limit!=0) takeprofit=TP_Limit;// Zielpreis übernehmen
            mytrade.SetDeviationInPoints(4);
            mytrade.PositionModify(Symbol(), stoploss , takeprofit);
            // check the result
            IsError(mytrade,__FUNCTION__);
            Print("SL_TP : Buy Order #",currPosId," : Missing Limits set to Std");
           }
         // sell order type
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL        //
            )
           {
            lots=PositionGetDouble(POSITION_VOLUME);
            if(stoploss==0) stoploss=dAsk+Std_SL*PipFaktor*Point();//
            if(takeprofit==0) takeprofit=dBid-Std_TP*PipFaktor*Point();//
            if(SL_limit!=0) stoploss=SL_limit;// Zielpreis übernehmen
            if(TP_Limit!=0) takeprofit=TP_Limit;// Zielpreis übernehmen                
            mytrade.SetDeviationInPoints(4);
            mytrade.PositionModify(Symbol(), stoploss , takeprofit);
            // check the result
            IsError(mytrade,__FUNCTION__);
            Print("SL_TP : Sell Order #",currPosId," : Missing Limits set to Std");
           }
        }
     }
  }

Hoffe hilft .

 

KB

 

@ FinGeR : vielen Dank , Howdy.gif , arbeite Code aus und poste Lösung hier .

  • Upvote 3
Link to comment
Share on other sites

POSITION_IDENTIFIER diese müsste dein Problem lösen.

 

Yap ! Vielen Dank nochmal ...allerdings anders als vermutet :

 

Mein erster Ansatz war mit der History :

 

(!HistorySelectByPosition(Trade_ID_Current))// wenn die Position NICHT in der History ist

Trade_ID_Current == POSITION_IDENTIFIER

 

In der History finde ich keine Posi,nachdem diese geschlossen wurde, das Volumen 0.00 ist . Sehr wohl finde ich mit dem POSITION_IDENTIFIER die zugehörigen Order und Deals .

Nachdem ich die Posi nicht finden konnte, wollte ich das Volumen abfragen, aber das geht ebenfalls nicht, da ich die Posi nicht mehr selektieren kann .

 

Interessant dazu auch dieser Link wink.png Ich habe also sehr sehr lange gesucht und bin gespannt, ob doch jemand eine Lösung unter Nutzung der History kennen sollte .

 

 

 

Aber ich habe eine alternative Lösung gefunden :

 

//+------------------------------------------------------------------+
//|  Überprüft , ob Posi geschlossen wurde und ggfs Reset            |
//+------------------------------------------------------------------+
void CheckPositionClosure()
  { 
    if(!PositionSelect(Markt) && Trade_ID_Current != 0)   // wenn es keine offene Position gibt
              {                                           // aber vorher eine vorhanden war
                // Reset Routinen
                GlobalVariableSet(VarName,0.0)            ;// 
                TradeLevel = 0                            ;//
                TradeRemaining = MaxNumberOfEntry         ;//
                Print (" Altes Grid begonnen bei: ",GridMG[1][0]);//
                WriteGrid()                               ;//  neues Grid anlegen
                Print (" Neues Grid beginnt bei: ",GridMG[1][0]);//
                if (TradeHelp) Alert ("Grid was Reset")   ;//  Info
                Trade_ID_Current = 0                      ;//  
                GetPositionPropertiesReset()              ;//  
              }
   return;
  }

 

 

1.) Ich prüfe ob in diesem Markt (z Bsp EURUSD) eine Posi offen ist . Wenn nicht, dann =>

2.) Prüfe ich, ob in der Variablen Trade_ID_Current irgendein Wert hinterlegt ist, der nicht "0" ist . Wenn das der Fall ist, dann

 

wurde eben eine Posi geschlossen, denn in der regelmäßigen Routine des EA beschreibe ich die Variable bei jedem neuen Bar mit dem POSITION_IDENTIFIER

der offenen Posi ...wenn denn eine offen ist .

 

Ok, wenn nun also keine Posi seit eben mehr da ist, dann wurde diese geschlossen und ich durchlaufe die zugehörige Routine, resette alle möglichen Variablen, "zeichn mein Grid neu und setze die Variable Trade_ID_Current wieder auf "0" .

 

KB

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...