Métodos sencillos para predecir las direcciones de las velas japonesas
Introducción
Las velas japonesas son una de las formas de representación de la información de los precios a lo largo de un intervalo de tiempo concreto mostrando la relación entre los precios de apertura, cierre, el mínimo y el máximo. Se usan las velas japonesas principalmente en el análisis técnico y se interpretan mediante modelos muy conocidos.
Después de escribir varios indicadores para predecir la dirección de los movimientos del mercado, se me ocurrió la idea de analizar la posibilidad de realizar una previsión sencilla de las direcciones de las velas japonesas en base a los datos obtenidos a partir de las velas anteriores.
El artículo aborda algunos sencillos métodos de previsión e introduce distintos Asesores Expertos para probar los conceptos y evaluar su eficacia.
En el primer método se supone que la dirección de la siguiente vela coincide con la dirección de la vela anterior. En el segundo método se supone que la dirección de la siguiente vela será opuesta a la dirección de la vela anterior. La ventaja de estos dos métodos reside en su simplicidad. Veremos estos dos métodos en el apartado "Los métodos ingenuos".
El tercer método combina los dos primeros. En primer lugar, seleccionamos el primer método o el segundo y después lo usamos a menos o hasta que la previsión no coincida con la realidad (en caso de detección de error). En este caso, se sustituye el método elegido por el otro. Este método es más complejo que los dos primeros ya que tiene en cuenta los errores producidos en las etapas anteriores. Veremos este método en el apartado "El método adaptativo".
Datos básicos para la previsión
Todos los métodos se basan en la información de la dirección de la vela anterior. Por lo tanto, lo primero que tenemos que hacer es pensar en la manera de obtener la información sobre la dirección de cualquier vela.
Se usará el término "dirección de la vela" para hacer referencia al valor que caracteriza el signo de la diferencia entre los precios de apertura y de cierre de una vela determinada. Por consiguiente, la dirección de una vela sólo puede tener uno de estos tres valores: "dirección hacia arriba", "dirección hacia abajo" y "sin dirección".
Se puede acceder a la información de los precios de apertura y cierre de la vela mediante las matrices Open y Close, respectivamente. Estas matrices usan desplazamientos e índices. El desplazamiento es el número de velas contadas desde el lado derecho del gráfico, empezando desde cero. Esto significa que el desplazamiento de la vela actual es cero, mientras que el desplazamiento de la vela anterior es uno.
// getting the direction of the candlestick double GetCandleDirection(int shift) { double diff=Close[shift]-Open[shift]; if (diff>0.0) { return (DIRECTION_UP); } else if (diff<0.0) { return (DIRECTION_DOWN); } else /*if (diff==0.0)*/ { return (DIRECTION_NONE); } }
La función recibe el desplazamiento (shift) de la vela y calcula la diferencia entre el precio de apertura y el precio de cierre. En función del signo del resultado, la función devuelve el valor de una de esta tres constantes, DIRECTION_UP, DIRECTION_DOWN o DIRECTION_NONE. Estas constantes representan la "dirección hacia arriba", "dirección hacia abajo" y "sin dirección", respectivamente.
Tenga en cuenta que hay que definir los valores de las constantes utilizadas para indicar las distintas direcciones de modo que no dificulte el cálculo de la dirección opuesta. Se puede utilizar el cambio de signo para calcular la dirección opuesta. Se pueden definir estas constantes de la siguiente manera:
// determining the possible candlestick directions #define DIRECTION_NONE 0 #define DIRECTION_UP 1 #define DIRECTION_DOWN -1
Vamos a mostrar por separado las direcciones de las velas en el gráfico mediante el indicador CandelColor.mq4 adjunto al artículo. El indicador muestra las direcciones de las velas (histogramas azules y rojos), además de un sencillo promedio móvil basado en los datos de las direcciones que nos permiten obtener una idea general sobre la tendencia predominante de las velas en un intervalo de tiempo determinado.
Direcciones de las velas: Comportamiento en un intervalo de tiempo.
Como lo muestra el indicador, las direcciones de las velas cambian a menudo, alternándose o sin cambiar a lo largo de unas cuantas velas en una fila. Está claro que la previsión de la dirección de una vela no es tarea fácil, incluso la de una sola vela.
Vamos a pasar ahora a examinar los métodos propuestos en detalle.
Los métodos ingenuos
Comenzaremos con los dos primeros métodos:
- La dirección de la siguiente vela coincidirá con la dirección de la anterior.
- La dirección de la siguiente vela será opuesta a la dirección de la anterior.
Para probar la eficacia de ambos métodos se ha desarrollado y probado un Asesor Experto (el archivo CandlePredTest_naive.mq4 adjunto al artículo).
El Asesor Experto usa los precios de apertura. En cada nueva vela, cierra las posiciones que fueron abiertas antes (TP o SL) y abre una posición de acuerdo con la dirección prevista de la siguiente vela (la que se acaba de abrir). Se lleva a cabo la previsión de la siguiente vela mediante la función ModelPredict:
// forecasting based on the current model int ModelPredict() { if (modelState==STATE_NORMAL) { return (GetCandleDirection(1)); } else /*if (modelState==STATE_REVERSE)*/ { return (-GetCandleDirection(1)); } }
La función implementa dos métodos de previsión. La elección del método depende del valor de la variable modelState.
Si la variable modelState toma el valor de STATE_NORMAL, se hará la previsión de acuerdo con el primer método, por lo cual la función llama aGetCandleDirection(1) para solicitar la dirección de la vela anterior y devolver el valor obtenido como dirección de la siguiente vela.
Se usa el segundo método de previsión si el valor de la variable modelState es STATE_REVERSE. En este caso, se lleva a cabo el cálculo de la dirección opuesta mediante el cambio de signo, es decir que la función ModelPredict devuelve el valor de -GetCandleDirection(1).
La variable modelState no aparece en la lista de parámetros del Asesor Experto, pero se copia su valor a partir de la variable externa initialModelState al iniciar el Asesor Experto.
// model state extern int initialModelState=STATE_NORMAL;
Esta nueva complicación del código es debida al hecho de que el número de estados puede llegar a ser mayor y no todos estos estados son posibles al inicio de la operación. Puede utilizar cualquier valor para indicar los estados. Por ejemplo, en este Asesor Experto se definen de la siguiente manera:
// defining the model states #define STATE_NORMAL 0 #define STATE_REVERSE 1
Lo que queda del código del Asesor Experto lleva comentarios muy detallados y debe ser comprensible para el lector.
Se ha probado el Asesor Experto con las siguientes condiciones:
- Volumen de la posición - 0.1 lote.
- Depósito inicial - 10 000 dólares estadounidenses.
- Períodos de tiempo - todos los períodos de tiempo disponibles.
- Modos de funcionamiento - STATE_NORMAL, STATE_REVERSE.
- Intervalo de la prueba - todo el historial disponible.
- Instrumentos:
- USDCHF
- GBPUSD
- EURUSD
- USDJPY
- AUDUSD
- USDCAD
- EURGBP
- EURCHF
- EURJPY
- GBPJPY
- GBPCHF
- EURAUD
Se han comparado los resultados en base al beneficio neto y el porcentaje de operaciones con beneficio.
Las siguientes dos tablas muestran los resultados de la prueba del Asesor Experto en el modo STATE_NORMAL (primer método).
Beneficio neto:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | -9902 | -9900 | -9903 | -9907 | -9901 | -9900 | -9927 |
GBPUSD | -9868 | -9864 | -9869 | -9887 | -9873 | -9868 | -9924 |
EURUSD | -9921 | -9957 | -9949 | -9941 | -9934 | -9910 | -9879 |
USDJPY | -9900 | -9905 | -9900 | -9905 | -9935 | -9926 | -9904 |
AUDUSD | -9952 | -9957 | -9966 | -9962 | -9961 | -9956 | -10000 |
USDCAD | -9901 | -9903 | -9901 | -9900 | -9902 | -9904 | -8272 |
EURGBP | -9862 | -9861 | -9864 | -9869 | -9875 | -9871 | -5747 |
EURCHF | -9862 | -9865 | -9865 | -9874 | -9869 | -9862 | -5750 |
EURJPY | -9866 | -9877 | -9964 | -9877 | -9869 | -9867 | -10000 |
GBPJPY | -9848 | -9841 | -9840 | -9845 | -9848 | -9870 | -9849 |
GBPCHF | -9891 | -9885 | -9850 | -9844 | -9857 | -9856 | -9891 |
EURAUD | -9865 | -9863 | -9868 | -9874 | -9861 | -9891 | -10000 |
Porcentaje de operaciones con beneficio:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | 19,55 | 27,82 | 31,50 | 38,18 | 39,86 | 43,29 | 43,95 |
GBPUSD | 21,18 | 27,81 | 30,29 | 33,81 | 35,20 | 41,39 | 46,71 |
EURUSD | 26,06 | 33,20 | 34,59 | 37,55 | 41,64 | 43,73 | 44,37 |
USDJPY | 19,28 | 31,68 | 34,13 | 35,48 | 39,04 | 42,99 | 46,85 |
AUDUSD | 19,71 | 21,30 | 26,25 | 27,20 | 33,15 | 39,96 | 44,69 |
USDCAD | 21,88 | 25,13 | 27,59 | 31,79 | 33,07 | 39,48 | 46,40 |
EURGBP | 21,78 | 28,90 | 31,49 | 34,55 | 35,24 | 42,11 | 47,04 |
EURCHF | 28,70 | 27,86 | 27,85 | 31,13 | 32,90 | 39,08 | 47,65 |
EURJPY | 23,69 | 30,62 | 35,81 | 38,89 | 39,06 | 44,04 | 48,16 |
GBPJPY | 10,11 | 19,47 | 33,48 | 37,39 | 37,75 | 43,09 | 47,42 |
GBPCHF | 23,17 | 23,95 | 30,84 | 33,50 | 36,03 | 42,43 | 47,90 |
EURAUD | 1,65 | 7,35 | 16,55 | 22,24 | 27,65 | 36,11 | 44,64 |
Los resultados de la prueba del primer método no eran muy satisfactorios. Independientemente del período, vemos que hay pérdidas en el depósito para todos los instrumentos; el número de operaciones aumenta con los períodos de tiempo mayores, pero nunca supera el 50 %.
Las siguientes dos tablas muestran los resultados de la prueba del Asesor Experto en el modo STATE_REVERSE (segundo método).
Beneficio neto:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | -9900 | -9912 | -9902 | -9917 | -9915 | -9901 | +83 |
GBPUSD | -9864 | -9866 | -9869 | -9874 | -9870 | -9911 | -5565 |
EURUSD | -9920 | -9917 | -9923 | -9947 | -9922 | -9886 | +4249 |
USDJPY | -9906 | -9901 | -9906 | -9900 | -9900 | -9928 | +2003 |
AUDUSD | -9955 | -9956 | -9957 | -9956 | -9969 | -9947 | +1203 |
USDCAD | -9900 | -9900 | -9900 | -9900 | -9901 | -9906 | -3129 |
EURGBP | -9868 | -9862 | -9862 | -9863 | -9867 | -9902 | -9867 |
EURCHF | -9863 | -9861 | -9863 | -9862 | -9869 | -9869 | -6556 |
EURJPY | -9861 | -9864 | -9866 | -9868 | -9897 | -9886 | -10000 |
GBPJPY | -9850 | -9887 | -9905 | -9857 | -9969 | -9848 | -9964 |
GBPCHF | -9846 | -9841 | -9842 | -9842 | -9886 | -9914 | -9850 |
EURAUD | -9870 | -9866 | -9874 | -9910 | -9872 | -9872 | -2411 |
Porcentaje de operaciones con beneficio:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | 18,38 | 27,41 | 33,76 | 37,46 | 42,28 | 46,71 | 52,15 |
GBPUSD | 18,59 | 27,71 | 34,07 | 39,01 | 43,79 | 47,33 | 49,39 |
EURUSD | 23,37 | 33,88 | 41,05 | 43,80 | 43,56 | 48,16 | 52,56 |
USDJPY | 16,88 | 30,39 | 38,13 | 40,29 | 43,94 | 46,62 | 49,34 |
AUDUSD | 18,84 | 22,52 | 25,39 | 29,83 | 36,36 | 43,51 | 49,84 |
USDCAD | 22,44 | 24,04 | 27,07 | 31,06 | 35,69 | 43,51 | 49,84 |
EURGBP | 20,52 | 28,89 | 35,18 | 38,82 | 42,41 | 45,82 | 45,55 |
EURCHF | 27,43 | 31,82 | 32,80 | 35,05 | 36,74 | 43,89 | 46,04 |
EURJPY | 18,79 | 28,15 | 37,09 | 39,80 | 43,05 | 44,15 | 46,92 |
GBPJPY | 10,02 | 19,76 | 31,92 | 38,06 | 41,84 | 44,32 | 47,53 |
GBPCHF | 19,87 | 27,24 | 33,72 | 35,70 | 39,74 | 47,59 | 46,11 |
EURAUD | 1,43 | 7,66 | 17,24 | 26,95 | 34,46 | 41,29 | 47,07 |
Los resultados de la prueba del segundo método son mezclados. En todos los períodos de tiempo, menos el D1, los resultados coinciden aproximadamente con los que hemos obtenido con el primer método. En el período D1, el Asesor Experto ha generado beneficios en cuatro instrumentos de doce. El porcentaje de las operaciones con beneficio estaba cerca del 50 % y llegó hasta el 52 % en dos casos.
En general, los resultados del Asesor Experto dejan mucho que desear. Vamos a tratar de combinar los "métodos ingenuos" para contrarrestar sus inconvenientes.
El método adaptativo
El tercer método consiste en hacer la previsión usando uno de los dos métodos ingenuos de previsión y sustituirlo por el otro en caso de error. De este modo, el método se adapta al comportamiento de las series de previsiones.
La eficacia de este método fue comprobada mediante la prueba del Asesor Experto correspondiente (el archivo CandlePredTest_adaptive.mq4 adjunto al artículo).
Este Asesor Experto es una versión mejorada del CandlePredTest_naive. La principal diferencia es el análisis de la previsión anterior con el fin de identificar los errores en cada nueva vela.
// working function of the Expert Advisor int start() { // positions are opened once on each bar if (!IsNewBar()) { return (0); } // close all open positions TradeClosePositions(DIRECTION_UP); TradeClosePositions(DIRECTION_DOWN); // update the model state if (prediction!=DIRECTION_NONE) { ModelUpdate(prediction==GetCandleDirection(1)); } // predict the color of the next candlestick prediction=ModelPredict(); if (prediction==DIRECTION_NONE) { return (0); } // open a position in the right direction TradeOpenPosition(prediction,""); return (0); }
Se lleva a cabo el análisis únicamente si el Asesor Experto haya abierto posiciones en la vela anterior, es decir, si la previsión no devuelve la constante DIRECTION_NONE. Los errores son todos los casos en los que no coincide la previsión con la dirección real de la vela cerrada cuyo desplazamiento es igual a uno al abrir la nueva vela.
La sustitución de un método de previsión por el otro se hace mediante la función ModelUpdate que recibe la indicación de corrección de la previsión (prediction==GetCandleDirection(1)) como parámetro.
// updating the model state void ModelUpdate(bool correct) { // if the forecast was erroneous, change the model state if (!correct) { if (modelState==STATE_NORMAL) { modelState=STATE_REVERSE; } else /*if (modelState==STATE_REVERSE)*/ { modelState=STATE_NORMAL; } } }
La función analiza la indicación (correct) de corrección de la previsión y en caso de error sustituye el método ingenuo de previsión cambiando el valor de la variable modelState. Se copia el valor inicial de la variable modelState a partir de la variable initialModelState en la inicialización. No es esencial ya que el Asesor Experto puede cambiar el método de previsión en el transcurso de la operación.
La previsión se lleva a cabo por la función ModelPredict, parecida a la que se ha utilizado en el Asesor Experto CandlePredTest_naive. Como resultado de los cambios de valor de la variable modelState, se realiza la previsión por el primer y segundo método, alternándose entre ellos.
Se han llevado a cabo las pruebas del Asesor Experto bajo las mimas condiciones, excepto con el valor de la variable initialModelState que fue establecido (STATE_NORMAL).
Beneficio neto:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | -9903 | -9905 | -9902 | -9915 | -9902 | -9907 | -3738 |
GBPUSD | -9866 | -9875 | -9876 | -9864 | -9867 | -9933 | -6404 |
EURUSD | -9924 | -9924 | -9931 | -9920 | -9920 | -9903 | -3779 |
USDJPY | -9904 | -9900 | -9900 | -9904 | -9920 | -9902 | -6493 |
AUDUSD | -9955 | -9954 | -9955 | -9995 | -9955 | -9965 | -8649 |
USDCAD | -9903 | -9902 | -9901 | -9911 | -9900 | -9904 | -1525 |
EURGBP | -9861 | -9867 | -9865 | -9862 | -9881 | -9877 | -9913 |
EURCHF | -9861 | -9862 | -9872 | -9881 | -9870 | -9875 | -9258 |
EURJPY | -9861 | -9865 | -9866 | -9868 | -9876 | -9905 | -9880 |
GBPJPY | -9842 | -9844 | -9867 | -9840 | -9919 | -10000 | -9933 |
GBPCHF | -9841 | -9843 | -9917 | -9840 | -9893 | -9848 | -9895 |
EURAUD | -9866 | -9869 | -9863 | -9872 | -9867 | -9904 | -7656 |
Porcentaje de operaciones con beneficio:
M1 | M5 | M15 | M30 | H1 | H4 | D1 | |
---|---|---|---|---|---|---|---|
USDCHF | 19,22 | 26,82 | 32,29 | 35,71 | 40,29 | 44,15 | 47,93 |
GBPUSD | 20,12 | 28,16 | 32,01 | 34,87 | 40,05 | 41,97 | 49,39 |
EURUSD | 25,24 | 32,65 | 38,32 | 39,48 | 41,50 | 45,81 | 48,88 |
USDJPY | 19,16 | 29,48 | 35,02 | 37,03 | 40,19 | 44,45 | 47,34 |
AUDUSD | 19,63 | 21,67 | 25,76 | 28,16 | 32,11 | 41,11 | 46,76 |
USDCAD | 22,84 | 24,46 | 27,39 | 29,79 | 34,44 | 42,26 | 48,46 |
EURGBP | 21,44 | 29,45 | 33,05 | 36,55 | 38,19 | 41,86 | 46,23 |
EURCHF | 27,51 | 29,98 | 30,92 | 34,44 | 34,09 | 40,87 | 44,27 |
EURJPY | 21,24 | 28,56 | 35,58 | 38,78 | 40,50 | 44,23 | 47,12 |
GBPJPY | 11,30 | 19,90 | 31,91 | 37,15 | 36,76 | 41,11 | 46,24 |
GBPCHF | 22,00 | 26,81 | 32,13 | 34,38 | 36,99 | 43,11 | 47,16 |
EURAUD | 1,50 | 6,56 | 15,14 | 22,25 | 31,63 | 37,96 | 47,70 |
Los resultados de la prueba no fueron mejores en comparación con los dos primeros métodos. El beneficio fue negativo con todos los instrumentos y en todos los períodos de tiempo, mientras que el porcentaje de operaciones con beneficio no superó el 50 %.
Conclusión
Los resultados de las pruebas del artículo han puesto de manifiesto la poca eficacia de los métodos mencionados.
- El primer método era extremadamente ineficiente. Seguramente, la hipótesis de que la dirección de la siguiente vela coincide con la dirección de la vela anterior requiere más comprobaciones en la previsión.
- El segundo método ha conseguido los mejores resultados de los tres. Sin embargo, requiere un análisis más detallado. Por ejemplo, los datos del número de operaciones cuyos resultados no parecían interesantes.
- El tercer método ha obtenido unos resultados que se encuentran entre el primero y el segundo y requiere mejoras adicionales. La idea principal de este método era mejorar el rendimiento en comparación con los dos primeros métodos. Sin embargo, no ha logrado ninguna mejora. Al parecer, este método intercambia los métodos de previsión con demasiada frecuencia, llevando así a más errores.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1374
- 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