Autor da ideia — Vladimir Khlystov, autor do código MQL5 — barabashkakvn.
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:

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:

Comentário 0