Nevalyashka BreakdownLevel: Il Tuo Expert Advisor per MetaTrader 5

Mike 2017.08.10 21:51 16 0 0
Allegato

Autore dell'ideaVladimir Khlystov, autore del codice MQL5barabashkakvn.

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:

Nevalyashka BreakdownLevel

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:

Nevalyashka BreakdownLevel test EURUSD M30

    Elenco
    Commento 0