Nevalyashka BreakdownLevel: Sistema de Trading para MetaTrader 5

Mike 2017.08.10 21:51 34 0 0
Anexo

Autor da ideiaVladimir Khlystov, autor do código MQL5barabashkakvn.

Esta estratégia de trading foca na quebra de um High/Low dentro de um intervalo de tempo selecionado. Para recuperar posições perdidas, o EA utiliza a estratégia "Nevalyashka" junto com uma técnica de martingale para aumentar o lote.

O EA calcula os preços de High e Low no intervalo de tempo especificado entre Time start e Time end:

Nevalyashka BreakdownLevel

Se o preço ultrapassar o High desse período, uma posição de COMPRA é aberta. Se o preço estiver abaixo do Low, uma posição de VENDA é aberta. O StopLoss é configurado na borda oposta do período, ou seja, no preço Low para posições de COMPRA e no preço High para posições de VENDA. O TakeProfit é definido com base na altura do período de controle.

Se a opção Use time close estiver ativada, o parâmetro Time close (tempo para fechar todas as posições) estará ativo.

Apenas horas e minutos são considerados para os parâmetros Time start, Time end e Time close.

A monitorização de fechamento por StopLoss é feita em OnTradeTransaction.

Quando "DEAL_ENTRY_OUT" é encontrado, verifique o campo de comentário dessa transação. Se o comentário contiver "sl", isso significa que a transação foi fechada pelo StopLoss:

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            MqlDateTime str1;
            TimeToStruct(TimeCurrent(),str1);
            //--- há uma chance de que isso tenha sido um fechamento no TakeProfit
            if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0)
              {
                 TradeDey=str1.day;
               return;
              }
            //--- há uma chance de que isso tenha sido um fechamento no StopLoss
            if(StringFind(deal_comment,"sl",0)!=-1)
              {
               if(TradeDey!=str1.day)
                 {
                  Print("Um fechamento de StopLoss foi detectado!");

                  double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume);

                  if(deal_type==DEAL_TYPE_SELL) // a posição de compra foi fechada
                {
                  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) // a posição de venda foi fechada
                {
                  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;
              }
          }

Uma posição oposta à que foi fechada é aberta (se o tipo de transação for "DEAL_TYPE_SELL", então uma posição de COMPRA foi fechada; "DEAL_TYPE_BUY" significa que uma posição de VENDA foi fechada), com um lote aumentado multiplicado por K. martin. Se uma posição foi fechada com lucro positivo, o Expert Advisor aguarda o início do próximo período Time end e repete o procedimento mencionado acima.

O parâmetro "No loss" significa que quando metade do lucro da posição é alcançado, o StopLoss é movido para o preço de abertura da posição.

Exemplo se testando no EURUSD, M30:

Nevalyashka BreakdownLevel test EURUSD M30

Lista
Comentário 0