Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Nevalyashka_BreakdownLevel - expert para MetaTrader 5
- Publicado por:
- Vladimir Karputov
- Visualizações:
- 1261
- Avaliação:
- Publicado:
- 2017.08.24 14:17
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Autor da ideia — Vladimir Khlystov, autor do código mq5 — barabashkakvn.
Estratégia de negociação: quebra de máximo/mínimo no intervalo de tempo selecionado. Para compensar as posições desfavoráveis, usadass a estratégia "Nevalyashka" e a técnica martingale para aumentar o lote.
O expert calcula o máximo e o mínimo do preço, no intervalo de temo entre "Time start" (início do período de controle) e "Time end" (final do período de controle):
Se o preço cruzar o máximo deste período, será aberta a posição "BUY", se o preço cruzar para baixo o mínimo, será aberta a posição "SELL". StopLoss colocado para a borda oposta do período, ou seja, para a posição "BUY", colocado no nível do mínimo do preço, para a posição "SELL", colocado no nível do máximo do preço. TakeProfit colocado segundo o nível da altura do período de controle.
Se o parâmetro "Use time close" é true, é desencadeado o parâmetro "Time close" (hora em que todas as posições são fechadas).
Para os parâmetros de entrada "Time start", "Time end" e "Time close" são levadas em conta apenas as horas e minutos.
O fechamento segundo o StopLoss é monitorado na função OnTradeTransaction.
Encontrada uma posição do tipo "DEAL_ENTRY_OUT" (pt: "Sair do mercado", en: "Entry out"), examinamos o campo de comentários nessa transação. Se nos comentários encontramos "sl", é muito provável que tenha sido encontrada uma transação fechada segundo StopLoss:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { MqlDateTime str1; TimeToStruct(TimeCurrent(),str1); //--- there is a chance that this was a closure on the TakeProfit if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0) { TradeDey=str1.day; return; } //--- there is a chance that this was a closure on the StopLoss if(StringFind(deal_comment,"sl",0)!=-1) { if(TradeDey!=str1.day) { Print("A StopLoss closure has been detected!"); double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume); if(deal_type==DEAL_TYPE_SELL) // the buy position is closed { 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) // the sell position is closed { 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; } } }
e fechamos a posição oposta à fechada (se o tipo de transação for "DEAL_TYPE_SELL", a posição fechada terá sido "BUY"; se o tipo de transação for "DEAL_TYPE_BUY", terá sido fechada uma posição "SELL"), mas, ao acontecer isto, aumentamos o volume da transação "K. martin" vezes. Se a posição for fechada com resultados positivos, o EA esperará o início do seguinte período "Time end", e tudo será repetido.
Parâmetro "No loss", ou seja, posições movidas para Break-Even, isto é, quando metade do lucro é alcançado pela posição, StopLoss é movido para o nível do preço de abertura.
Exemplo de teste em EURUSD, M30:
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/18645
Indicador Boa_ZigZag_Arrows com capacidade de alterar o timeframe do indicador nos parâmetros de entrada.
AutoTradeLevelsO indicador marca com linhas horizontais curtas todas as transações concluídas.
Canal construído nos picos e fundos do indicador ЗигЗага Boa_ZigZag
ZigZag_channelCanal construído nos picos e fundos do indicador ЗигЗага.