Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 28.03.16
yytrader yytrader ist offline
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo Bööörni-breuse,

ich habe mal kurz in deinen angehängten EA geschaut.
Verwende bitte Tabulatoren oder Leerzeichen, um den Code leserlich zu machen.

Ein paar Punkte die mir aufgefallen sind:
1. TrailingStopBuy der Name wird als externe Variable und als Funktionsname verwendet.
2. Wenn du nur eine sell Order hast, wird die Funktion TrailingStopBuy nicht durchlaufen!
3.Der Kram mit dem (exists) wird nicht benötigt, du kannst die Funktion immer aufrufen, wenn keine passende Order gefunden wird, passiert auch nichts.
4,Konzentriere dich zuerst auf eine Funktion und arbeite dort so lange, bis sie funktioniert. Auch ich, trotz jahrelanger Erfahrung, kann nicht sofort den kompletten Code mit allen Varianten verstehen. Ich arbeite mich von Funktion zu Funktion vor, bis (hoffentlich) alles funktioniert.

Hier mal ein Code, ich habe ihn nicht getestet, allerdings sollte jetzt einiges klarer sein:
Code:
void TrailingStopBuy()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
   {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicBuy)
      {
         double takeprofit = OrderTakeProfit();
         double NewStopValue = Ask-TrailingStopBuy*PipValue*Point;
         if (OrderType() == OP_BUY && OrderStopLoss() < NewStopValue)
         {
            if (NewTakeProfitBuy != 0) 
               takeprofit = Ask+(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
            bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), NewStopValue, takeprofit, OrderExpiration(), Green);
            if (ret1 == false)
               Print("OrderModify() error - ", ErrorDescription(GetLastError()));
            
         }
         
         NewStopValue = Bid+TrailingStopBuy*PipValue*Point;
         if (OrderType() == OP_SELL && OrderStopLoss() > NewStopValue)
         {
            if (NewTakeProfitBuy != 0) 
               takeprofit = Bid-(NewTakeProfitBuy + TrailingStopBuy)*PipValue*Point;
            bool ret2 = OrderModify(OrderTicket(), OrderOpenPrice(), Bid+TrailingStopBuy*PipValue*Point, takeprofit, OrderExpiration(), Green);
            if (ret2 == false)
               Print("OrderModify() error - ", ErrorDescription(GetLastError()));
         }
      }
   }
   else
      Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
   }
}

Gruß

yytrader