Trading Sistemático

MA Trend 2: Asesor Experto para MetaTrader 5
MetaTrader5
MA Trend 2: Asesor Experto para MetaTrader 5

Te presento la evolución de la primera versión de MA Trend, que ahora incluye un nuevo parámetro de restricción de Tipo de trading:Solo compra - solo se permite abrir operaciones de compra.Solo venta - se permite abrir operaciones de venta únicamente.Compra y venta - se pueden abrir tanto operaciones de compra como de venta.Este Asesor Experto opera según el indicador iMA (Media Móvil, MA) y cuenta con diversas configuraciones:Solo una posición - se puede mantener solo una posición en el mercado.Inversión - invertir (cambiar) las señales de trading.Cerrar opuestas - forzar el cierre de posiciones opuestas cuando se recibe una señal de trading.La generación de señales de trading con todos los parámetros configurados por defecto es la siguiente:El precio actual de ASK es mayor que el valor del indicador en la barra #1 -> señal para abrir posición de COMPRAEl precio actual de BID es menor que el valor del indicador en la barra #1 -> señal para abrir posición de VENTA.Y así es como se vería en el código MQL5:      if(m_symbol.Ask()>ma[1])          m_need_open_buy=true;       else if(m_symbol.Bid()<ma[1])          m_need_open_sell=true;Veamos un ejemplo de funcionamiento cuando el parámetro Solo una posición es falso y verdadero:En el siguiente ejemplo, con Solo una posición - verdadero, Inversión - falso y Cerrar opuestas - verdadero: se abrió una posición de COMPRA, y tras un tiempo se recibió una señal para abrir una posición de VENTA. Como Cerrar opuestas es verdadero, primero se cerró la posición de COMPRA (ya que es opuesta a la señal) y luego se abrió la posición de VENTA.

2025.04.04
iCHO Trend CCIDualOnMA: Estrategia de Trading para MetaTrader 5
MetaTrader5
iCHO Trend CCIDualOnMA: Estrategia de Trading para MetaTrader 5

Estrategia de TradingEste Asesor Experto utiliza dos indicadores: iCHO (Oscilador de Chaikin, CHO) y un personalizado CCIDualOnMA. El CHO funciona como un indicador de tendencia y, además, cuando cruza cero, se usa para cerrar posiciones. Por su parte, el indicador 'CCIDualOnMA' actúa como un filtro para añadir posiciones. Ambos indicadores se crean en el marco de tiempo especificado como 'Marco de trabajo' - el mismo marco de tiempo se usa para determinar el momento de la aparición de una nueva barra (si es necesario para los parámetros 'Trailing on ...' y 'Buscar señales en ...').Señales de Trading:Cierre de posiciones cuando el indicador CHO cruza cero:CruzamientoPosiciones: InvertirModo de TradingCruzamiento de abajo hacia arriba'falso' -> cerrar todas las posiciones de VENTA('Solo se permiten posiciones de COMPRA' O 'Se permiten posiciones de COMPRA y VENTA') -> abrir posición de COMPRA'verdadero' -> cerrar todas las posiciones de COMPRA('Solo se permiten posiciones de VENTA' O 'Se permiten posiciones de COMPRA y VENTA') -> abrir posición de VENTACruzamiento de arriba hacia abajo'falso' -> cerrar todas las posiciones de COMPRA('Solo se permiten posiciones de VENTA' O 'Se permiten posiciones de COMPRA y VENTA') -> abrir posición de VENTA'verdadero' -> cerrar todas las posiciones de VENTA('Solo se permiten posiciones de COMPRA' O 'Se permiten posiciones de COMPRA y VENTA') -> abrir posición de COMPRASeñales normales (agregar una posición)El indicador CHO está por encima de cero y el CCI rápido cruza el CCI lento de abajo hacia arriba y el rápido está por debajo de cero - señal para abrir COMPRA.El indicador CHO está por debajo de cero y el CCI rápido cruza el CCI lento de arriba hacia abajo y el rápido está por encima de cero - señal para abrir VENTA.Fig. 1. Filtro iCHO Trend CCIDualOnMACaracterísticas:El Asesor Experto puede optimizarse pormarco de trabajo ('Marco de trabajo')Solo puede haber un 'entrada al mercado' por barra (este es un parámetro interno, no está incluido en los parámetros de entrada y no tiene relación con el parámetro 'Solo una posición').Al trabajar en modo 'barra interior' (el parámetro 'Buscar señales en ...' es 'barra#0 (en cada tick)') la barra actual es la barra #0; al trabajar en modo 'solo cuando nace una nueva barra' (el parámetro 'Buscar señales en ...' es 'barra #1 (en una nueva barra)') la barra actual es la barra #1.El parámetro 'Modo de trading: ' - restricción sobre qué lado operar. Puede tomar los valores 'Solo se permiten posiciones de COMPRA', 'Solo se permiten posiciones de VENTA'' y 'Se permiten posiciones de COMPRA y VENTA'.El parámetro 'Usar control de tiempo' establece el intervalo de tiempo para buscar señales de trading desde 'Hora de inicio'::'Minuto de inicio' hasta 'Hora de fin'::'Minuto de fin'. El rango de tiempo puede configurarse tanto dentro de un día como con una transición a través de un día.Ahora vamos a aprender más sobre cada grupo de parámetros:Configuraciones de Trading:'Marco de trabajo' - marco de trabajo. El marco de tiempo en el que se crean los indicadores y en el que se busca una nueva barra.El Stop Loss, Take Profit y Trailing se establecen en Puntos. Cualquiera de los parámetros ('Stop Loss', 'Take Profit', 'Trailing Stop') puede desactivarse - para ello, establezca el parámetro seleccionado en '0.0'.Cómo funciona el trailing se muestra en imágenes en el código TrailingStop.Gestión del tamaño de la posición (cálculo de lotes)El lote puede ser constante ('Gestión monetaria' configurada en 'Lote constante' y establecer el tamaño del lote en 'El valor para "Gestión monetaria"') o dinámico - en porcentaje de riesgo por operación ('Gestión monetaria' configurada en 'Riesgo en porcentaje para una operación' y establecer el porcentaje de riesgo en 'El valor para "Gestión monetaria"'). También es posible establecer un lote constante igual al lote mínimo - 'Gestión monetaria' configurada en 'Lotes Min'.Control de tiempo:Esta sección establece el rango de tiempo para buscar señales de trading. El rango de tiempo se activa a través de 'Usar control de tiempo' y establece el intervalo de tiempo para buscar señales desde 'Hora de inicio'::'Minuto de inicio' hasta 'Hora de fin'::'Minuto de fin'. El rango de tiempo puede configurarse tanto dentro de un día como con una transición a través de un día. No afecta al trailing.Características adicionales:La 'Posiciones: Solo una' configurada en 'verdadero' permite al Asesor Experto no tener más de una posición en el mercado.ATENCIÓN: 'Posiciones: Solo una' establecida en'verdadero' no anula'Posiciones: Cerrar opuestas' establecidas en 'verdadero'! En otras palabras: las posiciones opuestas se cerrarán primero.La 'Posiciones: Invertir' es responsable de invertir señales. Un flag interesante es 'Posiciones: Cerrar opuestas' - cuando se establece en 'verdadero', antes de abrir una posición, asegura que se eliminen las posiciones opuestas. La 'Imprimir log' ofrece un registro avanzado de todas las operaciones. El parámetro 'Coeficiente de Freeze y StopsLevels' establece el coeficiente para los niveles de stop y freeze cuando estos niveles para un símbolo son iguales a cero. Se recomienda usar el valor '3'.

2025.04.04
Cómo Detectar el Inicio de una Nueva Barra en MetaTrader 5
MetaTrader5
Cómo Detectar el Inicio de una Nueva Barra en MetaTrader 5

Cuando trabajas con un Asesor Experto (EA) en MetaTrader 5, cada vez que recibes una nueva cotización (o "tick"), se activa la función estándar OnTick() por parte del terminal. Sin embargo, no existe una función de manejo de eventos estándar para detectar el inicio de una nueva barra.Para poder identificar cuándo se inicia una nueva barra, es necesario monitorear el tiempo de apertura de la barra más reciente. Cuando este tiempo cambia, esto indica el inicio de una nueva barra, lo que te permite reaccionar y manejar la situación. A continuación, te muestro un ejemplo de código, compatible tanto con MQL4 como con MQL5, que ilustra cómo lograr esto:// Manejador de eventos de ticks estándar    void OnTick()    {       // Verifica si hay una nueva barra (compatible con MQL4 y MQL5).          static datetime dtBarraCorrente   = WRONG_VALUE;                 datetime dtBarraPrecedente = dtBarraCorrente;                          dtBarraCorrente   = iTime( _Symbol, _Period, 0 );                 bool     bEventoBarraNova  = ( dtBarraCorrente != dtBarraPrecedente );       // Reacciona al evento de una nueva barra y maneja la situación.          if( bEventoBarraNova )          {             // Detecta si este es el primer tick recibido y maneja la situación.                /* Por ejemplo, cuando se aplica por primera vez al gráfico y la barra está en medio de su progreso y no es realmente el inicio de una nueva barra. */                if( dtBarraPrecedente == WRONG_VALUE )                {                   // Realiza alguna acción en el primer tick o en medio de una barra ...                }                else                {                   // Realiza alguna acción cuando aparece una barra normal ...                };             // Realiza algo independiente de la condición anterior ...          }          else          {             // Realiza algo diferente ...          };       // Realiza otras acciones ...    };En el código anterior, la variable estática mantiene un registro del tiempo de apertura de la barra, incluso cuando se retorna de la función OnTick(). A diferencia de una variable local normal, memoriza su contenido y no lo libera al salir de la función. Este es el secreto para detectar un cambio en el tiempo de apertura de la barra actual.También es importante señalar que cuando el EA se coloca en un gráfico por primera vez, el código reacciona como si la barra acabara de abrirse. Esta condición requiere un tratamiento especial si es necesario manejar la situación de manera diferente.Por último, recuerda que el código fuente de todas mis publicaciones en CodeBase también está disponible a través de MetaEditor en "Proyectos Públicos" bajo el nombre "FMIC".

2025.04.03
Cómo Rastrear Retiros en MetaTrader 4: Mejora tu Asesor Experto
MetaTrader4
Cómo Rastrear Retiros en MetaTrader 4: Mejora tu Asesor Experto

Hoy vamos a hablar de un código que puedes añadir a tu Asesor Experto para rastrear los retiros de tu cuenta mientras está funcionando. Este código te ayudará a tener un control más preciso sobre tus retiros y a gestionar mejor tu saldo disponible. Es común que los Asesores Expertos (EAs) se ejecuten en servidores privados virtuales (VPS) para evitar que se reinicien los parámetros cada vez que cambias el marco de tiempo o la plantilla del gráfico. Esto permite que el EA opere de manera más consistente. Un error que muchos traders cometen es establecer un tamaño de lote que solo aumenta y nunca disminuye, incluso cuando están en pérdidas. La esperanza es recuperar esas pérdidas antes de seguir aumentando el tamaño del lote. Sin embargo, esto puede ser un arma de doble filo. Los EAs están diseñados para incrementar el tamaño de los lotes con el fin de recuperar pérdidas, pero no ajustan este tamaño después de un retiro, ya que no pueden diferenciar entre un retiro y una pérdida. Esto puede llevar a situaciones complicadas en la gestión de tu cuenta. Cuando hay una pérdida, el EA continúa utilizando el último tamaño de lote conocido con la esperanza de recuperarse. Pero cuando se realiza un retiro, el Asesor Experto debe reducir su tamaño de lote para adaptarse al nuevo saldo y trabajar con él. Aquí es donde este código puede ser de gran ayuda. Con este código, no solo podrás monitorear tus retiros, sino también ajustar los tamaños de lote según sea necesario. ¡Es una gran herramienta para mantener tus operaciones en equilibrio!

2025.03.31
RRS Tangled EA: Un Asesor Experto para MetaTrader 4 que No Te Puedes Perder
MetaTrader4
RRS Tangled EA: Un Asesor Experto para MetaTrader 4 que No Te Puedes Perder

El RRS Tangled EA es una versión mejorada y depurada del RRS Chaotic EA y del RRS Randomness in Nature EA. Este Asesor Experto selecciona de manera aleatoria los símbolos de divisas, tamaños de lote y tipos de órdenes para operar. No se basa en indicadores técnicos ni en análisis fundamental, sino que utiliza un enfoque de Aleatoriedad en la Naturaleza para abrir operaciones. Con configuraciones adecuadas como Take Profit, Stop Loss, Trailing y Gestión del Riesgo, este EA puede generar beneficios significativos. Lo interesante de este EA es que es multi-divisa o multi-activo, lo que significa que, aunque esté vinculado a un gráfico de un solo par de divisas, puede operar con otros pares y gestionar todas las operaciones relacionadas con las transacciones que ha abierto. Variable Valores Descripción minLot_Size Valor Doble Tamaño mínimo de lote para asegurar que la aleatoriedad no baje de este valor. maxLot_Size Valor Doble Tamaño máximo de lote para asegurar que la aleatoriedad no supere este valor. StopLoss Valor Entero Configura tu valor de stop loss en puntos/pips (la unidad de movimiento de precio más pequeña para tu activo). Establece Stop Loss en 0 para desactivarlo. TakeProfit Valor Entero Configura tu valor de take profit en puntos/pips. Establece Take Profit en 0 para desactivarlo. Trailing_Start Valor Entero (Puntos/Pips) Especifica el número de pips desde el precio de la operación abierta en el que debe comenzar el trailing. Establece Trailing Start en 0 para desactivar esta función. Trailing_Gap Valor Entero (Puntos/Pips) Establece el espacio en pips entre el precio actual del mercado y el stop loss del trailing. Establece Trailing Gap en 0 para desactivarlo. Risk_In_Money_Type FixedMoney, BalancePercentage FixedMoney: Cierra todas las operaciones abiertas cuando la pérdida flotante negativa alcanza una cantidad especificada. BalancePercentage: Calcula automáticamente basado en tu saldo de cuenta y cierra todas las operaciones una vez alcanzado este límite. Money_In_Risk Valor Entero Si Risk_In_Money_Type está configurado en FixedMoney, introduce la cantidad que puedes permitirte perder. Si está configurado en BalancePercentage, el EA calculará automáticamente el riesgo basado en tu saldo y cerrará todas las operaciones cuando se alcance ese límite. Max_Spread Valor Entero (Puntos/Pips) Establece el spread máximo aceptable. Si el spread actual supera este valor, el EA no tomará ninguna operación y esperará a que el spread vuelva dentro del límite especificado. Slippage Valor Entero (Puntos/Pips) Establece el deslizamiento máximo permitido para la ejecución de órdenes. MaxOpenTrade Valor Entero Número máximo de operaciones abiertas permitidas ¡Buena suerte y felices operaciones!

2025.03.23
RRS Chaotic EA: Tu aliado aleatorio en MetaTrader 4
MetaTrader4
RRS Chaotic EA: Tu aliado aleatorio en MetaTrader 4

¡Hola, traders! Hoy quiero hablarles sobre el RRS Chaotic EA, una versión simplificada y optimizada del RRS Randomness in Nature EA. Este asesor experto se basa en la aleatoriedad y abre operaciones con pares de divisas, tamaños de lotes y tipos de órdenes totalmente aleatorios. Lo mejor de todo es que no necesitas ser un experto en técnicas de trading, ya que no depende de indicadores, análisis de precios, eventos del calendario económico o patrones de velas. A pesar de su enfoque aleatorio, este EA ha logrado obtener buenos beneficios cuando se configura correctamente. Es una herramienta versátil que te ofrece diversas estrategias de trading, planes de gestión de riesgo y ajustes personalizables. Variable Valores Descripción minLot_Size Valor Doble Tamaño mínimo de lote para que la aleatoriedad no baje de este valor. maxLot_Size Valor Doble Tamaño máximo de lote para que la aleatoriedad no exceda este valor. StopLoss Valor Entero Establece tu valor de stop loss en puntos/pips (la unidad de movimiento de precio más pequeña para tu activo). Establece Stop Loss a 0 para desactivarlo. TakeProfit Valor Entero Establece tu valor de take profit en puntos/pips. Establece Take Profit a 0 para desactivarlo. Risk_In_Money_Type FixedMoney, BalancePercentage FixedMoney: Cierra todas las operaciones abiertas cuando el negativo flotante alcanza la cantidad especificada. BalancePercentage: Calcula automáticamente basado en tu saldo y cierra todas las operaciones una vez que se alcanza este límite. Money_In_Risk Valor Entero Si Risk_In_Money_Type está configurado como FixedMoney, introduce la cantidad de dinero que puedes permitirte perder. Si está configurado como BalancePercentage, el EA calculará automáticamente el riesgo basado en tu saldo y cerrará todas las operaciones cuando se alcance ese límite. Max_Spread Valor Entero (Puntos/Pips) Establece el spread máximo aceptable. Si el spread actual excede este valor, el EA no tomará una operación y esperará a que el spread regrese dentro del límite especificado. Slippage Valor Entero (Puntos/Pips) Establece el deslizamiento máximo permitido para la ejecución de órdenes.  MaxOpenTrade  Valor Entero Número máximo de operaciones abiertas permitidas Nota: Si estás experimentando algún fallo o error en la operación del EA, elimina #property strict del código del EA en la línea 8. ¡Buena suerte y felices operaciones!

2025.03.19
RRS Aleatoriedad en la Naturaleza: Asesor Experto para MetaTrader 4
MetaTrader4
RRS Aleatoriedad en la Naturaleza: Asesor Experto para MetaTrader 4

¡Hola, traders! Hoy quiero hablarles sobre un Asesor Experto (AE) que realmente se destaca por su naturaleza aleatoria. Este AE selecciona de forma aleatoria pares de divisas, tamaños de lote y tipos de órdenes. A diferencia de otros, no necesita habilidades técnicas como indicadores, acción del precio, eventos del calendario económico o patrones de velas. Además, ofrece múltiples estrategias de trading, planes de gestión de riesgos y otras configuraciones personalizables. Aunque este AE opera con aleatoriedad, ha logrado obtener buenos beneficios en sus operaciones. Variable Valores Descripción Estrategia de Trading OneSide, DoubleSide OneSide: El AE realizará una única operación, ya sea de Compra o Venta. DoubleSide: El AE llevará a cabo una operación de Compra y una de Venta. Tamaño_Minimo_Lote Valor Doble Tamaño mínimo de lote para garantizar que la aleatoriedad del tamaño de lote no baje de este valor. Tamaño_Maximo_Lote Valor Doble Tamaño máximo de lote para garantizar que la aleatoriedad del tamaño de lote no exceda este valor. StopLoss Valor Entero Establece el valor de tu stop loss en puntos/pips (la unidad de movimiento de precio más pequeña para tu activo). Establece Stop Loss a 0 para desactivarlo. TakeProfit Valor Entero Establece el valor de tu take profit en puntos/pips. Establece Take Profit a 0 para desactivarlo. Inicio_Trailing Valor Entero (Puntos/Pips) Especifica el número de pips desde el precio de apertura de la operación en el que debe comenzar el trailing. Establece Inicio Trailing a 0 para desactivar la operación de trailing. Gap_Trailing Valor Entero (Puntos/Pips) Establece el gap en pips entre el precio de mercado actual y el stop loss de trailing. Establece Gap Trailing a 0 para desactivar la operación de trailing. Tipo_Riesgo_Dinero FixedMoney, BalancePercentage FixedMoney: Cierra todas las operaciones abiertas cuando la flotante negativa alcanza la cantidad especificada. BalancePercentage: Calcula automáticamente en base a tu saldo y cierra todas las operaciones una vez que se alcanza este límite. Dinero_En_Riesgo Valor Entero Si Tipo_Riesgo_Dinero está configurado como FixedMoney, ingresa la cantidad de dinero que puedes permitirte perder. Si está configurado como BalancePercentage, el AE calculará automáticamente el riesgo basado en tu saldo y cerrará todas las operaciones cuando se alcance ese límite. Spread_Maximo Valor Entero (Puntos/Pips) Establece el spread máximo aceptable. Si el spread actual excede este valor, el AE no realizará ninguna operación y esperará a que el spread regrese dentro del límite especificado. Deslizamiento Valor Entero (Puntos/Pips) Establece el deslizamiento máximo permitido para la ejecución de órdenes. Nota: Si experimentas un mal funcionamiento o error en la operación del AE, elimina #property strict del código del AE en la línea 8. ¡Buena suerte y felices operaciones!

2025.03.19
RRS EA No Direccional: Tu Asistente de Trading en MetaTrader 4
MetaTrader4
RRS EA No Direccional: Tu Asistente de Trading en MetaTrader 4

Descubre el EA No Direccional RRS Si buscas un Asesor Experto (EA) que no dependa de habilidades técnicas complejas, ¡has llegado al lugar correcto! Este EA No Direccional no necesita indicadores, análisis de precios, eventos de calendario económico o patrones de velas. En su lugar, ofrece varias estrategias de trading, planes de gestión de riesgos y configuraciones personalizables. La belleza de este EA es que ejecuta operaciones de manera continua y aleatoria, según la estrategia que elijas. Aunque el enfoque de este EA es la aleatoriedad, ha demostrado ser rentable cuando se configura adecuadamente la gestión de riesgos. Opciones de Configuración del EA Variable Valores Descripción Estrategia de Trading Hedge_Style, BuySell_Random, Buy_Sell, Auto_Swap, Buy_Order, Sell_Order Hedge_Style: Abre operaciones de compra y venta simultáneamente. BuySell_Random: Abre aleatoriamente una operación de compra o venta. Buy_Sell: Abre una operación según el tipo de orden que se cerró previamente. Si la última orden cerrada fue una compra, abrirá una venta. Auto_Swap: Solo abre operaciones de compra o venta según la dirección del swap positivo, ignorando las operaciones en dirección de swap negativo. Buy_Order: Solo abre operaciones de compra. Sell_Order: Solo abre operaciones de venta. Nueva_Operación Verdadero/Falso Verdadero: El EA puede ejecutar operaciones.Falso: El EA no ejecutará ninguna operación. Tamaño_Lote Valor Doble Selecciona el tamaño de lote deseado para cada operación que ejecute el EA. Tipo_StopLoss Virtual_SL, Classic_SL Virtual SL: El EA cerrará la operación al alcanzar el nivel de stop loss especificado, pero este nivel no será visible para el servidor del bróker (se mantiene en tu PC local).Classic SL: El EA colocará un stop loss visible que reflejará en el servidor del bróker.Esta característica es útil si tu bróker no soporta EAs hiperactivos, tiene un límite en las modificaciones por día, o si sospechas que tu bróker está cazando tu stop loss. StopLoss Valor Entero Establece tu valor de stop loss en puntos/pips (la unidad más pequeña de movimiento de precio para tu activo).Establece Stop Loss en 0 para desactivarlo. Tipo_TakeProfit Virtual_TP, Classic_TP Virtual TP: El nivel de take profit no es visible para el servidor del bróker.Classic TP: El nivel de take profit es visible para el servidor del bróker. TakeProfit Valor Entero Establece tu valor de take profit en puntos/pips.Establece Take Profit en 0 para desactivarlo. Tipo_Trailing Virtual_Trailing, Classic_Trailing Virtual Trailing: Las modificaciones del stop loss se mantienen en tu PC local y no se reflejan en el servidor del bróker.Classic Trailing: Las modificaciones del stop loss se actualizan directamente en el servidor del bróker.Esta característica es útil si tu bróker no soporta EAs hiperactivos, tiene un límite en las modificaciones por día, o si sospechas que tu bróker está cazando tu stop loss. Inicio_Trailing Valor Entero (Puntos/Pips) Especifica el número de pips desde el precio de la operación abierta en el que debe comenzar el trailing. Espacio_Trailing Valor Entero (Puntos/Pips) Establece el espacio en pips entre el precio de mercado actual y el stop loss de trailing.Establece Trailing Gap en 0 para desactivar la operación de Trailing. Tipo_Riesgo_Dinero DineroFijo, PorcentajeBalance Dinero Fijo: Cierra todas las operaciones abiertas cuando la pérdida flotante negativa alcanza tu monto especificado.Porcentaje de Balance: Calcula automáticamente según tu saldo de cuenta y cierra todas las operaciones una vez que se alcanza este límite. Dinero_Riesgo Valor Entero Si Tipo_Riesgo_Dinero está configurado como DineroFijo, ingresa la cantidad de dinero que puedes permitirte perder. Si está configurado como PorcentajeBalance, el EA calculará automáticamente el riesgo según tu saldo de cuenta y cerrará todas las operaciones cuando se alcance ese límite. Max_Espacio Valor Entero (Puntos/Pips) Establece el espacio máximo aceptable. Si el espacio actual supera este valor, el EA no tomará una operación y esperará a que el espacio vuelva dentro del límite especificado. Deslizamiento Valor Entero (Puntos/Pips) Establece el deslizamiento máximo permitido para la ejecución de órdenes. Nota: Si experimentas un mal funcionamiento o error en la operación del EA, elimina #property strict del código del EA en la línea 6. ¡Buena suerte y felices operaciones!

2025.03.17
MeanReversionTrendEA: Estrategia de Trading para MetaTrader 5
MetaTrader5
MeanReversionTrendEA: Estrategia de Trading para MetaTrader 5

1. Resumen MeanReversionTrendEA combina estrategias de seguimiento de tendencias y de reversión a la media utilizando Medias Móviles y mediciones de volatilidad basadas en ATR, con un sistema de validación de operaciones incorporado que asegura una ejecución confiable en diversas condiciones de mercado. 2. Características Principales Estrategia Dual: Integra el seguimiento de tendencias (cruces de MA) y la reversión a la media (desviaciones de precio respecto a la MA). Señales Adaptativas: Utiliza medias móviles rápidas y lentas para identificar tendencias. Integración de Volatilidad: Incorpora ATR para medir la volatilidad del mercado y determinar entradas por reversión a la media. Validador Interno: Sistema de validación de operaciones que verifica volumen, margen y niveles de stop. Mecanismo de Seguridad: Funcionalidad de trading seguro para validar backtests. Gestión de Posiciones Defensiva: SL/TP fijos o proporcionales con validación adecuada. Compatible con Múltiples Activos: Funciona con forex, materias primas, índices y acciones con un tamaño de lote adecuado. 3. Cómo Funciona Monitorea los cruces de medias móviles para detectar cambios en la dirección de la tendencia. Mide las desviaciones del precio respecto a la MA lenta utilizando bandas de volatilidad basadas en ATR. Genera señales de compra cuando la MA rápida cruza por encima de la MA lenta o el precio cae por debajo de la banda de volatilidad. Genera señales de venta cuando la MA rápida cruza por debajo de la MA lenta o el precio sube por encima de la banda de volatilidad. Valida y ejecuta operaciones con parámetros adecuados de gestión de riesgo. 4. Parámetros de Entrada Fast_MA_Period (20), Slow_MA_Period (50), ATR_Period (14) ATR_Multiplier (2.0) para el cálculo de bandas de reversión a la media LotSize (0.1) para el tamaño de la posición SL_Points (500), TP_Points (1000) para la gestión de riesgo Magic_Number (123456) para la identificación de órdenes 5. Notas de Uso Óptimo para todos los pares de divisas principales y activos líquidos. Funciona en todos los marcos temporales, recomendándose H1-H4 para una mejor calidad de señales. Requiere suficientes datos históricos para un cálculo adecuado de indicadores. Ideal para mercados en tendencia con oportunidades ocasionales de reversión. Sistema de validación robusto que asegura una ejecución adecuada en diferentes brokers. 6. Estructura del Código CTradeValidator: Clase de validación de operaciones completa. Funciones de inicialización de indicadores y procesamiento de datos. Generación de señales que combina lógica de tendencia y reversión. Ejecución de operaciones con validación y gestión de riesgo adecuadas. Mecanismos de seguridad para la integridad de los backtests. 7. Descargo de Responsabilidad Proporcionado tal cual para fines educativos. El rendimiento pasado no es indicativo de resultados futuros. Realiza pruebas exhaustivas en cuentas demo antes de operar en vivo.

2025.03.14
Panel en Vivo para Seguimiento de Múltiples EAs con Números Mágicos en MQL5
MetaTrader5
Panel en Vivo para Seguimiento de Múltiples EAs con Números Mágicos en MQL5

Perspectivas Individuales de EstrategiasCuando tienes varias estrategias en una sola cuenta, el verdadero reto es distinguir el rendimiento de cada una. Sin números mágicos, tendrías que confiar en detalles poco claros como comentarios de operaciones o rangos de tickets. Los números mágicos ofrecen una etiqueta numérica sistemática que el EA aplica automáticamente.Seguimiento Preciso del RendimientoPuedes identificar rápidamente qué sistema tiene un retroceso o cuál está rindiendo excepcionalmente. Este conocimiento facilita la toma de decisiones más rápidas, como decidir pausar un robot que no está funcionando bien o destinar más capital a una estrategia ganadora.Análisis y Registro SimplificadosEn lugar de revisar logs o la pestaña de historial, cuentas con un “panel” conciso que agrega las ganancias totales cerradas de cada EA, el conteo de operaciones y los campos de comentarios relevantes. Esto ayuda con la gestión de registros, la optimización de estrategias e incluso los informes a clientes si gestionas cuentas para otros.Código completo adjunto.Consejos de UsoAdjunta el Script/EA a cualquier gráfico en MT5. Después de la compilación, mostrará inmediatamente una tabla con cada número mágico.Verifica el Tamaño del Gráfico: Si tu ventana de gráfico es muy estrecha, parte del texto puede extenderse fuera de la pantalla a la derecha. Amplía el gráfico o reduce el tamaño de la fuente para una mejor legibilidad.Coincide con la Fuente: Se recomienda Courier New para alinear las columnas, pero puedes cambiarla en el código si prefieres un aspecto diferente.Ajusta los Tiempos: Por defecto, el script se actualiza cada 5 segundos. Modifica EventSetTimer(5) si deseas actualizaciones más frecuentes o menos frecuentes.

2025.02.25
Descarga Historial Completo de Ticks de Símbolos en MetaTrader 5
MetaTrader5
Descarga Historial Completo de Ticks de Símbolos en MetaTrader 5

Si eres trader, seguro que sabes lo importante que es tener acceso a datos históricos completos para tus análisis y pruebas. En este artículo, te mostraré cómo utilizar este código para descargar todos los ticks disponibles de un símbolo en MetaTrader 5. ¿Listo para mejorar tus backtests? Este sistema de trading escaneará el mercado de tu bróker y recopilará los símbolos de los cuales descargará todos los ticks, o hasta una fecha específica que tú decidas. Es ideal para crear gráficos personalizados a partir de esos ticks y realizar análisis más profundos. Recuerda que los ticks se almacenan en la carpeta de datos, así que asegúrate de tener suficiente espacio en tu disco duro. Además, para facilitar la descarga de los símbolos, necesitarás un gestor de descargas primero. Estructura CDownloadManager La estructura CDownloadManager contiene toda la información que necesitamos: struct CDownloadManager { bool m_started,m_finished; string m_symbols[],m_current; int m_index; } Estado de la descarga (iniciada/terminada) Lista de símbolos a escanear Símbolo actual Índice del símbolo que se está escaneando También necesitaremos leer y escribir en el disco duro, así que creamos dos funciones rápidas para manejar cadenas de texto en archivos binarios. Función para guardar cadenas en un archivo: void writeStringToFile(int f,string thestring) { // Guardar cadena de símbolo char sysave[]; int charstotal=StringToCharArray(thestring,sysave,0,StringLen(thestring),CP_ACP); FileWriteInteger(f,charstotal,INT_VALUE); for(int i=0;i<charstotal;i++) { FileWriteInteger(f,sysave[i],CHAR_VALUE); } } Esta función recibe: El identificador del archivo f, que debe abrirse con los flags FILE_WRITE|FILE_BIN La cadena que se va a escribir en el archivo La función escribe primero un entero que indica cuántos caracteres hay en la cadena y luego almacena cada carácter. Función para cargar cadenas desde un archivo: string readStringFromFile(int f) { string result=""; // Cargar cadena de símbolo char syload[]; int charstotal=(int)FileReadInteger(f,INT_VALUE); if(charstotal>0) { ArrayResize(syload,charstotal,0); for(int i=0;i<charstotal;i++) { syload[i]=(char)FileReadInteger(f,CHAR_VALUE); } result=CharArrayToString(syload,0,charstotal,CP_ACP); } return(result); } Esta función recibe: El identificador del archivo f, que debe abrirse con los flags FILE_READ|FILE_BIN Lee primero un entero que indica cuántos caracteres se esperan en ese punto del archivo, luego lee cada carácter en un arreglo y finalmente genera una cadena a partir de ese arreglo que se devuelve como resultado. Inicializando el Gestor de Descargas Ahora, necesitamos una forma de inicializar el gestor y llenarlo a partir del mercado: //+------------------------------------------------------------------+ //| Obtener símbolos del mercado                               | //+------------------------------------------------------------------+ void grab_symbols() { //! Solo desde el mercado! int s=SymbolsTotal(true); ArrayResize(m_symbols,s,0); for(int i=0;i<ArraySize(m_symbols);i++) { m_symbols[i]=SymbolName(i,true); } } Es muy sencillo: Solicitamos cuántos símbolos hay en el mercado (activos) Redimensionamos nuestro arreglo m_symbols para recibirlos Recorremos los símbolos y solicitamos el nombre de cada símbolo El siguiente paso es manejar el proceso de descarga de los datos del símbolo, así que necesitaremos una función que actúe como gestor: //+------------------------------------------------------------------+ //| Gestionar el proceso de descarga de símbolos                           | //+------------------------------------------------------------------+ void manage(string folder,string filename) { // Esencialmente, esto inicia o navega al siguiente símbolo // si está configurado if(ArraySize(m_symbols)>0) { // Si no ha comenzado if(!m_started) { m_started=true; // Ir al primer símbolo m_current=m_symbols[0]; m_index=1; save(folder,filename); if(_Symbol!=m_current) { ChartSetSymbolPeriod(ChartID(),m_current,_Period); } else { ENUM_TIMEFRAMES new_period=PERIOD_M1; for(int p=0;p<ArraySize(TFS);p++) { if(_Period!=TFS[p]) { new_period=TFS[p]; break; } } ChartSetSymbolPeriod(ChartID(),m_current,new_period); } return; } // Si comenzó else { m_index++; if(m_index<=ArraySize(m_symbols)) { m_current=m_symbols[m_index-1]; save(folder,filename); if(_Symbol!=m_current) { ChartSetSymbolPeriod(ChartID(),m_current,_Period); } return; } else { m_finished=true; FileDelete(folder+"\"+filename); Print("Finalizado"); ExpertRemove(); return; } } } else { Print("Por favor, obtén los símbolos primero"); } } ¿Cómo funciona el sistema? Se abre el gráfico, necesitas al menos un gráfico y se establece un temporizador. Ese temporizador se ejecuta y cancelamos el temporizador. Verificamos si se trata de una nueva descarga o una descarga continuada. Si es una nueva descarga, configuramos el gestor obteniendo todos los símbolos. Si es una descarga continuada, descargamos datos del símbolo actual. Esta es la parte del código que lleva a cabo la descarga en el temporizador: //+------------------------------------------------------------------+ //| Temporizador                                                             | //+------------------------------------------------------------------+ void OnTimer() { //--- si está sincronizado if(SymbolIsSynchronized(_Symbol)&&TerminalInfoInteger(TERMINAL_CONNECTED)==1) { EventKillTimer(); //--- cargar el sistema aquí if(MANAGER.load(MANAGER_FOLDER,MANAGER_STATUS_FILE)) { //--- sistema cargado, estamos procesando un símbolo Comment("Sistema cargado y estamos procesando "+MANAGER.m_current); //--- carga de ticks //--- encontrar el tick más antiguo disponible en el bróker int attempts=0; int ping=-1; datetime cursor=flatten(TimeTradeServer()); long cursorMSC=((long)cursor)*1000; long jump=2592000000;//60*60*24*30*1000; MqlTick receiver[]; long oldest=LONG_MAX; Comment("Por favor, espera"); while(attempts<5) { ping=CopyTicks(_Symbol,receiver,COPY_TICKS_ALL,cursorMSC,1); if(ping==1) { if(receiver[0].time_msc==oldest) { attempts++; } else { attempts=0; } if(receiver[0].time_msc<oldest) { oldest=receiver[0].time_msc; } cursorMSC-=jump; if(limitDate&&receiver[0].time<=oldestLimit) { break; } } else { attempts++; } Sleep(44); Comment("Tick más antiguo : "+TimeToString((datetime)(oldest/1000),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"\nCursor("+TimeToString((datetime)(cursorMSC/1000),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+")\nIntentos("+IntegerToString(attempts)+")\nPor favor, espera la respuesta..."); } //--- en este punto tenemos el tick más antiguo //--- comenzamos a solicitar ticks desde el más antiguo al más nuevo if(oldest!=LONG_MAX) { ArrayFree(receiver); datetime newest_tick=0; //--- recibir la hora del último tick para este símbolo almacenado en symbol_time datetime most_recent_candle=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_TIME); while(newest_tick<most_recent_candle) { //--- solicitar un nuevo lote comenzando desde el tick más antiguo con el límite de ticks especificado int pulled=CopyTicks(_Symbol,receiver,COPY_TICKS_ALL,oldest,tick_packets); if(pulled>0) { //--- si extraemos un nuevo lote, actualizamos nuestros tiempos descargados newest_tick=receiver[pulled-1].time; oldest=receiver[pulled-1].time_msc; ArrayFree(receiver); } //--- tiempo de espera para las solicitudes del servidor, puedes alterarlo si lo deseas Sleep(44); Comment("Se extrajo hasta "+TimeToString(newest_tick,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" hasta ahora"); } } else { Alert("Por favor, cierra el terminal \n ve a la carpeta de ticks \n y elimina las carpetas vacías"); ExpertRemove(); } //--- actualiza el gestor y sigue adelante MANAGER.manage(MANAGER_FOLDER,MANAGER_STATUS_FILE); } else { //--- obtener los símbolos del mercado para empezar la descarga Comment("Obteniendo MW y comenzando"); MANAGER.grab_symbols(); MANAGER.manage(MANAGER_FOLDER,MANAGER_STATUS_FILE); } } }

2025.02.22
Primero Anterior 1 2 3 4 5 6 7 8 9 Siguiente Último