Einzelnen Beitrag anzeigen
  #42 (permalink)  
Alt 24.03.18
piptrade piptrade ist offline
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo, lieber next user,

Danke für Deine Zeit und Danke für Deine Hinweise. Ich hoffe Du konntest Dich zwischenzeitlich etwas erholen.

Nun aber zu Deinem letzten Beitrag:

"nötig oder unnötig" zu "ChechTakeProfit()", sollte nicht das Thema sein.
===
Bei "openOrders == 1" bzw. "openOrders == 2" wird es schon interessanter:

Zitat:
Diese Abfragen läufst du in ner Schleife durch. Bei einer Order ("openOrders" == 1) kommt der erste if-Block, soweit ok.
Sobald es aber mindestens 2 Orders sind ("openOrders" == 2), bearbeitest du in der Schleife AUCH DIE ERSTE Order mit dem zweiten if-Block, ist das so gewollt (ich denke nicht)?
Dass dem so ist, wußte ich nicht. Bisher ging ich davon aus, dass bei "openOrders == 2" nur der 2. if-Block bearbeitet wird.
Danke für den Hinweis. Somit hast Du natürlich recht; - beide Blöcke sollen eigentlich getrennt voneinander bearbeitet werden.
"openOrders == 1" mit den dortigen Konditionen und "openOrders == 2" mit den Konditionen, die dann dort aufzuführen wären.
(Lediglich zur Vereinfachung des Codes haben wir momentan die Konditionen für "openOrders == 1" bzw. "openOrders == 2" gleichgesetzt.)
===
"Trail_Target_2 + SMA7_ATR5_1" bzw. " *100 * Point", können wir uns wahrscheinlich "schenken". Nunmehr wissen wir beide, was gemeint war.
(Unabhängig davon weiß ich nicht, wie ich "SMA7_ATR5_1" besser erklären soll. Zudem hat diese variierende Größe wenig Code-Relevanz.)
===
Nun aber zum "Trail_SL()" bzw. dem "updateSL()":
Um wieder einheitliche Begriffe zu verwenden, ist es sicher sinnvoll, zu den Ursprüngen zurückzukehren.
So sollte unter "void OnTick()" das (nachträgliche) Schließen der Position 1 erfolgen. Hier wurde der Begriff "updateSL" verwendet und der diesbezügliche Code als "Block 1" bezeichnet:

Code:
void OnTick() { 
// ...
int    orderTicket1 = 0;
int    orderTicket2 = 0;

   if (orderTicket1) 
       updateSL(orderTicket1);
   if (orderTicket2) 
       updateSL(orderTicket2);

   if(orderTicket1 && orderTicket2)    {
      if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY))    {
         if(OrderSelect(orderTicket1,SELECT_BY_TICKET))    {
            if(OrderType() == OP_BUY)
            {
               if(!OrderClose(orderTicket1,OrderLots(),Bid,3))
                  Print("Order konnte nicht geschlossen werden, weil: ", GetLastError());
               else    Print("BIN ZU !!!");
            }
       else if (OrderType() == OP_SELL)
            {
               if(!OrderClose(orderTicket1,OrderLots(),Ask,3))
                  Print("Order konnte nicht geschlossen werden, weil: ", GetLastError());
               else    Print("BIN ZU !!!");
            }
            orderTicket1 = 0;
            orderTicket2 = 0;
         }
      }
   }
// ...   
}
Ist das richtig ? Haben wir jetzt wieder die notwendige Übereinstimmung ?

Separat bzw. parallel dazu müssen natürlich erst einmal die Positionen 1 + 2 eröffnet werden. Dies sollte dann außerhalb der "void OnTick()" erfolgen ("Block 2") und "SO" aussehen:

Code:
void TrailStopLoss(int ticket)  
{
   ResetLastError();  //  könnte ggf. entfallen

   if(OrderSelect(ticket,SELECT_BY_TICKET))    {  
      if(OrderType() == OP_BUY  &&  (openOrders == 1  ||  openOrders == 2))    {
         if(Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point)
         {
            if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
            {
               if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
               return;    Print("Error setting Buy trailing stop: ", GetLastError());
            }
         }
      }
      else if(OrderType() == OP_SELL  &&  (openOrders == 1  ||  openOrders == 2))    {
         if(OrderOpenPrice() - Ask > Trail_Target_1 *100 * Point)
         {
            if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0)
            {
               if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue))
               return;    Print("Error setting Sell trailing stop: ", GetLastError());
            }
         }
      }
   }
}
Ist auch das richtig ? Haben wir auch an dieser Stelle wieder die notwendige Übereinstimmung ?
"Alle sprechen deutsch, doch keiner versteht mich !" - Oder vielleicht doch ?
Ich wäre überaus dankbar, wenn dem so sein sollte !!!

Wenn allerdings Korrekturen notwendig sind, würde ich mich über die entsprechenden Hinweise freuen.

Anbei herzlichen Dank für Deine Anmerkungen zu den "Print-Ausgaben".

Ansonsten hoffe ich, dass Du Dich ein wenig erholt hast und warte `mal wieder voller Spannung auf Dein nächstes
Statement.

Bis dahin mit LG. pt.