|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Stop Loss ODER Trendwechsel
Guten Abend zusammen,
ich bin - mal wieder- auf eure Hilfe angewiesen. Ich habe aktuell folgendes Problem: Derzeit wird die Order ausschließlich dann geschlossen, wenn der Trend (Moving Average) sich dreht. Da mir aber dabei möglicherweise zu hohe umkalkulierbare Verluste entstehen, wollte ich zusätzlich zu dieser Logik einen SL einbauen, um den Maximalverlust zu deckeln. Hierbei ergibt sich aber bei mir die Problematik, dass der EA durch den SL "zerschossen" wird - Hab erst den SL und dann den Code für die "Trendwende". Der Code an sich funktioniert, nur generiert er interessanterweise deutlich weniger Trades. Daher die Frage: Habt ihr eine Idee, wie man die beiden Komponenten verbinden kann? Quasi: Schließe die Long Order, wenn der Kurze den Langen MA kreuzt, oder du 25% im Verlust bist. |
|
|||
Aktuell sieht es so aus
Code:
// SL Long setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET)== true) { if (OrderCloseTime()== 0 && OrderStopLoss()==0) { double StopLoss= NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits); bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow); } } // Trendwechsel von Long auf Short if (OrderSelect(LongOrder,SELECT_BY_TICKET)== true) { if((MAkurz<MAlang) == true) { bool LongOrderGeclosed = OrderClose(LongOrder,OrderLots(),Bid,10,Blue); if (LongOrderGeclosed==true) LongOrder=0; } } |
|
|||
Nach mehrmaligem Lesen habe ich das Gefühl, dass der Kern der Aussage noch nicht ganz raus kommt. Und zwar benötige ich einen Tipp/Hinweis, wie ich die beiden Dinge miteinander verknüpfen kann. Wenn ich den SL drin habe, schließt er die Order aufgrund des MA Crossings nicht mehr... Ziel soll einfach nur sein, dass das MA Crossing die Primärexitlogik ist und der SL quasi nur unterstützend agiert und den maximalen Verlust pro Trade deklariert. Nur bin ich leider mit meinen minimalistischen Programmierfähigkeiten nicht in der Lage sowas ohne Hilfe hinzubekommen. Aber ich möchte es lernen
Über Tipps, der Spezialisten freue ich mich sehr |
|
|||
Versuch den SL und den Kreuzungspunkt NICHT zu verknüpfen, sondern hintereinander abzufragen.
Zuerst den Kreuzungspunkt, dann den SL. Und ein kleiner Programmierhinweis: Code:
if((MAkurz<MAlang) == true) es reicht: if(MAkurz<MAlang) Code:
if (OrderSelect(LongOrder,SELECT_BY_TICKET)== true) vereinfacht: if (OrderSelect(LongOrder,SELECT_BY_TICKET)) |
|
|||
Danke für deinen Hinweis hinsichtlich der Redundanzen. Diese nehme ich raus, merci.
Verstehe ich dich richtig, dass ich die beiden Codes nur umstellen muss und dort nicht extra eine Art „Bindebefehl“ rein muss? Sorry für die blöden Fragen |
|
|||
Blöde Gegenfrage: warum verwendest du nicht den MT5 ?
Da könnte ich dir wesentlich besser helfen. Ich versuche deine Frage in Pseudocode zu beantworten. Das ganze wär für die Ereignisprocedur OnTick() Code:
void OnTick() { if(offenePosition) { if(posLong) { // pos is long if(maCrossShort) drehe_position; if(SL_long_trigger) closeLong; } else { // pos is short if(maCrossLong) drehe_position; if(SL_short_trigger) closeShort; } } else // keine position offen { if(maCrossShort) open_short; if(maCrossLong) open_long; } } Es ist irgendwie ein Jammer, das es da keine vernünftige Codebibliothek gibt und jeder das Rad neu erfinden muss. Grüße, Otto |
|
|||
Ich muss ein wenig zurück rudern. Wenn ich das "== true" entferne, führt dies zu Fehlern im Programm.
Aber deinen Pseudocode (danke dafür) habe ich versucht umzusetzen. Zuerst das Positive: Der EA macht die Tradeanzahl die ich erwartet habe. ABER: Der EA macht jetzt aber mehr Verluste?! Obwohl der SL_prozent mit 25definiert wird. Lt. Strategietester ist der größte Verlusttrade bei 0.1 Lot bei 269 EUR, während das reine schließen einen max. Verlust von 87,50 EUR generiert. Irgendwo ist da noch der Wurm drin, wenn die Sicherheitsmaßnahme das Loss quasi mehr als verdreifacht. Ideen, was ich falsch mache? Code:
{ . . . // Trendwechsel von Long auf Short if (OrderSelect(LongOrder,SELECT_BY_TICKET)== true) { if((MAkurz<MAlang) == true) { //Order Closing bool LongOrderGeclosed = OrderClose(LongOrder,OrderLots(),Bid,10,Blue); if (LongOrderGeclosed==true) LongOrder=0; } else { //SL if (OrderCloseTime()== 0 && OrderStopLoss()==0) { double StopLoss= NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits); bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow); } } //Trendwechsel von Short auf Long if (OrderSelect(ShortOrder,SELECT_BY_TICKET)== true) { if ((MAkurz>MAlang)== true) { //Order Closing bool ShortOrderGeclosed = OrderClose(ShortOrder,OrderLots(),Ask,10,Green); if (ShortOrderGeclosed==true) ShortOrder=0; } else { //SL if (OrderCloseTime()== 0 && OrderStopLoss()==0) { double StopLoss= NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100)),Digits); bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow); } } } } . . . return(0); } |
Lesezeichen |
Stichworte |
mql4, order, programmierung, programmierung metatrader, programmierung mql4, stoploss, trendwechsel |
|
|