Hola, ¿se puede establecer una variable para stop loss y take profit? Gracias.
Este asesor fue acuñado sin stop loss y take profit.
Tal vez, cuando quiero, se realizará en OTRO asesor.
¡Hola, EA agradable para abrir el comercio!
Pero por ejemplo más tarde, debemos cerrar la posición manualmente, o por trailing?
¡Hola, EA agradable para abrir el comercio!
Pero por ejemplo más tarde, debemos cerrar la posición manualmente, o por trailing?
Las posiciones se cierran con una señal opuesta: por ejemplo, apareció una señal para abrir COMPRA - entonces primero cerramos las posiciones de VENTA y luego abrimos la COMPRA.
¿Podría añadir a esto la gestión del dinero frente al uso de lotes fijos?
Especifique su pregunta.
De todos modos, ¿podría añadir a esto la gestión del dinero frente al uso de lotes fijos?
He lanzado la versión 2: DoubleZigZag 2
Nuevo en la versión 2:
- Gestión de dinero: Lote O Riesgo - más en la sección Gestión del tamaño de la posición (cálculo del lote)
- El valor de "Gestión de dinero" - más en la sección Gestión del tamaño de la posición (cálculo del lote)
- Sólo una posición - siempre hay una única posición en el mercado
- Reverse - la inversión de una señal de trading
- Cierre opuesto - cierre de posiciones opuestas a la señal de negociación, y primero hay un cierre garantizado de la posición opuesta y sólo entonces la apertura de una nueva posición en la dirección de la señal
- Sólo puede haber una transacción de "entrada al mercado" en la barra (este es un parámetro interno, no se envía a los parámetros de entrada y no está relacionado con el parámetro " Sólo una posición ").
- 2020.02.08
- www.mql5.com
//+------------------------------------------------------------------+ //| Hatorii_Cobertura_Total.mq5 | //| Copyright 2026, MetaQuotes Ltd. | //| SISTEMA PRO: DOBLE ZIGZAG + RUPTURA + SL EN PUNTO ZIGZAG | //+------------------------------------------------------------------+ #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 (Menú en Español [cite: 2025-12-23]) input group "=== Configuración de Operativa ===" input ENUM_DIRECTION InpTradeMode = DIR_BOTH; // Dirección input double InpLot = 0.1; // Lote input int InpMagic = 882025; // Magic Number input group "=== FILTROS DE ESTRUCTURA (ZIGZAG) ===" input bool InpUseMacroZZ = true; // Usar ZigZag X8 (Filtro de Tendencia Mayor) input bool InpSLatZZ = true; // Colocar SL exacto en Punto ZigZag [cite: 2026-01-02] input group "=== FILTROS DE TENDENCIA (EMA) ===" input bool InpUseEMA = false; // Activar Filtro EMA [cite: 2025-12-21] input int InpEMAPeriod = 200; // Valor EMA personalizada [cite: 2025-12-21] input group "=== RUTA DEL INDICADOR ===" input string InpIndiPath = "nuevos\\hf"; // Ruta obligatoria [cite: 2025-12-24] input int InpAmplitude = 2; // Amplitud HalfTrend //--- GLOBALES CTrade trade; int handleHT, handleEMA, handleZZ_Fast, handleZZ_Macro; datetime lastTradeTime = 0; //+------------------------------------------------------------------+ int OnInit() { //--- Inicializar HalfTrend handleHT = iCustom(_Symbol, _Period, InpIndiPath, InpAmplitude); //--- Inicializar EMA handleEMA = iMA(_Symbol, _Period, InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE); //--- Inicializar ZigZags (Tu código corregido 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. CIERRE AGRESIVO (Si cambia color HF, cierra) GestionarCierres(trendHT); //--- 2. LÓGICA DE ENTRADA POR RUPTURA 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]); // Filtro Macro ZigZag (Dirección de la última línea) bool macroBuyOK = true; bool macroSellOK = true; if(InpUseMacroZZ) { // Lógica simplificada: Verificamos la dirección del último tramo del ZigZag Macro // (Aquí podrías añadir lógica más compleja de picos) } //--- COMPRA (HF Azul + Ruptura de Máximo 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); } } //--- VENTA (HF Rojo + Ruptura de Mínimo 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); } } } } //--- Función para buscar el punto exacto del ZigZag para el 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; }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
DoubleZigZag:
Para el análisis se usan dos indicadores ZigZag.
Autor: Vladimir Karputov