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

Hallo next user,

das mit dem "Tee" und dem "Abschalten" war eine gute Idee. Und die Gesamtstruktur des EA darzustellen ev. auch; - denn es wurden noch 2, 3 Kleinigkeiten gefunden, die an einer "runden Sache" vorbeigingen.

Und "SO" sieht die Ges.-Struktur, einschl. der erarbeiteten Blöcke 1 + 2, jetzt aus:

Code:
//--- globale Deklarationen (extern bzw. intern) --------------------+
      int    orderTicket1 = 0;
      int    orderTicket2 = 0;
      double TSL = Trail_SL *100 *Point;
//===================================================================+
int  OnInit() { view graphic and calculat "AccountFreeMargin" 
     }
//===================================================================+
int  DeInit() { Funktion fehlt noch !   <-------------------------------fehlt noch !
     }
//===================================================================+
void OnTick() { 

//--- function for "AccountFreeMargin"
//--- Add. Conditions for TradeZoneTimer
                                                
//--- calculate open orders by current symbol --> and close by TP
      if (CalculateCurrentOrders(Symbol()) == 0) CheckForOpen();

//--- calculate open orders --> and opening a hedging position 
      if (CalculateCurrentOrders(Symbol()) != 0) CheckHedgeOpen();
   
      CheckTakeProfit();                 //   nicht notwendig (next user)!!!

//=========================================        
//--- open TrailStopLoss (CheckClose_Pos.1) - Block 1 - NEU (next user)
//=========================================
  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;
         }
      }
   }
//---
}      //  end "void OnTick()"

//===================================================================+
//--- open TrailStopLoss    Block 2  ----------------- NEU (next user)
//===================================================================+
void updateSL(int ticket)  {
   ResetLastError();

   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderType() == OP_BUY  &&  (openOrders == 1  ||  openOrders == 2))
      {
         if(Bid - OrderOpenPrice() > Trail_Target *100 * Point)
         {
            if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
            {
               if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
                  Print("Error setting Buy trailing stop: ", GetLastError());
            }
         }
      }
      else if(OrderType() == OP_SELL  &&  (openOrders == 1  ||  openOrders == 2))
      {
         if(OrderOpenPrice() - Ask > Trail_Target *100 * Point)
         {
            if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0)
            {
               if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue))
                  Print("Error setting Sell trailing stop: ", GetLastError());
            }
         }
      }
   }
}
//===================================================================+
int CalculateCurrentOrders(string symbol) { Calculate open positions 
    }
//===================================================================+    
void CheckForOpen() { Check for openOrder Conditions 
    }
//===================================================================+
double LotsOptimized() { MoneyManagement - Calculate lot size   
    }
//===================================================================+ 
void CheckTakeProfit()  { Check for TakeProfit Conditions 
    }
//+==================================================================+  
void CheckHedgeOpen() { Check for HedgeOrder Conditions                                 
    }
//+==================================================================+
void CloseAllOrders() { AllOrdersClosed function                                            
} 
//===================================================================+
//--- End -----------------------------------------------------------+
Sicher wird durch die o.a. Codedarstellung einiges deutlicher; - und vielleicht wird sie sogar als richtig befunden. Das wäre natürlich das HIGHLIGHT für den heutigen Tag !

Anbei möchte ich nochmals erwähnen: Toll, dass Du mich SO an der Hand nimmst, mein stetes "Aufbegehren" ohne zu Murren richtig stellst und dabei eine Ausdauer zeigst, für die man nur dankbar sein kann.
In diesem Zusammenhang bin ich immer noch davon überzeugt, dass wir (Du) es schaffen werden, das "Ding" korrekt zum Laufen zu bringen.

Also, nochmals danke und
LG. pt.

PS.: Sobald ich Dein "OK" bzw. letzte Änderungen vorliegen habe, werde ich den Original-Code nochmals überprüfen/angleichen. Dann sollten auch die nächsten Tests mit Erfolg verlaufen.