English Русский 中文 Deutsch 日本語 Português
Mejorando el reconocimiento de patrones de velas usando Doji como ejemplo

Mejorando el reconocimiento de patrones de velas usando Doji como ejemplo

MetaTrader 5Indicadores | 20 enero 2022, 09:30
1 949 0
ds2
ds2

Introducción

Una de las ventajas de los patrones de velas japonesas es su simplicidad: la descripción consta de solo unas pocas frases, apenas se analizan unas pocas barras o incluso una, y este análisis está al alcance incluso de los tráders principiantes.

Otra ventaja es que no muestra un alto nivel de exigencia respecto al terminal ni a su hardware, ya que no requiere la construcción de indicadores. Esto resultaba especialmente relevante décadas atrás, cuando las computadoras no eran tan avanzadas como hoy. En aquellos días, se inventaron muchos de los patrones de velas.

Pero, tras la simplicidad de los patrones de velas, también se oculta una importante desventaja que, precisamente, podemos eliminar utilizando las capacidades ampliadas de los recursos modernos de auotmatización del trading. Un inconveniente de esto es el redondeo aproximado de las situaciones de mercado hasta los límites de las barras, lo cual influye necesariamente en la eficiencia del trading.


La desventaja de las velas clásicas y la idea de su eliminación

Las barras del gráfico tienen una hora de inicio y finalización discreta y predeterminada, y los eventos en los mercados ocurren continuamente. Algunos movimientos de precios importantes pueden comenzar en una barra y finalizar en otra y, por consiguiente, en el gráfico se verán de una forma totalmente distinta a como lo harían si sucedieran completamente dentro de la barra. El mismo movimiento.

Veamos esto usando como ejemplo las velas Doji. El más interesante de ellos se llama "Lápida" (o de forma invertida, "Libélula"), ya que tiene una forma bien reconocible y supone una señal potencial para el final de la tendencia y su posible reversión. En tal vela, los precios de apertura y cierre son aproximadamente iguales, la sombra superior es muy alta y casi no hay sombra inferior:

Figura 1. Vela Doji "Lápida" ideal


En el ejemplo del gráfico de precios de abajo no hay velas Doji así:

Figura 2. Barras habituales del marco temporal H4


¿Pero es así en realidad? Veamos qué movimientos han sucedido dentro de estas barras: para ello, cambiaremos a un marco temporal menor:


Figura 3. Barras habituales del marco temporal H1


En la figura anterior, podemos ver que algunas barras tienen precios de cierre aproximadamente iguales a los precios de apertura de otras barras. Y si combinamos todas las barras en el intervalo de las horas 1 a la 5, obtendremos una vela Doji. De la misma forma ocurre con las barras de las horas 6 a la 9 y de las horas 7 a la 9. Llamaremos a estos grupos de barras «metabarras»:

Figura 4. Metabarras en el marco temporal H1


Esto no es ningún tipo de magia o truco astuto. Estas son velas Doji reales, basadas en los movimientos de precios reales de las barras de las horas 5, 4 y 3 que no eran visibles en el marco temporal estándar H4 simplemente porque existe una longitud de barra codificada de 4 horas y una hora de inicio de barra fija. Una diferencia de longitud de solo 1 hora o un cambio de los límites de la barra en 1 hora provoca una diferencia importante en el resultado.

¿Cuántas de estas velas Doji no ven los tráders? Estamos hablando de una gran cantidad de señales perdidas para el trading,

y lleva mucho tiempo analizar manualmente los gráficos en busca de dichas metabarras. Sería genial crear un indicador que haga esto automáticamente.


Desarrollando un indicador Doji mejorado

Vamos a decidir qué parámetros de entrada debe tener este indicador.

Para ello, recordaremos con más detalle de qué partes consta la vela Doji.

Figura 5. Estructura de la vela

Height — altura total de la vela.

Body — altura del cuerpo de la vela.

Shadow — altura de la sombra más corta de la vela. Una barra normal tiene dos sombras: superior e inferior. Sin embargo, en la vela Doji solo nos interesa la más corta de ellas, ya que la descripción de las velas Doji dice que debería estar casi ausente, pero nada se dice de la sombra opuesta a ella.

Las velas Doji se diferencian de otras barras y velas en las proporciones especiales de sus partes. Es decir, el cuerpo de la vela debe estar casi ausente, y una de las sombras también. Pero «casi ausente» es un concepto confuso. Se supone que cada tráder decide por sí mismo si la barra es lo suficientemente similar a la vela Doji o no. Pero para un indicador programático, se necesitan criterios claros y formales. Esto significa que necesitaremos la capacidad de establecer de alguna forma todas estas proporciones en los parámetros de entrada del indicador.

input double  Candle_BodyPowerMax      = 0.2;    // Maximum body height relative to a candle height

Es decir, Candle_BodyPowerMax = Body / Height (ver la figura de arriba), más concretamente, el valor límite que puede tener esta proporción. Todas las barras en las que esta proporción sea igual o inferior (hasta cero) a la especificada, serán una vela Doji.

Lo mismo con la sombra:

input double  Candle_ShadowPowerMax    = 0.2;    // Maximum shadow height relative to a candle height

Candle_ShadowPowerMax = Shadow / Height (ver la figura de arriba), más concretamente, el valor límite que puede tener esta proporción. Todas las barras en las que esta proporción sea igual o inferior (hasta cero) a la especificada, serán una vela Doji.

Para un indicador que construya velas Doji basadas en barras individuales, estos parámetros de entrada podrían ser suficientes. Pero, en nuestro caso, el indicador trabajará con metabarras, así que también necesitaremos la capacidad de establecer el número de barras incluidas en la metabarra. Es decir, deberemos establecer el ancho de la metabarra.


Figura 6. Parámetro especial de una barra construida con metabarras


Es posible que esta anchura no sea fija (esta es la ventaja de las metabarras sobre los marcos temporales normales), sino que el tráder la establezca como un intervalo:

input int     Candle_WidthMin          = 1;      // Minimum candle width in bars
input int     Candle_WidthMax          = 2;      // Maximum candle width in bars

Por cierto, si un tráder establece Candle_WidthMin y Candle_WidthMax en 1 para el indicador, todas las metabarras serán iguales a las barras normales, es decir, el indicador construirá velas Doji de la forma clásica. De lo contrario, el indicador iterará sobre todas las secuencias de barras en el rango de anchura especificado y comprobará si juntas forman una vela Doji.

Dado que, en el caso de las metabarras, el indicador en cada barra no solo opera en la barra en sí, sino también en varias más antiguas, en el evento OnInit (inicialización del indicador), deberemos indicarle esto al terminal para que no dibuje el indicador con toda la historia, sino que haga un pequeño retroceso al principio:

SkipBars = Candle_WidthMax;
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, SkipBars);

La variable SkipBars debe declararse como global (de tipo int), y también deberá usarse en los cálculos de los indicadores (en OnCalculate) para que el indicador no solo no se dibuje en las barras más antiguas de la historia, sino que ni siquiera intente realizar cálculos con ellas (lo cual provocaría al cien por cien la salida de la metabarra del límite de la historia y, por consiguiente, un error).

A continuación, describiremos en términos generales el algoritmo de la parte principal del indicador.

OnCalculate() organiza el ciclo de indicador habitual, es decir, la iteración de todas las barras de indicador no calculadas, para calcular realmente todos los valores de los indicadores.
Dentro de este ciclo general, se organiza otro ciclo: la construcción de todas las metabarras posibles, partiendo de la barra indicadora calculada actualmente y expandiéndose hacia el pasado. Este es un ciclo desde 1 hasta Candle_WidthMax (parámetro de entrada del indicador); es decir, al principio, la metabarra es igual a una barra de precio normal. En cada iteración, se añade otra barra de la historia de precios a la metabarra, y así sucesivamente.

La adición de una barra a una metabarra supone una comparación de los precios OHLC de la barra con los precios OHLC de la metabarra. Como resultado, la metabarra acumula los valores más extremos en sí misma, por lo que, poco a poco y paso a paso, calcula sus dimensiones en aumento.

Para cada metabarra, se calculan los parámetros de la vela correspondiente (altura del cuerpo, altura de la sombra, anchura), y luego se comprueba que se cumplan los valores límite especificados en los parámetros de entrada del indicador.

Si la vela resulta ser la vela Doji deseada, ocurre lo siguiente:

El indicador dibuja una línea vertical en la dirección en la que se orienta la vela (hacia arriba o hacia abajo). La altura de la línea es igual a la anchura de esta vela.

El ciclo de expansión de la metabarra se rompe.

El lector podrá encontrar el código completo del indicador en los anexos al artículo.

Vamos a echar un vistazo al funcionamiento de este indicador en el terminal.

Aquí vemos que el indicador ha encontrado Velas Doji que constan de una barra:

Figura 7. El indicador señala la presencia de velas Doji con una anchura de 1 barra


Las velas Doji en el gráfico se encuentran 1 barra por detrás de las señales del indicador, ya que el indicador analiza solo las barras completas. El propósito del indicador no es mostrar las velas en sí, sino ofrecer una señal en tiempo real de que la vela Doji acaba de completarse (y que no cambiará). Además, en este caso, una vela puede constar de muchas barras. El indicador informa sobre la anchura de la vela encontrada mediante su valor (la altura de su línea); en este caso, es "1" para una vela dirigida hacia arriba y "-1" para una vela hacia abajo.

Aquí tenemos un ejemplo de una vela Doji que consta de cinco barras. Este indicador se ha creado para buscar precisamente estas velas compuestas:

Figura 8. El indicador señala la presencia de una vela Doji con una anchura de 5 barras


Podemos observar que el algoritmo de búsqueda de velas Doji funciona correctamente. En la figura anterior, hemos destacado las dimensiones de la metabarra encontrada y los niveles de sus precios OHLC.

No obstante, para aplicar este indicador de forma práctica y efectiva, deberemos tener en cuenta un punto más. Las velas vienen en diferentes tamaños de altura: tanto muy grandes como muy pequeñas. Tan pequeñas que están al nivel del ruido, inferior a las barras vecinas habituales, por lo que difícilmente podremos considerarlas movimientos de precio significativos. La utilidad práctica de velas Doji tan pequeñas es nula: no pueden suponer la señal del principio o el final de una tendencia, ni de ninguna otra cosa.

Nos resultaría útil mejorar el indicador para que solo muestre velas Doji grandes. Claro que la resolución de este problema parece simple, solo necesitamos añadir un parámetro de entrada al indicador como:

input double  Candle_HeightMin          = 0.01;   // Minimum candle height (in absolute prices)

Y filtrar en OnCalculate todas las velas encontradas según este criterio.

Esta solución funcionaría perfectamente si las velas estuvieran construidas sobre barras simples ordinarias. Pero, debido al uso de metabarras, nos encontramos con un problema nada obvio que reduce la efectividad de dicha solución. Una barra común tiene una altura promedio (estadísticamente), llamémosla valor h. Si buscamos velas Doji grandes, entonces podemos establecer en los ajustes del indicador un Candle_HeightMin igual a, por ejemplo, 2*h. Pero, ¿y si buscamos velas Doji grandes construidas sobre metabarras que puedan tener una anchura igual a, por ejemplo, entre 1 y 4 barras? Entonces, una metabarra que conste de 4 barras de altura media a menudo podría tener una altura total de 2*h (si las dos primeras barras suben una tras otra y luego dos barras más bajan).

Una vela Doji en una metabarra así se mostrará como un indicador, ya que superará la condición de altura mínima. ¿Pero será esto correcto? Y es que, de hecho, una vela de este tipo consta de barras mediocres y, por consiguiente, difícilmente podrá suponer un signo de un fuerte movimiento de precios.

Sin embargo, en este caso, también sería un error establecer en los ajustes del indicador un Candle_HeightMin igual, por ejemplo, a 4*h, ya que en nuestro ejemplo las metabarras pueden tener 1 barra de anchura, y puede resultar un umbral demasiado fuerte para él: el indicador perderá las buenas velas de 2*h y 3*h que nos gustaría ver.

Por ello, debemos crear un filtro para la altura de la metabarra que caracterice la fuerza de un movimiento de precios igualmente poderoso y alcanzable tanto para una metabarra de una barra como para una metabarra de cuatro barras.

La solución a este problema resulta bastante sencilla. Debemos configurar Candle_HeightMin no en precios absolutos, sino en precios relativos. Es decir, no deberá ser la altura absoluta de la metabarra, sino su altura por unidad de tiempo. Height/Width de la vela.

Podemos ir un poco más lejos y establecer este parámetro en puntos de precio. Luego, en general, obtendremos un indicador cuya configuración ni siquiera depende de la pareja de divisas seleccionada. Y es que todos los demás ajustes (la altura del cuerpo y la sombra de la vela Doji) tampoco están relacionados con precios absolutos.

Bien, entonces, en lugar del parámetro de entrada Candle_HeightMin, vamos a crear uno ligeramente distinto:

input double  Candle_HeightPowerMin          = 0.5;   // Candle Power = Height/Width, points per minute

En el código del indicador, el filtro según este criterio se verá así:

if ((CandleHeight/CandleWidth/_Point) < (Candle_HeightPowerMin*PeriodSeconds()/60)) DojiExists = false;

Ahora el indicador está listo para su uso práctico. El código completo del indicador se encuentra en los anexos al artículo.

Probando el indicador

Ha llegado la hora de la verdad. Vamos a realizar una prueba para calcular cuántas veces el indicador en metabarras resultante encuentra velas Doji de forma más efectiva que la versión clásica de "una barra - una vela".

En el gráfico EURUSD con el marco temporal H4, establecemos en el indicador la siguiente configuración:

Candle_WidthMin  
1
Candle_WidthMax    1

Es decir, configuremos el indicador para buscar solo velas Doji de una barra.

Asimismo, establecemos las dimensiones límite de las partes de la vela de forma que, en total, el cuerpo y la sombra de la vela Doji sean menos de la mitad de la altura total de la vela:

Candle_BodyPowerMax      
0.2
Candle_ShadowPowerMax   
0.2

Estas son configuraciones bastante liberales para el tamaño de las partes de la vela y, en una aplicación real, algunos tráders podrían querer configurarlas en 0.1 o muy cerca de cero, para que las velas Doji se acerquen más a lo ideal. Sin embargo, ahora el objetivo de las pruebas es comparar el número de velas encontradas según diferentes métodos (con una barra y con metabarras). Y para que estas estadísticas tengan un menor error, sería deseable ofrecer tamaños de muestra grandes.

Por las mismas razones, no estableceremos requisitos demasiado altos para la altura de la vela. Vamos a poner este filtro a cero para ver todas las velas Doji, tanto fuertes como débiles:

Candle_HeightPowerMin   
0

Bien, todos los parámetros de entrada están configurados. En el terminal ha aparecido el siguiente gráfico del indicador:


Figura 9. Indicador de velas Doji basado en barras H4 clásicas (únicas)


Si observamos el gráfico, podemos contar que, por ejemplo, solo han aparecido 9 velas Doji de este tipo en dos meses. No olvidemos que este es el método clásico para construir velas, es decir, con barras individuales.

Para valorar las ventajas del uso de las metabarras, ahora cambiaremos el marco temporal del gráfico a H1 y modificaremos los parámetros de entrada del indicador de la forma correspondiente:

Candle_WidthMin  
4
Candle_WidthMax   
4

Es decir, el indicador ahora buscará velas con una anchura de 4 barras H1. En cuanto a su anchura, una metabarra así será equivalente a la versión anterior: 1 barra H4 clásica. La única diferencia será que las barras clásicas tienen una hora estricta de inicio: 0:00, 4:00, 8:00, etcétera, mientras que la metabarra tendrá 4 veces más opciones de inicio: 0:00, 1:00, 2:00, 3:00, 4:00, etc. La anchura será la misma, pero con mucha más flexibilidad respecto a la hora. Vamos a ver a qué nos llevará esto en la práctica:


Figura 10. Indicador de velas Doji construido sobre metabarras de 4 barras H1


La figura 10 muestra el mismo segmento de precios que la figura 9. Podemos ver cuántas velas Doji adicionales ha encontrado el indicador. Y durante dos meses, en total, el indicador con las metabarras ha revelado 54 velas Doji.

¡6 veces más que el método clásico! La ventaja del nuevo método es obvia.

Ahora, vamos a verificar la opción no solo con una hora de inicio flexible, sino también con una anchura de metabarra flexible de H1, ligeramente flotante en relación con la barra clásica de H4:

Candle_WidthMin  
3
Candle_WidthMax   
5


Figura 11. Indicador de velas Doji basado en metabarras de 3 a 5 barras de anchura H1


Como resultado, el número de velas Doji durante el mismo periodo ha aumentado todavía más. También podemos ver que el marco temporal H5 no existe en el terminal, es decir, en principio, las velas Doji de tal anchura serían imposibles de construir usando métodos clásicos.

El aumento máximo en la detección de velas Doji en relación con el método clásico se puede obtener si se abarcan todos los marcos temporales no estándar posibles. Para conseguirlo, configuraremos el indicador en el marco temporal mínimo disponible, M1, con los siguientes ajustes:

Candle_WidthMin  
180
Candle_WidthMax   
300

A primera vista, esto equivale al intervalo 3-5 en H1, pero con una hora de inicio de barra mucho más flexible, medida ahora en minutos, en lugar de en horas. No obstante, la diferencia es mucho más profunda: después de todo, ahora obtendremos metabarras con una anchura extremadamente flexible; pueden ser no solo valores enteros de H1 (3, 4, 5), sino también valores reales; por ejemplo, 199 M1 es 3,32 H1 o 6,63 M30, o 39,8 M5, etc. Estos son marcos temporales extremadamente no estándar según las medidas del trading clásico, en los que los tráders nunca han construido ninguna vela. Y aquí, en un solo gráfico, se combinan cientos de estos marcos temporales en un indicador:


Figura 12. Indicador de velas Doji construido sobre metabarras con una anchura de 180-300 barras M1


El número de señales indicadoras aquí ya es de miles. En sentido figurado, podemos decir que el indicador se está "volviendo loco": las velas Doji se encuentran en casi todas partes. Como las metabarras en este ejemplo son muy anchas (dos órdenes (!) más anchas que una barra), se superponen fuertemente entre sí. Dado que el indicador informa la anchura de todas las velas Doji encontradas, esto nos permite encontrar sus límites en el gráfico de precios. Por ejemplo, hemos rodeado algunas de estas metabarras con rectángulos de colores.

Lo que resulta especialmente sorprendente (como se ve en la figura anterior) es que, en este caso, la misma secuencia larga de precios puede ser tanto parte de una vela Doji que sube como parte de una vela que baja. Esto puede parecer una locura, un caos incompatible con cualquier tipo de trading, pero, de hecho, no hay ningún error o problema aquí. Después de todo, no hemos puesto un filtro según la altura de las velas detectadas, por eso muchas de ellas tienen una altura pequeña, es decir, al nivel del ruido de las fluctuaciones de precio del mercado y, por consiguiente, cambian fácilmente de dirección al darse un desplazamiento temporal o un pequeño cambio en la anchura. Intentaremos ir más allá de este ruido con un filtro en la configuración del indicador:

Candle_HeightPowerMin   
2

Bueno, es un asunto completamente diferente: ahora solo quedan velas fuertes en el gráfico, y las secuencias de estas velas detectadas ahora tienen las mismas direcciones:


Figura 13. Indicador de velas Doji con metabarras de 180-300 barras M1 de anchura, filtradas según la altura de la vela


El marco temporal M1 con metabarras anchas también ha hecho posible observar una nueva dimensión que antes era inaccesible. Cada secuencia densa de velas mostrada en dicho indicador describe, de hecho, una vela, pero cambia con el tiempo. Posiblemente, el análisis de esta dinámica permita a alguien sacar algunas conclusiones adicionales sobre las velas que no están disponibles en el enfoque clásico, donde una vela se consideraba como algo estático, rígidamente vinculado a una barra, y no había información sobre todo lo que le sucede a la vela si la movemos un poco, la expandimos en el tiempo... Esta dimensión ya está disponible para la investigación.


Conclusión

Los experimentos han demostrado de forma convincente que el uso de metabarras posibilita un enfoque más detallado para el análisis de patrones de velas japonesas, permitiendo:

  • encontrarlas mucho más a menudo que con los métodos clásicos;

  • encontrarlas incluso en marcos temporales donde los métodos clásicos básicamente no están disponibles;

  • hacerlo de forma cómoda y flexible (usando un gráfico en lugar de muchos), con configuraciones para tareas específicas de trading;

  • monitorear con precisión el inicio y el final de la aparición de las velas, ver la dinámica de los cambios en cada vela durante su periodo de vida.

Y dado que las técnicas descritas en este artículo no solo son aplicables a Doji, esto abre un amplio campo para la nueva interpretación de todos los clásicos de velas japonesas.

Para una mayor objetividad, merece la pena añadir que no hemos considerado todos los matices en el artículo. Después de todo, un indicador no representa aún el comercio real. El efecto práctico de la utilización de metabarras en forma de indicadores puede diferir del uso en estrategias comerciales. Las velas Doji en sí mismas no son señales comerciales, por lo que no debemos esperar que el número de transacciones con metabarras aumente tanto como lo han hecho las lecturas del indicador. El trading con velas Doji requiere un análisis adicional, así como la comprobación de condiciones de mercado adicionales. ¿Resultará posible combinar las metabarras con otros tipos de análisis (sobre barras clásicas)? ¿Cómo de conveniente será? ¿Cuán realista será el aumento del número de transacciones? Después de todo, hemos visto en el marco temporal M1 que una gran cantidad de señales sucesivas de indicadores son esencialmente una vela. Sin duda, su extensión en el tiempo y su volatilidad le otorgan muchas oportunidades de encajar en diversas situaciones de mercado que se han presentado a lo largo de su existencia, lo cual aumenta las posibilidades de ofrecer una señal útil (para abrir/cerrar una transacción) donde una vela clásica no la habría proporcionado (lo habría hecho en el momento equivocado).

Solo un experimento nos ofrecerá estadísticas específicas sobre el aumento en el número de transacciones. Este es un tema bastante amplio, de sobra para un estudio aparte. Así que, si el artículo sobre el indicador despierta el interés de los tráders, probablemente continuemos el experimento en uno de los siguientes artículos, pero ya con una estrategia comercial.

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/9801

Archivos adjuntos |
MetaDoji.mq5 (10.49 KB)
¿Cómo elegir correctamente un asesor en el Mercado? ¿Cómo elegir correctamente un asesor en el Mercado?
En este artículo, analiceremos los puntos a los que debemos prestar atención en primer lugar a la hora de comprar un asesor. También buscaremos formas de aumentar los beneficios y, lo que es más importante, de gastar el dinero de forma inteligente y seguir ganando con ello. Además, tras finalizar la lectura, comprenderá que puede ganar dinero incluso con productos simples y gratuitos.
Conjunto de instrumentos para el marcado manual de gráficos y comercio (Parte III). Optimización y nuevos instrumentos Conjunto de instrumentos para el marcado manual de gráficos y comercio (Parte III). Optimización y nuevos instrumentos
Desarrollo del dibujado de objetos gráficos en los gráficos usando atajos de teclado. Hemos añadido a la biblioteca nuevas herramientas, en particular, una línea recta que recorre vértices arbitrarios y un conjunto de rectángulos que nos permitirá estimar tanto el nivel como el momento del viraje. También mostramos la posibilidad de optimizar el código para mejorar el rendimiento. Hemos reescrito el ejemplo de la implementación como un indicador, lo cual nos permite establecer atajos de teclado junto con otros programas comerciales. El nivel de dominio del código es un poco superior al de un principiante.
Gráficos en la biblioteca DoEasy (Parte 89): Creación programática de objetos gráficos estándar Funcionalidad básica Gráficos en la biblioteca DoEasy (Parte 89): Creación programática de objetos gráficos estándar Funcionalidad básica
Nuestra biblioteca ahora puede monitorear la aparición de objetos gráficos estándar en el gráfico del terminal de cliente, así como la eliminación y modificación de algunos de sus parámetros. Pero para que el "conjunto" quede completo, obviamente necesitamos la capacidad de crear objetos gráficos estándar a partir de nuestros programas.
Recetas MQL5 – Calendario económico Recetas MQL5 – Calendario económico
El artículo está dedicado a las posibilidades programáticas del trabajo con el Calendario Económico. Para ello, crearemos una clase para acceder de forma simplificada a las propiedades del calendario y recibir eventos. Como ejemplo práctico, proponemos programar un indicador que usa datos sobre el volumen neto de las posiciones especulativas de CFTC.