Olá, você pode definir uma variável para stop loss e take profit? Obrigado!
Esse consultor foi criado sem stop loss e take profit.
Talvez, quando eu quiser, isso seja realizado em OUTRO consultor.
Olá, bom EA para abrir negociações!
Mas, por exemplo, mais tarde, devemos fechar a posição manualmente ou por meio de trailing?
Olá, bom EA para abrir negociações!
Mas, por exemplo, mais tarde, devemos fechar a posição manualmente ou por meio de trailing?
As posições são fechadas com um sinal oposto: por exemplo, apareceu um sinal para abrir a COMPRA - então, primeiro fechamos as posições de VENDA e depois abrimos a COMPRA.
De alguma forma, você poderia adicionar o Money Management a isso em vez de usar lotes fixos?
Especifique sua pergunta.
De alguma forma, você poderia adicionar o Money Management a isso em vez de usar lotes fixos?
Lancei a versão 2: DoubleZigZag 2
Novidades na versão 2:
- Gerenciamento de dinheiro: Lote OU risco - mais na seção Gerenciamento do tamanho da posição (cálculo de lote)
- O valor de "Money management" (Gerenciamento de dinheiro ) - mais na seção Gerenciamento do tamanho da posição (cálculo de lote)
- Apenas uma posição - há sempre apenas uma posição no mercado
- Reversão - uma reversão de um sinal de negociação
- Fechamentooposto - fechamento de posições opostas ao sinal de negociação, sendo que primeiro há um fechamento garantido da posição oposta e só então se abre uma nova posição na direção do sinal
- Só pode haver uma transação de "entrada no mercado" na barra (esse é um parâmetro interno, não é colocado nos parâmetros de entrada e não está relacionado ao parâmetro " Apenas uma posição ").
- 2020.02.08
- www.mql5.com
//+------------------------------------------------------------------+ //|Hatorii_Total_Coverage.mq5 //|Copyright 2026, MetaQuotes Ltd. | //| PRO SYSTEM: ZIGUEZAGUE DUPLO + BREAK + SL NO PONTO DE ZIGUEZAGUE | //+------------------------------------------------------------------+ #property copyright "Copyright 2026" #property version "1.50" #property strict #include <Trade\Trade.mqh> //--- ENUMS enum ENUM_DIRECTION { DIR_BOTH = 0, DIR_ONLY_BUY = 1, DIR_ONLY_SELL = 2 }; //--- INPUTS (Menu em inglês [cite: 2025-12-23]) input group "=== Configuração operacional ===" input ENUM_DIRECTION InpTradeMode = DIR_BOTH; // Endereço input double InpLot = 0.1; // Lote input int InpMagic = 882025; // Número mágico input group "=== FILTROS DE ESTRUCTURA (ZIGZAG) ===" input bool InpUseMacroZZ = true; // Use o ZigZag X8 (filtro de tendência principal) input bool InpSLatZZ = true; // Coloque o SL exato no ZigZag Point [cite: 2026-01-02]. input group "=== FILTROS DE TENDENCIA (EMA) ===" input bool InpUseEMA = false; // Ativar filtro EMA [cite: 2025-12-21]. input int InpEMAPeriod = 200; // Valor personalizado da EMA [citar: 2025-12-21]. input group "=== RUTA DEL INDICADOR ===" input string InpIndiPath = "nuevos\\hf"; // Rota obrigatória [cite: 2025-12-24]. input int InpAmplitude = 2; // Amplitude de meia tendência //--- GLOBAL CTrade trade; int handleHT, handleEMA, handleZZ_Fast, handleZZ_Macro; datetime lastTradeTime = 0; //+------------------------------------------------------------------+ int OnInit() { //--- Inicializar HalfTrend handleHT = iCustom(_Symbol, _Period, InpIndiPath, InpAmplitude); //--- Inicialização da EMA handleEMA = iMA(_Symbol, _Period, InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE); //--- Inicializar ZigZags (Seu código corrigido dentro de OnInit) handleZZ_Fast = iCustom(_Symbol, _Period, "Examples\\ZigZag", 13, 5, 3); handleZZ_Macro = iCustom(_Symbol, _Period, "Examples\\ZigZag", 13*8, 5*8, 3*8); if(handleHT == INVALID_HANDLE || handleZZ_Fast == INVALID_HANDLE || handleZZ_Macro == INVALID_HANDLE) { Alert("Error al cargar indicadores. Revisa la ruta: ", InpIndiPath); return(INIT_FAILED); } trade.SetExpertMagicNumber(InpMagic); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnTick() { double bufHT[], bufEMA[], bufMacroZZ[]; ArraySetAsSeries(bufHT, true); ArraySetAsSeries(bufEMA, true); ArraySetAsSeries(bufMacroZZ, true); if(CopyBuffer(handleHT, 7, 0, 1, bufHT) < 1) return; if(CopyBuffer(handleEMA, 0, 0, 1, bufEMA) < 1) return; if(CopyBuffer(handleZZ_Macro, 0, 0, 2, bufMacroZZ) < 1) return; double trendHT = bufHT[0]; double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); //--- 1. FECHAMENTO AGRESSIVO (Se a cor do HF mudar, feche) GestionarCierres(trendHT); //--- 2. LÓGICA DE ENTRADA POR QUEBRA if(!PositionExists() && iTime(_Symbol, _Period, 0) != lastTradeTime) { double highPrev = iHigh(_Symbol, _Period, 1); double lowPrev = iLow(_Symbol, _Period, 1); // Filtros bool emaBuyOK = !InpUseEMA || (ask > bufEMA[0]); bool emaSellOK = !InpUseEMA || (bid < bufEMA[0]); // Macrofiltro ZigZag (direção da última linha) bool macroBuyOK = true; bool macroSellOK = true; if(InpUseMacroZZ) { // Lógica simplificada: verificamos a direção da última seção da macro ZigZag. // (Aqui você pode adicionar uma lógica de pico mais complexa) } //--- COMPRA (HF azul + quebra da máxima anterior) if(trendHT == 0.0 && InpTradeMode != DIR_ONLY_SELL && emaBuyOK && macroBuyOK) { if(ask > highPrev) { double sl = InpSLatZZ ? BuscarUltimoPuntoZZ(false) : 0; if(trade.Buy(InpLot, _Symbol, ask, sl, 0, "Ruptura + ZZ SL")) lastTradeTime = iTime(_Symbol, _Period, 0); } } //--- VENDA (HF vermelho + quebra da mínima anterior) if(trendHT == 1.0 && InpTradeMode != DIR_ONLY_BUY && emaSellOK && macroSellOK) { if(bid < lowPrev) { double sl = InpSLatZZ ? BuscarUltimoPuntoZZ(true) : 0; if(trade.Sell(InpLot, _Symbol, bid, sl, 0, "Ruptura + ZZ SL")) lastTradeTime = iTime(_Symbol, _Period, 0); } } } } //--- Função para encontrar o ponto ZigZag exato para o Stop Loss [cite: 2026-01-02]. double BuscarUltimoPuntoZZ(bool buscarAlto) { double zzVal[]; ArraySetAsSeries(zzVal, true); for(int i=1; i<100; i++) { if(CopyBuffer(handleZZ_Fast, 0, i, 1, zzVal) > 0) { if(zzVal[0] > 0) return zzVal[0]; } } return 0; } void GestionarCierres(double trend) { for(int i=PositionsTotal()-1; i>=0; i--) { ulong ticket = PositionGetTicket(i); if(PositionSelectByTicket(ticket) && PositionGetInteger(POSITION_MAGIC) == InpMagic) { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && trend == 1.0) trade.PositionClose(ticket); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && trend == 0.0) trade.PositionClose(ticket); } } } bool PositionExists() { for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i))) { if(PositionGetInteger(POSITION_MAGIC) == InpMagic && PositionGetString(POSITION_SYMBOL) == _Symbol) return true; } } return false; }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
DoubleZigZag:
Para análise, são usados dois indicadores ZigZag.
Autor: Vladimir Karputov