Hallo,
ich sehe hier keinen Trailingstop. Ich vermute das dieser durch die
void ChangePosition() double StopLossTemp; { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { if( PositionGetDouble(POSITION_PRICE_CURRENT) > PositionGetDouble(POSITION_SL)+TrailingStop ) { StopLossTemp = PositionGetDouble(POSITION_PRICE_CURRENT) - PositionGetDouble(POSITION_SL)+TrailingStop; ChangePosition(PositionGetDouble(POSITION_SL)+TrailingStop); } } else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { if( PositionGetDouble(POSITION_PRICE_CURRENT) < PositionGetDouble(POSITION_SL)-TrailingStop ) { StopLossTemp = PositionGetDouble(POSITION_PRICE_CURRENT) + PositionGetDouble(POSITION_SL)-TrailingStop; ChangePosition(PositionGetDouble(POSITION_SL)-TrailingStop); } } }
ausgeführt werden soll. Hie wird aber nur abgefragt ob die Position Buy oder Sell ist. Das alleine funktioniert schon nicht, weil du zuerst die Position selektieren musst und diese dann auszuwählen.
des weiteren besteht ein Unterschied ob du MT5 im Netting oder im Hedge Modus betreibst
Hier der Code den ich verwende für Trailingstop. Dieser wird dann in der OnTick aufgerufen
void TrailingStopExpert(const string symbol,const ulong magicnumber,const int trailingstop) //ist eigentlich eine Position Modify funktion, nur eben für den Hedge mode { MqlTradeRequest request; MqlTradeResult result; MqlTick tick; if(!SymbolInfoTick(Symbol(),tick)) GetLastError(); int total=PositionsTotal(); // Anzahl offener Positionen //--- in allen offenen Positionen suchen if(PositionSelect(_Symbol)==true) { for(int i=0; i<total; i++) { //--- Parameter der Order PositionSelect(_Symbol); ulong position_ticket=PositionGetTicket(i);// das Ticket der Position string position_symbol=PositionGetString(POSITION_SYMBOL); // Symbol ulong magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber der Position // // Print(PositionGetInteger(POSITION_TYPE)); // Print("TS: ", tick.bid+trailingstop*_Point," Pos SL: ", PositionGetDouble(POSITION_SL)," MN: ", magicnumber); if(position_symbol==symbol && magic==magicnumber && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && (tick.bid+trailingstop*_Point)<PositionGetDouble(POSITION_SL) ) { // Print(PositionGetDouble(POSITION_SL)); ZeroMemory(request); ZeroMemory(result); //--- Parameter der Transaktion setzen request.action=TRADE_ACTION_SLTP; // Typ der Transaktion request.position = position_ticket; // das Ticket der Position request.symbol = position_symbol; // Symbol request.sl=(tick.bid+trailingstop*_Point); // Stop Loss der Position request.tp=PositionGetDouble(POSITION_TP); // Take Profit der Position request.magic=magicnumber; // MagicNumber der Position //Print(tick.bid+trailingstop*_Point," ",PositionGetDouble(POSITION_SL)); //Print("Trailing Done Short"); if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen //--- Details zur Transaktion //PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } if(position_symbol==symbol && magic==magicnumber && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && (tick.ask-trailingstop*_Point)>PositionGetDouble(POSITION_SL) ) { //Print(PositionGetDouble(POSITION_SL)); ZeroMemory(request); ZeroMemory(result); //--- Parameter der Transaktion setzen request.action=TRADE_ACTION_SLTP; // Typ der Transaktion request.position = position_ticket; // das Ticket der Position request.symbol = position_symbol; // Symbol request.sl=tick.ask-trailingstop*_Point; // Stop Loss der Position request.tp=PositionGetDouble(POSITION_TP); // Take Profit der Position request.magic=magicnumber; // MagicNumber der Position //Print(tick.bid-trailingstop*_Point," ",PositionGetDouble(POSITION_SL)); //Print("Trailing Done Long"); if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen //--- Details zur Transaktion //PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } //Print("Trailing Done"); } } }
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Guten Tag,
Ich benötige Hilfe bei meinem EA.
Ich habe vor kurzem versucht einen Trailing Stop welcher mir hier im Forum zur Verfügung gestellt wurde in meinen Code ein zu arbeiten, nun bekomme ich beim kompilieren meines Codes die Fehler unexpected End of Program / unbalanced parentheses.
Es wäre schön wenn mir jemand helfen könnte.
Anbei mein Code und die Fehlermeldung