MQL5 Wizard permite la creación automática de Asesores Expertos (ver MQL5 Wizard: Creando Asesores Expertos sin Programación).
La clase CSignalCandles proporciona señales de trading basadas en patrones de velas reversales. La estrategia se denomina "Señales basadas en patrones de velas reversales" (al crear el EA automáticamente en MQL5 Wizard).
La idea del sistema es identificar los patrones de reversa mediante el cálculo de la vela compuesta. Los patrones de reversa son similares a los patrones de "Martillo" y "Hombre Colgado" en el análisis de velas japonesas. Sin embargo, utiliza la vela compuesta en lugar de una sola vela y no necesita el pequeño cuerpo de la vela compuesta para confirmar la reversa.
Parámetros de entrada:
- Rango - número máximo de barras utilizadas en el cálculo de la vela compuesta.
- Mínimo - tamaño mínimo de la vela compuesta (en puntos convencionales).
- SombraGrande y SombraPequeña - sombras (en unidades de vela compuesta).
- Límite, StopLoss y TakeProfit - precio de apertura, niveles de SL y TP, los valores definidos en relación al precio de cierre de la vela compuesta (unidades de vela compuesta).
- Expiración - tiempo de expiración de la orden (en barras), utilizado en trading con órdenes pendientes (Límite!=0.0).
Los patrones de velas reversales se determinan de la siguiente manera:
Se calculan los parámetros de la vela compuesta comenzando desde la barra completada más reciente (con índice 1) hasta el número de barras definido por el parámetro de entrada Rango. Si el tamaño de la vela compuesta es mayor que el valor especificado por el parámetro de entrada Mínimo, se revisan las condiciones de reversa de la vela compuesta mediante el análisis de sus sombras.
El poder de los osos se caracteriza por el tamaño de la sombra superior de la vela compuesta, mientras que el poder de los toros se caracteriza por el tamaño de la sombra inferior.
- Para confirmar la reversa de la tendencia bajista (y el inicio de la tendencia alcista), se necesita lo siguiente: el tamaño de la sombra inferior (poder de los toros) debe ser mayor que el valor definido por el parámetro de entrada SombraGrande. El tamaño de la sombra superior (poder de los osos) debe ser menor que el valor definido por el parámetro de entrada SombraPequeña.
- Para confirmar la reversa de la tendencia alcista (y el inicio de la tendencia bajista), se necesita lo siguiente: el tamaño de la sombra superior (poder de los osos) debe ser mayor que el valor definido por el parámetro de entrada SombraGrande. El tamaño de la sombra inferior (poder de los toros) debe ser menor que el valor definido por el parámetro de entrada SombraPequeña.
Además de la estrategia de reversa, es posible usar estrategias de ruptura especificando un valor negativo para el parámetro de entrada Límite (ver MQL5 Wizard - Señales de Trading Basadas en el Cruce de Dos EMA con filtro de tiempo intradía).
Dependiendo del Límite, se utilizan tres formas diferentes de entrada al mercado:
- Límite>0. Entrará en un retroceso del precio, mejor que el precio de mercado (se colocarán órdenes pendientes de Buy Limit o Sell Limit dependiendo de la señal de trading).
- Límite<0. Entrará en la dirección del movimiento del precio (se utilizarán órdenes pendientes de Buy Stop o Sell Stop dependiendo de la señal de trading).
- Límite=0. Operará utilizando los precios de mercado.
Esta estrategia está implementada en la clase CSignalCandles.

Figura 1. Señales de trading, basadas en patrones de velas reversales
Señales de trading
Las señales de trading están implementadas en la clase CSignalCandles, y existe una función Candle() utilizada para el análisis:
int Candle(int ind); // Devuelve el número positivo/negativo dependiendo del tipo de la vela compuesta // el valor devuelto es el número de barras (velas) en la vela compuesta (comenzando desde ind)
Se pueden utilizar varias velas (barras) en la construcción de la vela compuesta. El número mínimo de barras está definido por el parámetro Rango. En algunos casos, la vela compuesta puede formarse con menos velas que el Rango (cuando se cumplen las condiciones de tamaño/sombras). La función Candle devuelve 0 si no se puede formar la vela compuesta.
1. Abrir posición larga
Para abrir una posición larga, se necesita una vela compuesta alcista. La función lo verifica y devuelve si la vela compuesta aún no se ha formado o si la vela compuesta es bajista. De lo contrario, calcula el tamaño de la vela compuesta (necesario para el cálculo del precio, SL y niveles de TP) y calcula los niveles de precios para la orden pendiente.
Ten en cuenta que el tipo de orden pendiente (Buy Limit o Buy Stop) depende del signo del parámetro de entrada Límite (si Límite=0 o |precio-ask|<nivel de stops, colocará una orden de compra de mercado; si Límite>0, colocará la orden pendiente de Buy Limit; si Límite<0, se colocará la orden pendiente de Buy Stop).
//+------------------------------------------------------------------+ //| Verifica condiciones para abrir posición larga (compra) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- verifica la formación de la vela compuesta alcista if(Candle(1)<=0) return(false); //--- obtiene el tamaño de la vela compuesta double size=m_high_composite-m_low_composite; //--- calcula el precio de la orden pendiente price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- calcula el precio de Stop Loss sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- calcula el precio de Take Profit tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- establece el tiempo de expiración de la orden expiration+=m_expiration*PeriodSeconds(m_period); //--- se cumplen las condiciones, retorna true return(true); }
2. Cerrar posición larga
Si se ha formado la vela compuesta bajista, se cierra la posición larga.
//+------------------------------------------------------------------+ //| Verifica condiciones para cerrar posición larga |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- verifica la formación de la vela compuesta bajista if(Candle(1)>=0) return(false); //--- price=0.0; //--- se cumplen las condiciones, retorna true return(true); }
3. Abrir posición corta
Se debe formar una vela compuesta bajista para abrir una posición corta. Si la vela compuesta no se ha formado o no es bajista, se retorna. De lo contrario, determinamos su tamaño y calculamos los niveles de precios de la orden pendiente
(el tipo de orden depende del signo del parámetro de entrada Límite, ver "Abrir posición larga").
//+------------------------------------------------------------------+ //| Verifica condiciones para abrir posición corta (venta) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- verifica la formación de la vela compuesta bajista if(Candle(1)>=0) return(false); //--- obtiene el tamaño de la vela compuesta double size=m_high_composite-m_low_composite; //--- calcula el precio de la orden pendiente price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- calcula el precio de Stop Loss sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- calcula el precio de Take Profit tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- establece el tiempo de expiración de la orden expiration+=m_expiration*PeriodSeconds(m_period); //--- se cumplen las condiciones, retorna true return(true); }
4. Cerrar posición corta
Si se ha formado la vela compuesta alcista, se cierra la posición corta.
//+------------------------------------------------------------------+ //| Verifica condiciones para cerrar posición corta |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- verifica la formación de la vela compuesta alcista if(Candle(1)<=0) return(false); //--- price=0.0; //--- se cumplen las condiciones, retorna true return(true); }
Creando un Asesor Experto usando MQL5 Wizard
Para crear un robot de trading basado en la estrategia, debes seleccionar las propiedades de señal como "Señales basadas en patrones de velas reversales" en la opción "Creando Asesores Expertos Listos" del MQL5 Wizard:

Figura 2. Selecciona "Señales basadas en patrones de velas reversales" en MQL5 Wizard
A continuación, debes especificar el algoritmo de trailing stop necesario y el sistema de gestión de dinero y riesgo. El código del Asesor Experto se creará automáticamente, podrás compilarlo y probarlo en el Tester de Estrategias del terminal del cliente de MetaTrader 5.
Resultados de las Pruebas
Consideremos las pruebas retrospectivas del Asesor Experto sobre datos históricos (EURUSD M15, periodo de prueba: 1.1.2010-05.01.2011, Rango=3, Mínimo=50, SombraGrande=0.5, SombraPequeña=0.2, Límite=0, StopLoss=2.0, TakeProfit=1.0, Expiración=4).
En la creación del Asesor Experto utilizamos un volumen fijo (Trading con Lote Fijo, 0.1), no se utilizó el algoritmo de Trailing Stop (Sin Trailing).

Figura 3. Resultados de Prueba del Asesor Experto con señales de trading, basadas en patrones de velas reversales
Adjuntos: El archivo SignalCandles.mqh con la clase CSignalCandles debe ser colocado en terminal_data_folder\MQL5\Include\Expert\Signal.
El archivo expert_candles.mq5 contiene el código del Asesor Experto, creado utilizando MQL5 Wizard.
Publicaciones relacionadas
- Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas de la Mañana/Atardecer y CCI
- Cómo Crear un Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas y Estocástico
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Harami y Estocástico