Descargar MetaTrader 5

Métodos sencillos para predecir las direcciones de las velas japonesas

11 mayo 2016, 12:44
Evgeniy Logunov
0
1 021

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.

¡Atención! La única finalidad de los Asesores Expertos adjuntos en este artículo es usarlos en la Prueba de estrategias.

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.

Hay que tener en cuenta que todos los métodos de previsión tienen un caso especial: si no se puede determinar la dirección de la vela anterior (la llamada a GetCandleDirection(1) devuelve el valor de DIRECTION_NONE), el resultado de previsión de la siguiente vela tendrá también una dirección indeterminada. En este caso, los Asesores Expertos desarrollados para probar estos métodos no entran al mercado

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:

  1. La dirección de la siguiente vela coincidirá con la dirección de la anterior.
  2. 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 función ModelPredict no usa la comparación explícita con la constante STATE_REVERSE que corresponde al segundo método. En el código del Asesor Experto se supone que los datos que introduce el usuario son siempre correctos y que la variable modelState toma siempre uno de los dos valores: STATE_NORMAL o STATE_REVERSE. Se puede habilitar la comparación explícita eliminando los símbolos "/*" y "*/" del comentario, agregando así otro operador condicional if al código.

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:

    1. USDCHF
    2. GBPUSD
    3. EURUSD
    4. USDJPY
    5. AUDUSD
    6. USDCAD
    7. EURGBP
    8. EURCHF
    9. EURJPY
    10. GBPJPY
    11. GBPCHF
    12. 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 Software Corp.
Artículo original: https://www.mql5.com/ru/articles/1374

Archivos adjuntos |
¿Cuál es el grado de fiabilidad del trading por la noche? ¿Cuál es el grado de fiabilidad del trading por la noche?

El artículo trata las peculiaridades del trading plano durante la noche con pares de divisas cruzados. Se explica dónde podemos esperar beneficios y por qué las grandes pérdidas son muy poco probables. Se presenta también el ejemplo de un Asesor Experto desarrollado para el trading nocturno y se aborda el uso de esta estrategia en la práctica.

Transferir el código de un indicador al código de un asesor experto. Conclusión Transferir el código de un indicador al código de un asesor experto. Conclusión

Este es el artículo final, dedicado a transferir el código de un indicador al código de un asesor experto. Aquí, el autor transforma un determinado ejemplo de código de un asesor experto de forma que dicho asesor experto se presenta en un único archivo sin llamar a los indicadores personalizados.

Asesor Experto para el trading en un canal Asesor Experto para el trading en un canal

El Asesor Experto traza las líneas del canal. Las líneas superiores e inferiores del canal actúan como niveles de soporte y resistencia. El Asesor Experto etiqueta los puntos de referencia, informa mediante un sonido cada vez que el precio alcanza o cruza las líneas del canal y dibuja las marcas pertinentes. Después de la formación de los fractales, aparecen las flechas correspondientes en las últimas barras. Las rupturas de las líneas pueden sugerir una posible tendencia creciente. El código del Asesor Experto lleva comentarios detallados.

Notificaciones por SMS sobre el estado del Asesor Experto Notificaciones por SMS sobre el estado del Asesor Experto

El desarrollo de un sistema de notificaciones por SMS que le informa sobre el estado de su Asesor Experto para estar siempre al corriente de cualquier situación crítica dondequiera que esté.