|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
automatische (einmalige) Veränderung SL - für Scalper-EA
Hallo, liebe TradingGemeinde,
auf dem Weg MQL4 step by step zu erlernen, habe ich bereits einen kleinen Scalper-EA geschrieben, der auch tatsächlich funktioniert. TP = 10pip, SL (als Notstop) = 30pip - ansonsten Exit-Bedingungen). Der nächste Schritt sollte nun das Nachziehen dieses Stops sein; - und zwar (mit einem Ruck) auf 4pip Profit, wenn Kurs >= 7pip im Profit liegt. Im Netz habe ich zwar unzählige Beispiele für SL`s und TrailingStops gefunden, schaffe es aber einfach nicht, diese auf meinen speziellen Wunsch zu übertragen. Über Eure Unterstützung würde ich mich sehr freuen. LG. piptrade |
|
|||
du musst prüfen ob zb bei buy der bid-wert - mindest Stoploss größer ist als orderopenprice + 7 * Point
Da du es in Pips angeben möchtest musst du 7 * Point rechnen Und wenn das zutrifft OrderModify fertig |
|
|||
Hallo, Top_SecreT,
hab mal versucht Deinen Gedanken umzusetzen. Könnte das so annähernd richtig sei ? int start() { if(OrderSelect(MAGICMA, SELECT_BY_TICKET)==true) { switch(OrderType()) { case OP_BUY: if (Bid - mindestStopLoss >= OrderOpenPrice + 7* Point) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid + 4 * Point, 0, 0, Blue); } case OP_SELL: if (Ask + mindestStopLoss <= OrderOpenPrice - 7* Point) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid - 4 * Point, 0, 0, Blue); } } } else Print("OrderSelect has not been able to find the order ", MAGICMA, ":", GetLastError()); return(0); } |
|
|||
Ja so dachte ich mir das.
2 Sachen noch ich weiß nicht wie du jetzt mindestStopLoss definiert hast musste mal gucken das kann man mit MarketInfo() und MODE_STOPLEVEL abfragen und 2. bei OrderModify muss es nicht heißen Bid + 4 * Point sondern OrderOpenPrice() + 4 * Point Und bei SELL dann - statt + |
|
|||
Anhang zum code:
Nach dem Kompilieren werden keine Fehler angezeigt, - könnte also ggf. richtig sein. Allerdings erscheinen 2 Warnungen: OrderModify - Rückgabewert sollte geprüft werden ! - Wie ergänze ich den code ? - Könntest Du mir nochmals helfen ? Danke bereits im Vorraus. LG. piptrade |
|
|||
Den Rückgabewert prüfst du indem du einfach noch mal ein if um OrderModify machst
Code:
if(!OrderModify(...)){ Print("Fehler beim Ändern der Position: "+GetLastError()); } |
|
|||
... jetzt warst Du schneller als ich !
Also den code hab ich geändert - hoffentlich richtig ! 1.: OrderModify(OrderTicket(),OrderOpenPrice() + 4 * Point, 0, 0, Blue); 2.: OrderModify(OrderTicket(),OrderOpenPrice() - 4 * Point, 0, 0, Red); Dennnoch tauchen die Warnungen zu "OrderModify" - man solle den Rückgabewert prüfen - immer noch auf. Was tun ??? (Wie kann ich diese Überprüfung durchführen ?) Ich hoffe, nach dieser Erledigung ist dann alles o.k.. Wie gesagt, bis hierher schon einmal recht herzlichen Dank. LG: piptrade |
|
|||
... habe die Überprüfung des Rückgabewert, so wie beschrieben, vorgenommen:
case OP_BUY: // für OP_SELL analog if (Bid - mindestStopLoss >= OrderOpenPrice + 7* Point) { OrderModify(OrderTicket(),OrderOpenPrice() + 4 * Point, 0, 0, Blue); // Warnung: Rückgabewert von OrderModify sollte geprüft werden ! } if(!OrderModify(OrderTicket(),OrderOpenPrice() + 4 * Point, 0, 0, Blue)) { Print("Fehler beim Ändern der Position: "+GetLastError()); } ... dennoch bleiben die Warnungen zur Überprüfung des Rückgabewertes bestehen ! Was nun ?? |
|
|||
Ach bist du niedlich xD
Also erstmal hast du jetzt bei OrderModify einen Parameter vergessen. Es muss nicht OrderModify(OrderTicket(),OrderOpenPrice() + 4 * Point, 0, 0, Blue) heißen, sondern OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + 4 * Point, 0, 0, Blue) Dann zur Überprüfung des Rückgabewertes musst du nicht den Code zusätzlich einbauen. So wie du es jetzt geschrieben hast führst du einmal OrderModify aus und dann führst du es nochmal aus mit Überprüfung des Rückgabewertes. Verstehst du was ich meine? Code:
if(!OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + 4 * Point, 0, 0, Blue)){ Print("Fehler beim Ändern der Position: "+GetLastError()); } Also mit ! negierst du. Wenn nicht OrderModify dann.... Hoffe das ist verständlich |
|
|||
... alles völlig logisch und durchaus auch halbwegs verständlich. Und so sieht der code jetzt aus:
case OP_BUY: // analog für OP_SELL if (Bid - mindestStopLoss >= OrderOpenPrice + 7* Point) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice() + 4 * Point, 0, 0, Blue); // Warnung: "Rückgabewert von OrderModify sollte geprüft werden" - bleibt bestehen ! } if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ord erOpenPrice() + 4 * Point, 0, 0, Blue)) { Print("Fehler beim Ändern der Position: "+GetLastError()); } Obwohl ich das Prinziep der "Umkehrung" verstanden habe und jetzt keinen Fehler mehr im code entdecken kann - die Kompelier-Warnung bleibt bestehen: "Überprüfe Rückgabewert". (Ich bekomme schon ein schlechtes Gewissen - ist da schon wieder etwas falsch ?) LG. piptrade |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, scalper sl, sl, stoploss, stoploss ea, stoploss nachziehen |
|
|