Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 11): EA de señales Heikin Ashi
Introducción
Las fórmulas matemáticas son la base del análisis de la evolución de los precios, ya que ofrecen un método objetivo para descifrar los datos del mercado y orientar las decisiones de inversión. En el mercado de divisas sudafricano, por ejemplo, un operador que evalúe el par ZARUSD podría utilizar una media móvil simple de 50 días para detectar cambios de tendencia, al tiempo que aplica la desviación estándar para medir la volatilidad del mercado, confirmando así posibles rupturas. La incorporación de fórmulas para el dimensionamiento de posiciones y la gestión de riesgos, como el cálculo del tamaño de la operación en función de un porcentaje de riesgo establecido y la distancia de stop-loss, permite al operador gestionar eficazmente el riesgo y establecer objetivos de beneficio claros mediante herramientas como los retrocesos de Fibonacci.
En este artículo, nos complace presentar la técnica Heikin Ashi para el cálculo de reversiones de tendencia, añadiendo así otra capa a nuestra estrategia integrada que combina el análisis cuantitativo con los métodos clásicos de acción del precio. Una ventaja significativa de Heikin Ashi es su capacidad para filtrar el ruido del mercado, lo que permite a los operadores centrarse en la tendencia subyacente sin distraerse con fluctuaciones menores de los precios. Este enfoque suaviza las fluctuaciones del mercado y garantiza que las decisiones se basen en datos, proporcionando un marco disciplinado aplicable a diversos mercados financieros de todo el mundo.
Comenzaremos definiendo Heikin Ashi y explorando sus orígenes. A continuación, sin rodeos innecesarios, nos sumergiremos directamente en la estrategia para que puedas comprender exactamente cómo funciona. También examinaremos otras funciones clave, proporcionaremos el código completo y, finalmente, revisaremos los resultados antes de concluir el artículo. Ahora, echemos un vistazo al índice.
Heikin Ashi
La técnica Heikin Ashi fue desarrollada por Munehisa Homma, un comerciante de arroz japonés del siglo XVIII al que también se le atribuye ser el pionero de los gráficos de velas japonesas, una herramienta fundamental en el análisis técnico. Originario de Japón, Heikin Ashi fue diseñado para ayudar a los operadores a obtener una perspectiva más clara de las tendencias del mercado, centrándose en el movimiento medio de los precios en lugar de en las formaciones individuales de las velas. En japonés, Heikin significa «promedio» o «equilibrio», mientras que Ashi se traduce como «barra» o «vela». Este nombre refleja el principio básico de los gráficos Heikin Ashi: suavizar los datos de precios para ofrecer una visión más equilibrada y menos volátil de los movimientos del mercado. Echemos un vistazo al siguiente diagrama, que ilustra cómo un gráfico de velas tradicional se transforma en un gráfico Heikin Ashi más suave.

Figura 1. Gráfico suavizado
La siguiente tabla compara las velas tradicionales y las velas Heikin Ashi, destacando sus diferencias clave.
| Característica | Velas tradicionales | Velas Heikin Ashi |
|---|---|---|
| Base de cálculo | Utiliza los precios reales de apertura, máximo, mínimo y cierre. | Utiliza una fórmula modificada que promedia los datos de precios. |
| Visualización de volatilidad | Muestra las fluctuaciones y diferencias reales de precios. | Suaviza la acción del precio, reduciendo el ruido. |
| Claridad de la tendencia | Puede ser volátil, con velas rojas y verdes alternadas incluso en las tendencias. | Proporciona tendencias más suaves con menos cambios de color. |
| Visibilidad de la brecha (gap) | Muestra las brechas (gaps) de precios entre las velas japonesas. | Rara vez muestra diferencias debido a la fórmula de promedio. |
| Señales de reversión | Muestra reversiones rápidas y mechas. | Las reversiones son más lentas, pero más fuertes cuando se confirman. |
| Representación de precios | Refleja los precios reales del mercado. | Precios promedio, lo que significa que el último precio no coincide con el precio real de mercado. |
Estrategia
Esta estrategia se basa en cuatro funciones principales de nuestro EA en MQL5: cálculo de Heikin Ashi, confirmación de tendencias, identificación de señales de reversión y confirmación de señales mediante el RSI. Analicemos cada uno de ellos en detalle a continuación.
Cálculo de Heikin Ashi
Los gráficos Heikin Ashi se construyen utilizando cuatro puntos de datos clave: precios de apertura, máximos, mínimos y cierre de cada período. Estos valores se procesan para generar velas Heikin Ashi, que difieren de las velas tradicionales. En lugar de reflejar la evolución del precio sin procesar, las velas Heikin Ashi utilizan cálculos de precios promediados, combinando los precios de apertura y cierre, así como los precios máximos y mínimos, para crear una representación más fluida de las tendencias del mercado.
Este efecto suavizante minimiza el impacto de las fluctuaciones repentinas de los precios, reduciendo el ruido del mercado y facilitando la identificación de las tendencias. Como resultado, las velas Heikin Ashi suelen presentar cuerpos más pequeños y mechas más largas, lo que resalta el impulso del mercado y filtra la volatilidad a corto plazo. Para implementar la estrategia Heikin Ashi, el siguiente diagrama de flujo muestra cómo los datos tradicionales de las velas se transforman en un gráfico Heikin Ashi suave y centrado en las tendencias. Este proceso filtra el ruido del mercado y ofrece una perspectiva más clara de la tendencia predominante. A continuación se detalla paso a paso cómo funciona:

Figura 2. Diagrama de flujo
El diagrama de flujo ilustra cómo los datos OHLC tradicionales se transforman en velas Heikin Ashi. El proceso comienza con datos brutos del mercado, que luego se suavizan calculando un promedio del precio de cierre (haClose). El precio de apertura (haOpen) se determina utilizando los valores de la vela anterior para crear continuidad, mientras que haHigh y haLow garantizan que la vela refleje todo el rango de movimientos del precio. El resultado es una vela que reduce la volatilidad a corto plazo, haciendo que las tendencias generales sean más visibles. A continuación se muestra el fragmento de código MQL5 para la función que calcula las velas Heikin Ashi.
void CalculateHeikinAshi() { MqlRates rates[]; int copied = CopyRates(_Symbol, _Period, 0, Bars(_Symbol, _Period), rates); if(copied < TrendCandles + 2) { Print("Failed to copy rates. Copied: ", copied); return; } ArraySetAsSeries(rates, true); // Resize arrays to match the number of copied bars ArrayResize(haClose, copied); ArrayResize(haOpen, copied); ArrayResize(haHigh, copied); ArrayResize(haLow, copied); // Calculate Heikin-Ashi values for each bar for(int i = copied - 1; i >= 0; i--) { haClose[i] = (rates[i].open + rates[i].high + rates[i].low + rates[i].close) / 4.0; haOpen[i] = (i == copied - 1) ? (rates[i].open + rates[i].close) / 2.0 : (haOpen[i + 1] + haClose[i + 1]) / 2.0; haHigh[i] = MathMax(rates[i].high, MathMax(haOpen[i], haClose[i])); haLow[i] = MathMin(rates[i].low, MathMin(haOpen[i], haClose[i])); } Print("Heikin-Ashi Calculation Complete"); }
El resultado es una serie de velas Heikin Ashi que filtran gran parte del ruido del mercado, permitiendo que la tendencia subyacente se haga más evidente.
Confirmación de tendencia
Antes de intentar identificar cualquier señal de reversión, el EA realiza una confirmación de la tendencia para asegurarse de que existe un movimiento direccional fuerte. Esto implica analizar un número específico de velas Heikin Ashi consecutivas. Para una tendencia alcista, el EA comprueba que el haClose de cada vela sea superior al de la vela siguiente, mientras que para una tendencia bajista, verifica que los valores haClose sean consecutivamente inferiores. El número de velas necesarias para confirmar la tendencia se controla mediante parámetros de entrada, lo que garantiza que solo se tengan en cuenta las tendencias bien establecidas. Este riguroso control minimiza el riesgo de señales falsas al confirmar que el mercado muestra una tendencia decisiva antes de pasar a la detección de reversiones.
int consecutive = 0; for(int i = 2; i <= TrendCandles + 1; i++) { if((haClose[i] > haClose[i + 1] && isBullish) || (haClose[i] < haClose[i + 1] && !isBullish)) consecutive++; else break; } if(consecutive < ConsecutiveCandles) return false;
Este paso garantiza que solo se tenga en cuenta una señal cuando haya pruebas sólidas de una tendencia en curso, lo que reduce las posibilidades de que se produzcan señales falsas debido a fluctuaciones aleatorias del mercado.
Identificación de señales de reversión
Tras confirmar una tendencia establecida, el EA procede a identificar posibles señales de reversión examinando detenidamente la estructura de la siguiente vela Heikin Ashi. En esta etapa, el EA calcula el cuerpo de la vela como la diferencia absoluta entre haClose y haOpen, y mide la sombra en función de la dirección de interés, centrándose en la sombra inferior para una reversión alcista y en la sombra superior para una reversión bajista. Una condición clave es que la relación entre la sombra y el cuerpo debe superar un umbral predefinido. Esta elevada relación entre la sombra y el cuerpo indica que el mercado ha rechazado con fuerza la tendencia predominante, como lo demuestra la larga mecha en relación con el pequeño cuerpo. Este patrón sirve como un indicador sólido de que podría estar produciéndose un cambio de tendencia.
// Check for a strong reversal candlestick double body = MathAbs(haClose[1] - haOpen[1]); double shadow = (direction > 0) ? MathAbs(haLow[1] - haOpen[1]) : MathAbs(haHigh[1] - haOpen[1]); // Avoid division by zero and confirm shadow-to-body ratio if(body == 0.0 || (shadow / body) < ShadowToBodyRatio) return false;
Este paso filtra las señales débiles o ambiguas al exigir una característica de reversión fuerte en la estructura de la vela antes de continuar.
Confirmación de la señal con el RSI
El último paso de la estrategia consiste en confirmar la señal de reversión utilizando el índice de fuerza relativa (Relative Strength Index, RSI), lo que añade un nivel adicional de validación. Una vez identificada una posible reversión mediante los criterios de Heikin Ashi, el EA recupera el último valor del RSI para evaluar el impulso del mercado. Para una señal de reversión alcista, el RSI debe estar por debajo de un umbral de compra designado, lo que indica que el activo está sobrevendido; por el contrario, para una reversión bajista, el RSI debe superar un umbral de venta especificado, lo que sugiere que el activo está sobrecomprado. Solo cuando se cumplen tanto el patrón Heikin Ashi como la condición RSI, el EA genera una señal de trading, como dibujar una flecha de compra o venta en el gráfico. Este enfoque de doble confirmación ayuda a reducir las señales falsas, garantizando que las operaciones solo se ejecuten cuando varios indicadores corroboren un cambio de tendencia en el mercado.
// Get RSI Value double rsiValue; if(!GetRSIValue(rsiValue)) { Print("Failed to retrieve RSI value."); return; } // Detect potential reversals with RSI confirmation if(DetectReversal(true) && rsiValue < RSI_Buy_Threshold) // Bullish reversal with RSI confirmation { DrawArrow("BuyArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_BID), 233, BuyArrowColor); Print("Bullish Reversal Detected - RSI:", rsiValue); } else if(DetectReversal(false) && rsiValue > RSI_Sell_Threshold) // Bearish reversal with RSI confirmation { DrawArrow("SellArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_ASK), 234, SellArrowColor); Print("Bearish Reversal Detected - RSI:", rsiValue); }
La confirmación del RSI añade una capa de análisis del impulso. Al combinar la acción del precio a través de Heikin Ashi con el impulso a través de RSI el EA mejora la fiabilidad de las señales, garantizando que las operaciones solo se realicen cuando varios indicadores coincidan.
Otras funciones
Parámetros de entrada
Antes de profundizar en la lógica central, debemos definir un conjunto de parámetros de entrada que nos permitan ajustar con precisión el comportamiento del EA. Estos parámetros nos permiten controlar las reglas de confirmación de tendencias, las condiciones de reversión, los umbrales de volumen, la configuración del RSI y la visualización de señales, todo ello sin modificar el código.
input int TrendCandles = 3; // Number of candles for trend detection input double ShadowToBodyRatio = 1.5; // Shadow-to-body ratio for reversal detection input int ConsecutiveCandles = 2; // Consecutive candles to confirm trend input int RSI_Period = 14; // RSI Period input double RSI_Buy_Threshold = 34.0; // RSI level for buy confirmation input double RSI_Sell_Threshold = 65.0; // RSI level for sell confirmation input color BuyArrowColor = clrGreen; // Buy signal color input color SellArrowColor = clrRed; // Sell signal color
Estos parámetros nos permiten controlar aspectos clave de la estrategia. La configuración de TrendCandles define cuántas velas Heikin Ashi tenemos en cuenta al identificar tendencias. ShadowToBodyRatio garantiza que solo se tengan en cuenta las velas de fuerte reversión. ConsecutiveCandles filtra las tendencias débiles al requerir al menos dos velas para confirmar una dirección. RSI_Buy_Threshold y RSI_Sell_Threshold añaden otra capa de confirmación utilizando el RSI. BuyArrowColor y SellArrowColor nos permiten personalizar cómo aparecen las señales en el gráfico.
Variables globales
Para garantizar que nuestros cálculos se ejecuten de manera eficiente, declaramos matrices globales para almacenar los valores de Heikin Ashi, así como un identificador para el indicador RSI.
double haClose[], haOpen[], haHigh[], haLow[]; int rsiHandle;
Utilizamos estas variables para almacenar los valores calculados de Heikin Ashi y obtener lecturas de RSI de forma dinámica en nuestro EA.
Inicialización (OnInit)
Cuando adjuntamos el EA al gráfico, la función OnInit() se ejecuta primero. Configura nuestras matrices Heikin Ashi e inicializa el indicador RSI.
int OnInit() { ArraySetAsSeries(haClose, true); ArraySetAsSeries(haOpen, true); ArraySetAsSeries(haHigh, true); ArraySetAsSeries(haLow, true); if(Bars(_Symbol, _Period) < TrendCandles + 2) { Print("Not enough bars for initialization."); return INIT_FAILED; } rsiHandle = iRSI(_Symbol, _Period, RSI_Period, PRICE_CLOSE); if(rsiHandle == INVALID_HANDLE) { Print("Failed to create RSI indicator."); return INIT_FAILED; } Print("EA Initialized Successfully"); return INIT_SUCCEEDED; }
Aquí, configuramos nuestras matrices en orden inverso, por lo que la última vela siempre está en el índice 0. Comprobamos si hay suficientes barras disponibles antes de realizar los cálculos. Inicializamos el indicador RSI y gestionamos cualquier error en caso de fallo. Si todo está configurado correctamente, el EA imprime un mensaje de confirmación y comienza a funcionar.
Procesamiento de ticks (OnTick)
Esta función se ejecuta con cada nueva fluctuación de precio, asegurando que analicemos continuamente el mercado e identifiquemos posibles señales de negociación.
void OnTick() { if(Bars(_Symbol, _Period) < TrendCandles + 2) { Print("Not enough bars for tick processing."); return; } CalculateHeikinAshi(); double rsiValue; if(!GetRSIValue(rsiValue)) { Print("Failed to retrieve RSI value."); return; } if(DetectReversal(true) && rsiValue < RSI_Buy_Threshold) { DrawArrow("BuyArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_BID), 233, BuyArrowColor); Print("Bullish Reversal Detected - RSI:", rsiValue); } else if(DetectReversal(false) && rsiValue > RSI_Sell_Threshold) { DrawArrow("SellArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_ASK), 234, SellArrowColor); Print("Bearish Reversal Detected - RSI:", rsiValue); } }
Generamos un nombre único para cada flecha en función de la marca de tiempo de la señal. Si se encuentra una flecha existente con el mismo nombre, la eliminamos para evitar el desorden. Luego, creamos un nuevo objeto de flecha y establecemos sus propiedades (color, tamaño y tipo). Si la operación se realiza correctamente, imprimiremos un mensaje confirmando que la flecha se ha colocado correctamente.
Limpieza al desinicializar (OnDeinit)
Cuando eliminamos el EA del gráfico, necesitamos liberar los recursos del indicador para evitar problemas de memoria.
void OnDeinit(const int reason) { if(rsiHandle != INVALID_HANDLE) IndicatorRelease(rsiHandle); }
Esta función garantiza que el indicador RSI se elimine correctamente cuando el EA deje de ejecutarse.
Código MQL5
//+------------------------------------------------------------------+
//| Heikin Ashi Signal EA.mq5 |
//| Copyright 2025, Christian Benjamin. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Christian Benjamin."
#property link "https://www.mql5.com/en/users/lynnchris"
#property version "1.00"
#property strict
//--- Input parameters
input int TrendCandles = 3; // Number of candles for trend detection
input double ShadowToBodyRatio = 1.5; // Shadow-to-body ratio for reversal detection
input int ConsecutiveCandles = 2; // Consecutive candles to confirm trend
input int RSI_Period = 14; // RSI Period
input double RSI_Buy_Threshold = 34.0; // RSI level for buy confirmation
input double RSI_Sell_Threshold = 65.0; // RSI level for sell confirmation
input color BuyArrowColor = clrGreen; // Buy signal color
input color SellArrowColor = clrRed; // Sell signal color
//--- Global variables
double haClose[], haOpen[], haHigh[], haLow[];
int rsiHandle;
//+------------------------------------------------------------------+
//| Expert initialization |
//+------------------------------------------------------------------+
int OnInit()
{
ArraySetAsSeries(haClose, true);
ArraySetAsSeries(haOpen, true);
ArraySetAsSeries(haHigh, true);
ArraySetAsSeries(haLow, true);
if(Bars(_Symbol, _Period) < TrendCandles + 2)
{
Print("Not enough bars for initialization.");
return INIT_FAILED;
}
// Initialize RSI indicator
rsiHandle = iRSI(_Symbol, _Period, RSI_Period, PRICE_CLOSE);
if(rsiHandle == INVALID_HANDLE)
{
Print("Failed to create RSI indicator.");
return INIT_FAILED;
}
Print("EA Initialized Successfully");
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(Bars(_Symbol, _Period) < TrendCandles + 2)
{
Print("Not enough bars for tick processing.");
return;
}
// Calculate Heikin-Ashi
CalculateHeikinAshi();
// Get RSI Value
double rsiValue;
if(!GetRSIValue(rsiValue))
{
Print("Failed to retrieve RSI value.");
return;
}
// Detect potential reversals with RSI confirmation
if(DetectReversal(true) && rsiValue < RSI_Buy_Threshold) // Bullish reversal with RSI confirmation
{
DrawArrow("BuyArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_BID), 233, BuyArrowColor);
Print("Bullish Reversal Detected - RSI:", rsiValue);
}
else
if(DetectReversal(false) && rsiValue > RSI_Sell_Threshold) // Bearish reversal with RSI confirmation
{
DrawArrow("SellArrow", iTime(NULL, 0, 0), SymbolInfoDouble(_Symbol, SYMBOL_ASK), 234, SellArrowColor);
Print("Bearish Reversal Detected - RSI:", rsiValue);
}
}
//+------------------------------------------------------------------+
//| Calculate Heikin-Ashi |
//+------------------------------------------------------------------+
void CalculateHeikinAshi()
{
MqlRates rates[];
int copied = CopyRates(_Symbol, _Period, 0, Bars(_Symbol, _Period), rates);
if(copied < TrendCandles + 2)
{
Print("Failed to copy rates. Copied: ", copied);
return;
}
ArraySetAsSeries(rates, true);
// Resize arrays to match the number of copied bars
ArrayResize(haClose, copied);
ArrayResize(haOpen, copied);
ArrayResize(haHigh, copied);
ArrayResize(haLow, copied);
// Calculate Heikin-Ashi
for(int i = copied - 1; i >= 0; i--)
{
haClose[i] = (rates[i].open + rates[i].high + rates[i].low + rates[i].close) / 4.0;
haOpen[i] = (i == copied - 1) ? (rates[i].open + rates[i].close) / 2.0 : (haOpen[i + 1] + haClose[i + 1]) / 2.0;
haHigh[i] = MathMax(rates[i].high, MathMax(haOpen[i], haClose[i]));
haLow[i] = MathMin(rates[i].low, MathMin(haOpen[i], haClose[i]));
}
Print("Heikin-Ashi Calculation Complete");
}
//+------------------------------------------------------------------+
//| Detect Reversals with Trend Confirmation |
//+------------------------------------------------------------------+
bool DetectReversal(bool isBullish)
{
int direction = isBullish ? 1 : -1;
// Confirm trend location: Check for consecutive candles in the same direction
int consecutive = 0;
for(int i = 2; i <= TrendCandles + 1; i++)
{
if((haClose[i] > haClose[i + 1] && isBullish) || (haClose[i] < haClose[i + 1] && !isBullish))
consecutive++;
else
break;
}
if(consecutive < ConsecutiveCandles)
return false;
// Check for a strong reversal candlestick
double body = MathAbs(haClose[1] - haOpen[1]);
double shadow = (direction > 0) ? MathAbs(haLow[1] - haOpen[1]) : MathAbs(haHigh[1] - haOpen[1]);
// Avoid division by zero and confirm shadow-to-body ratio
if(body == 0.0 || (shadow / body) < ShadowToBodyRatio)
return false;
// Confirm the reversal with the next candlestick (opposite direction)
return ((haClose[0] - haOpen[0]) * direction < 0);
}
//+------------------------------------------------------------------+
//| Get RSI Value |
//+------------------------------------------------------------------+
bool GetRSIValue(double &rsiValue)
{
double rsiBuffer[];
if(CopyBuffer(rsiHandle, 0, 0, 1, rsiBuffer) > 0)
{
rsiValue = rsiBuffer[0];
return true;
}
return false;
}
//+------------------------------------------------------------------+
//| Draw Arrow |
//+------------------------------------------------------------------+
void DrawArrow(string name, datetime time, double price, int code, color clr)
{
name += "_" + IntegerToString(time);
if(ObjectFind(0, name) != -1)
ObjectDelete(0, name);
if(ObjectCreate(0, name, OBJ_ARROW, 0, time, price))
{
ObjectSetInteger(0, name, OBJPROP_ARROWCODE, code);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
Print("Arrow Drawn: ", name, " at ", price);
}
else
{
Print("Failed to create arrow: ", GetLastError());
}
}
//+------------------------------------------------------------------+
//| Expert deinitialization |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(rsiHandle != INVALID_HANDLE)
IndicatorRelease(rsiHandle);
}
//+------------------------------------------------------------------+
Resultados
En mi proceso de pruebas, utilicé tanto pruebas retrospectivas como pruebas en el mercado real para evaluar el rendimiento del EA.- Pruebas retrospectivas
Ejecuté el EA con datos históricos para verificar su viabilidad básica y descubrir sus fortalezas y debilidades. This phase confirms that the approach works under known market conditions, although it can’t fully replicate real-world factors like slippage or variable spreads. Veamos el siguiente GIF.

Figura 3. Pruebas retrospectivas del índice V100
A continuación, presento resultados adicionales de pruebas retrospectivas para tres pares diferentes durante un período de 27 días para evaluar la precisión de la señal. Una señal se consideraba exitosa si el mercado cambiaba de dirección después de la confirmación.
- EURUSD
| Señal | Total | Ganadoras | % Precisión |
|---|---|---|---|
| Compra | 20 | 17 | 85% |
| Venta | 10 | 8 | 80% |
- Índice Crash 900
| Señal | Total | Ganadoras | % Precisión |
|---|---|---|---|
| Compra | 18 | 14 | 77.8% |
| Venta | 25 | 15 | 60% |
- Índice sintético Step (Deriv)
| Señal | Total | Ganadoras | % Precisión |
|---|---|---|---|
| Compra | 18 | 15 | 83.3.% |
| Venta | 22 | 14 | 63.6% |
El EA ha demostrado ser muy eficaz, alcanzando una precisión mínima del 77,8 % en las señales de compra y al menos del 60 % en las señales de venta en todos los pares probados.
- Pruebas de mercado en vivo

Figura 4. Pruebas de mercado en vivo del índice V25
Conclusión clave
Las pruebas retrospectivas validan la estrategia en teoría, mientras que las pruebas en vivo demuestran su rendimiento práctico. Ambas etapas son cruciales para perfeccionar el EA y garantizar que sea lo suficientemente robusto para el trading en el mundo real.
Conclusión
La estrategia Heikin-Ashi es especialmente eficaz para filtrar las fluctuaciones del mercado. También me ha resultado útil para identificar puntos de reversión del mercado. Después de probarlo como cualquier otra herramienta, descubrí que funciona de manera más eficiente cuando se utiliza junto con otras estrategias. Es importante experimentar con las entradas del código y probar en una cuenta demo o mediante pruebas retrospectivas hasta que logre el mejor rendimiento según sus preferencias. Agradecemos enormemente sus sugerencias.
| Fecha | Nombre de la herramienta | Descripción | Versión | Actualizaciones | Notas |
|---|---|---|---|---|---|
| 01/10/24 | Chart Projector | Script para superponer la evolución del precio del día anterior con efecto fantasma. | 1.0 | Lanzamiento inicial | Primera herramienta en Lynnchris Tool Chest. |
| 18/11/24 | Analytical Comment | Proporciona información del día anterior en formato tabular, además de anticipar la dirección futura del mercado. | 1.0 | Lanzamiento inicial | Segunda herramienta en Lynnchris Tool Chest. |
| 27/11/24 | Analytics Master | Actualización periódica de los indicadores del mercado cada dos horas. | 1.01 | Segundo lanzamiento | Tercera herramienta en Lynnchris Tool Chest. |
| 02/12/24 | Analytics Forecaster | Actualización periódica de los indicadores del mercado cada dos horas con integración de Telegram. | 1.1 | Tercera edición | Herramienta número 4 |
| 09/12/24 | Volatility Navigator | El EA analiza las condiciones del mercado utilizando los indicadores Bandas de Bollinger, RSI y ATR. | 1.0 | Lanzamiento inicial | Herramienta número 5 |
| 19/12/24 | Mean Reversion Signal Reaper | Analiza el mercado utilizando una estrategia de reversión a la media y proporciona señales. | 1.0 | Lanzamiento inicial | Herramienta número 6 |
| 09/01/25 | Signal Pulse | Analizador de múltiples marcos temporales. | 1.0 | Lanzamiento inicial | Herramienta número 7 |
| 17/01/25 | Metrics Board | Panel con botones para análisis. | 1.0 | Lanzamiento inicial | Herramienta número 8 |
| 21/01/25 | External Flow | Análisis mediante bibliotecas externas. | 1.0 | Lanzamiento inicial | Herramienta número 9 |
| 27/01/25 | VWAP | Precio medio ponderado por volumen. | 1.3 | Lanzamiento inicial | Herramienta número 10 |
| 02/02/25 | Heikin Ashi Signal EA | Suavizado de tendencias e identificación de señales de reversión. | 1.0 | Lanzamiento inicial | Herramienta número 11 |
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/17021
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Ingeniería de características con Python y MQL5 (Parte III): El ángulo del precio (2) Coordenadas polares
Predicción de tendencias con LSTM para estrategias de seguimiento de tendencias
Creación de un Panel de administración de operaciones en MQL5 (Parte IX): Organización del código (I)
Características del Wizard MQL5 que debe conocer (Parte 53): Market Facilitation Index (MFI)
- 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