|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Einfacher SELL-Order Trailingstop klapppt nicht
Hi!
Da ich aus irgendwelchen Gründen unter MT5 keinen Trailingstop setzen kann, habe ich versucht mir ein EA zu schreiben, der dies übernimmt. Einen für BUY- und einen für SELL-Positionen, etwas umständlich aber besser als ohne zu arbeiten. Im Backtest klappt alles bestens! Live nicht... (lasse ihn beim Test eine Position eröffnen, habe diese Zeilen aber entfernt) Code:
input int Trailingstop = 100; input int Schrittgröße = 1; #include<Trade\Trade.mqh> CTrade trade; void OnTick() { double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); CheckTrailingStop(Bid); } void CheckTrailingStop(double Bid) { if(PositionsTotal()>0) { double SL=NormalizeDouble(Bid+Trailingstop*_Point,_Digits); for(int i=PositionsTotal() -1; i>=0; i--) { string symbol=PositionGetSymbol(i); if (_Symbol==symbol) if (PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL) { ulong PositionTicket=PositionGetInteger(POSITION_TICKET); double CurrentStopLoss=PositionGetDouble(POSITION_SL); if (CurrentStopLoss>SL) { trade.PositionModify(PositionTicket,(CurrentStopLoss-Schrittgröße*_Point),0); } } } } } Bin für jeden Ratschlag dankbar! |
|
|||
Danke!
Code:
for(int i=PositionsTotal() -1; i>=0; i--) { PositionSelect(_Symbol); string symbol=PositionGetSymbol(i); if (_Symbol==symbol) if (PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL) { So sollte das dann aussehen, oder? Die Umstellung von MT4 auf MT5 verwirrt mich etwas. War noch nie gut im Programmieren. |
|
|||
Könnte man so proggen.
Ich würde zu der sicheren Variante greifen: Code:
for (uint i = PositionsTotal()-1; i >= 0; i--) { if ((ticket = PositionGetTicket(i)) > 0) { if (PositionGetString(POSITION_SYMBOL) == Symbol() && PositionGetInteger(POSITION_MAGIC) == MagicNumber){ if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { } if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { } } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Also ohne PositionSelect?
Bin jetzt noch mehr verwirrt... Bei MT4 war das irgendwie einfacher. |
|
||||
Das funktioniert, da der Aufruf von PositionGetTicket(i) ebenfalls die jeweilige Position selektiert, genauso wie PositionSelect().
PositionSelect() würde allerdings auch nur dann sicher funktionieren, wenn du nur eine Position pro Symbol hättest. Die Implementierung von TraderDoc ist somit die Variante, welche sicherer und besser ist. |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|