Ideengeber — Vladimir Khlystov, Autor des MQL5-Codes — barabashkakvn.
Die Trading-Strategie des Nevalyashka_EA beruht auf dem Durchbruch von Hochs und Tiefs innerhalb eines festgelegten Zeitraums. Um verlustbringende Positionen auszugleichen, verwendet der EA die Nevalyashka-Strategie in Kombination mit einer Martingale-Technik zur Erhöhung des Lot-Volumens.
Der EA berechnet die Hoch- und Tiefpreise im angegebenen Zeitintervall von Startzeit bis Endzeit:

Wenn der Preis das Hoch dieses Zeitraums übersteigt, wird eine BUY-Position eröffnet. Liegt der Preis unter dem Tief, wird eine SELL-Position eröffnet. Der StopLoss wird an der gegenüberliegenden Grenze des Zeitraums gesetzt, also beim Tiefpreis für BUY-Positionen und beim Hochpreis für SELL-Positionen. Der TakeProfit wird basierend auf der Höhe des Kontrollzeitraums festgelegt.
Ist die Option Zeit schließen auf wahr gesetzt, wird der Parameter Zeit schließen (Zeit zum Schließen aller Positionen) aktiv.
Für die Parameter Startzeit, Endzeit und Zeit schließen werden nur Stunden und Minuten berücksichtigt.
Die Überwachung des StopLoss erfolgt in OnTradeTransaction.
Wenn "DEAL_ENTRY_OUT" gefunden wird, überprüfe das Kommentarfeld des Deals. Wenn das Kommentar "sl" enthält, bedeutet das, dass der Deal durch StopLoss geschlossen wurde:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { MqlDateTime str1; TimeToStruct(TimeCurrent(),str1); //--- es besteht die Möglichkeit, dass dies eine Schließung beim TakeProfit war if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0) { TradeDey=str1.day; return; } //--- es besteht die Möglichkeit, dass dies eine Schließung beim StopLoss war if(StringFind(deal_comment,"sl",0)!=-1) { if(TradeDey!=str1.day) { Print("Eine StopLoss-Schließung wurde erkannt!"); double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume); if(deal_type==DEAL_TYPE_SELL) // die Kaufposition wurde geschlossen { double SL=m_symbol.Bid()+loss*m_symbol.Point(); double TP=m_symbol.Bid()-loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenSell(SL,TP,Lot,"Nevalyashka"); } if(deal_type==DEAL_TYPE_BUY) // die Verkaufsposition wurde geschlossen { double SL=m_symbol.Ask()-loss*m_symbol.Point(); double TP=m_symbol.Ask()+loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenBuy(SL,TP,Lot,"Nevalyashka"); } return; } }
Es wird eine Position eröffnet, die der geschlossenen Position entgegensteht (wenn der Deal-Typ "DEAL_TYPE_SELL" war, dann wurde eine BUY-Position geschlossen; "DEAL_TYPE_BUY" bedeutet, dass eine SELL-Position geschlossen wurde), mit einem erhöhten Lot, multipliziert mit K. martin. Wurde eine Position mit einem positiven Gewinn geschlossen, wartet der Expert Advisor auf den Startzeitpunkt des nächsten Zeitraums "Endzeit", und wiederholt die oben beschriebene Prozedur.
Der Parameter "Kein Verlust" bedeutet, dass der StopLoss auf den Eröffnungspreis der Position verschoben wird, sobald die Hälfte des Positionsertrags erreicht ist.
Beispiel für einen Test auf EURUSD, M30:

Kommentar 0