Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 19.03.20
fintrad0 fintrad0 ist offline
Gesperrter Benutzer
 
Registriert seit: Aug 2017
Beiträge: 16
fintrad0 befindet sich auf einem aufstrebenden Ast
Standard Zaghafter Lösungsansatz

Falls mal jemand über diesen Beitrag stolpert, ich teste gerade dieses Vorgehen: Es geht um eine Multicurrency-EA mit Ordermanagement (Hidden-SL, -Trailing, -BE, -Teilverkauf, -TP). Da sich die Variablen für die Preislinien sich ständig ändern (je nach selektierter Order) orientiere ich mich an iHighest, iLowest und OrderOpenPrice() der jeweiligen Order.

Die Ordermanagement-Funktion rufe ich auf und übergebe die Ticketnumber.

Code:
//Anzahl der M1-Bars seit Ordereröffnung

BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpenTime(),false);

             if(BarsAfterOpen == 0) {                       // wenn innerhalb der selben Kerze der Ordereröffnung
               if(ask >= OrderOpenPrice()) {             // wenn momentaner Preis >= Eröffnungspreis ...
                  PeriodHighest = ask;                       // momentaner Preis ist der höchste
                  PeriodLowest = OrderOpenPrice();   // tiefster Preis ist Eröffnungspreis
               }   
               
               if(bid <= OrderOpenPrice()){            // siehe oben al reves
                  PeriodHighest = OrderOpenPrice();
                  PeriodLowest = bid;
             }
             else {                                               // wenn seit der Eröffnung mehr als 0 Kerzen vergangen sind
                PeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0));
                PeriodLowest = iLow(symbol,PERIOD_M1,iLowest(symbol,PERIOD_M1,MODE_LOW,BarsAfterOpen,0));
             }
Die Preislinien PeriodHighest / PeriodLowest verwende ich, um den Abstand zum OrderOpenPrice() zu messen und um festzustellen, ob ich mich über/unter den Werten für TrailingStart, TrailingDistance, MoveToBreakEven, PartialClose etc. befinde:

Code:
               if(PeriodHighest > OrderOpenPrice()+trailingstart*point)                 
                 {
                  buystoplossprice= PeriodHighest - trailingdistance * point;                                                
                 }                  
            
               if(PeriodHighest > OrderOpenPrice() + breakevenpoints * point)
                 {
                   if(buystoplossprice < OrderOpenPrice())                                      
                       buystoplossprice = OrderOpenPrice() + breakevengain * point;                                                   
                  }  

etc., etc., etc.
Am Ende der Funktion prüfe ich, ob mein aktueller Preis eine der Linien (buystoplossprice, sellstoplossprice) über-/unterschritten hat um die Order teilweise oder ganz zu schließen.

Code:
 //---- schließt Order wenn unter/über SL/TP-Linie --------  
                              
                 if((bid <= buystoplossprice) || (ask >= buytakeprofitprice))
                  {
                    bool ret=OrderClose(ticketnumber,OrderLots(),OrderClosePrice(),Slippage,Red);              
                  }

Falls es so nicht klappen sollte, kann es immer noch als Inspiration dienen:-)

Schönen Gruß

Werner