Hallo, ich habe einen TrailingStop und würde gerne, wenn der Preis den Abstand zwischen dem SL der Positionsöffnung und dem Öffnungspreis im Positiven ist, einen Teil der Position schließen.
Zum Beispiel:
ich kaufe Paar XY bei 1000, der SL ist bei 500
Wenn der Preis jetzt bei 1500 ist, möchte ich einen Teil der Position schließen. Der Sl ist jetzt bei beispielsweise 1300, ich kann also nicht sagen
gibt es eine Möglichkeit so etwas zu berechnen?
PS: Der SL bei Positionsöffnung ist dynamisch, also nicht im fixen Abstand
Ich habe das jetzt so probiert, dass ich beim Positionsöffnen den abstand im Kommentar speichere:
sell(abstand,inpStarsTPmult,("evening star|"+(string)abstand));
_trade.Sell(chek_volume_lot,NULL,_symbol.Ask(),_symbol.Ask()+abstand,_symbol.Ask()-(abstand * profitmultiplikator),comment);
Und in meiner TrailingStop Methode greife ich dann daruaf zu:
void checkPositions(double ask, double bid) { if(PositionsTotal() < 1) return; double tslPoints = 300; for(int i = 0; i < PositionsTotal(); i++) { string symbol = PositionGetSymbol(i); //Symbol der Position i if(_Symbol == symbol) { ulong posTicket = PositionGetInteger(POSITION_TICKET); // Positionsticket int posDirection = (int)PositionGetInteger(POSITION_TYPE); // Positionsrichtung double posSize = PositionGetDouble(POSITION_VOLUME); // Positionsgröße double posOpen = PositionGetDouble(POSITION_PRICE_OPEN); // Öffnungspreis der Position double posSL = PositionGetDouble(POSITION_SL); // SL der Position double posVolume = PositionGetDouble(POSITION_VOLUME); // Volumen der Position string comment = PositionGetString(POSITION_COMMENT); // Comment der Position //------- Short Position if(posDirection == POSITION_TYPE_SELL) { double abstand = (double)getTeilVonComment(comment,1); //-- if(posSL > posOpen && bid <= (posOpen - (abstand*0.66))) _trade.PositionModify(posTicket,posOpen,0); if(bid <= (posOpen - abstand) && MathAbs(posSL-(posOpen-abstand)) <= tslPoints*_Point) _trade.PositionClosePartial(posTicket,NormalizeDouble((posVolume * 0.5),_Digits),-1); if(MathAbs(posSL-bid) > tslPoints*_Point && // Wenn der Abstand zwischen SL und Bid größer ist als die posSL <= posOpen) // vorgegebenen TSL-Punkte und der SL bereits auf den Einsteig gesetzt wurde, _trade.PositionModify(posTicket,(bid+tslPoints*_Point),0); // ziehe den SL im Abstand von TSL-Punkten nach } } } }
string getTeilVonComment(string comment, int pos) { // commen: Sting der in Teilstrings unterteilt wird, pos: Position: 0 = Signal, 1 = Abstand string sep = "|"; ushort u_sep; string result[]; //--- Code des Trennzeichens erhalten u_sep = StringGetCharacter(sep,0); //--- den String in Teilstrings unterteilen int k = StringSplit(comment,u_sep,result); //--- richtiges Ergebnis zurückgeben switch(pos) { case 0: return(result[0]); break; case 1: return(result[1]); break; default: return("-1"); break; } }
Jetzt habe ich aber das Problem, dass nicht immer, aber manchmal ein leerer String an die getTeilVonComment-methode übergeben wird und somit ein OnTick-Critical-Error entsteht, ich weiß aber beim besten Willen nicht wieso das passiert....
Lies mal diesen Artikel: https://www.mql5.com/de/articles/1111 (MQL5-Kochbuch: Verarbeitung des TradeTransaction-Ereignisses)
Alles ist aus der Deal-History ablesbar. Studiere mal auf Deinem Konto wie aus dem Auftrag/Order, eine offene Position und eine geschlossene wird und wie sich das in den Deals spiegelt.
Siehe dazu die relevanten Funktionen hier auf der linke Seite: https://www.mql5.com/de/docs/trading/historydealstotal
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo, ich habe einen TrailingStop und würde gerne, wenn der Preis den Abstand zwischen dem SL der Positionsöffnung und dem Öffnungspreis im Positiven ist, einen Teil der Position schließen.
Zum Beispiel:
ich kaufe Paar XY bei 1000, der SL ist bei 500
Wenn der Preis jetzt bei 1500 ist, möchte ich einen Teil der Position schließen. Der Sl ist jetzt bei beispielsweise 1300, ich kann also nicht sagen
gibt es eine Möglichkeit so etwas zu berechnen?
PS: Der SL bei Positionsöffnung ist dynamisch, also nicht im fixen Abstand