Autore dell'idea — Vladimir Khlystov, autore del codice MQL5 — barabashkakvn.
La strategia di trading è semplice: si basa sul breakout di un massimo/minimo nel periodo di tempo selezionato. Per recuperare le posizioni in perdita, l'EA utilizza la strategia "Nevalyashka" insieme a una tecnica di martingale per aumentare il lotto.
L'EA calcola il prezzo massimo e minimo nell'intervallo di tempo specificato da Time start a Time end:

Se il prezzo supera il massimo di questo periodo, viene aperta una posizione BUY. Se il prezzo scende sotto il minimo, viene aperta una posizione SELL. Lo StopLoss è impostato al confine opposto del periodo, ossia al prezzo minimo per le posizioni BUY e al prezzo massimo per le posizioni SELL. Il TakeProfit è fissato in base all'altezza del periodo di controllo.
Se il parametro Use time close è impostato su true, il parametro Time close (tempo per chiudere tutte le posizioni) sarà attivo.
Per quanto riguarda i parametri Time start, Time end e Time close, vengono considerati solo ore e minuti.
La chiusura per StopLoss è monitorata in OnTradeTransaction.
Quando viene trovato "DEAL_ENTRY_OUT", controlla il campo commento di questo affare. Se il commento contiene "sl", significa che l'affare è stato chiuso da StopLoss:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_OUT)
{
MqlDateTime str1;
TimeToStruct(TimeCurrent(),str1);
//--- c'è la possibilità che questa fosse una chiusura sul TakeProfit
if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0)
{
TradeDey=str1.day;
return;
}
//--- c'è la possibilità che questa fosse una chiusura sul StopLoss
if(StringFind(deal_comment,"sl",0)!=-1)
{
if(TradeDey!=str1.day)
{
Print("È stata rilevata una chiusura di StopLoss!");
double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume);
if(deal_type==DEAL_TYPE_SELL) // la posizione buy è stata chiusa
{
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) // la posizione sell è stata chiusa
{
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;
}
}
A questo punto, viene aperta una posizione opposta a quella chiusa (se il tipo di affare è "DEAL_TYPE_SELL", significa che è stata chiusa una posizione BUY; "DEAL_TYPE_BUY" significa che è stata chiusa una posizione SELL), con un lotto aumentato moltiplicato per K. martin. Se una posizione è stata chiusa con un profitto positivo, l'Expert Advisor attenderà l'orario di inizio del prossimo periodo Time end, e ripeterà la procedura sopra descritta.
Il parametro No loss significa breakeven; quando si raggiunge metà del profitto della posizione, lo StopLoss viene spostato al prezzo di apertura della posizione.
Esempio di test su EURUSD, M30:

Commento 0