Discusión sobre el artículo "Clasificador bayesiano ingenuo para las señales de un conjunto de indicadores"

 

Artículo publicado Clasificador bayesiano ingenuo para las señales de un conjunto de indicadores:

En el artículo se analiza la aplicación de la fórmula bayesiana para aumentar la fiabilidad de los sistemas comerciales usando las señales de varios indicadores independientes. Los cálculos teóricos se comprueban con la ayuda de un sencillo experto universal, adaptable para trabajar con indicadores aleatorios.

El gráfico de esta función para los diferentes valores de N se muestra en la figura 1.

Aspecto de la probabilidad conjunta con un número distinto de magnitudes aleatorias

Fig. 1 Aspecto de la probabilidad conjunta con un número distinto de magnitudes aleatorias

Autor: Stanislav Korotky

 

La parte de programación, como siempre, ¡está al más alto nivel! La parte práctica casi no la entendí por culpa de una débil preparación teórica.


Mirando fmtprnt2.mqh, hay muchas advertencias. ¿Por qué decidieron hacer un estilo de plantilla así?

    template<typename T>
    CFormatOut *operator<<(const T v)
    {
      if(typename(v) == "int" || typename(v) == "uint"
      || typename(v) == "long" || typename(v) == "ulong"
      || typename(v) == "short" || typename(v) == "ushort")

Después de todo, para cada tipo sería posible escribir una variante de operador diferente y evitar las correspondientes advertencias del compilador.


ZЫ Creo que lo entiendo. La Biblia se escribió cuando el lenguaje aún no lo permitía.

 
fxsaber:

Mirando fmtprnt2.mqh, hay muchas advertencias. ¿Por qué decidieron hacer tal estilo de plantilla?

Después de todo, para cada tipo sería posible escribir una variante de operador diferente y evitar las correspondientes advertencias del compilador.

ZЫ Creo que lo entiendo. La Biblia se escribió cuando el lenguaje aún no lo permitía.

¿Puedo aclarar la idea? En general, este archivo no es el más importante en cuanto al número de advertencias. Algunas cosas sí que se pueden limpiar.

Si estamos hablando de funciones con tipos específicos, de hecho, siempre queremos describir todo uniformemente en una plantilla, y no copiar variantes con diferentes tipos, porque ¿para qué necesitamos plantillas entonces?

 
Stanislav Korotky:

¿Puedo aclarar la idea? En general, este archivo no es el más alto en términos de advertencias. Algunas cosas realmente se pueden limpiar.

Si estamos hablando de funciones con tipos específicos, de hecho, siempre queremos describir todo uniformemente en una plantilla, y no copiar variantes con diferentes tipos, porque ¿para qué necesitamos plantillas entonces?

He dado el enlace de arriba. Enum puede ser identificado allí.
 

¿He entendido bien la fórmula? P(H|E) = P(E|H) * P(H) / P(E) (1), haciendo el cálculo de la siguiente manera:

P(H|E) = K2 *(1 / K1 )

En este caso, considero el indicador para comprar, si es superior a cero, compro.

K2= es el resultado de dividir (ratio) el número de barras donde el indicador está por encima de cero y la operación fue rentable / número total de barras.

K1= es el cociente entre el número de barras donde el indicador está por encima de cero / número total de barras.

 
forexman77:

¿He entendido bien la fórmula? P(H|E) = P(E|H) * P(H) / P(E) (1), haciendo los cálculos como sigue:

P(H|E) = K2 *(1 / K1 )

En este caso, considero el indicador para comprar, si está por encima de cero, compro.

K2= es el resultado de dividir (ratio) el número de barras donde el indicador está por encima de cero y la operación fue rentable / número total de barras.

K1= es el cociente entre el número de barras en las que el indicador está por encima de cero / número total de barras.

Sí. Sin embargo, con este enfoque deberíamos hacer que la operación dure 1 barra, o permitir varias posiciones abiertas en el Asesor Experto, o contar la probabilidad no a través del porcentaje de las rentables, sino, por ejemplo, como una dependencia del tamaño del beneficio del valor del indicador (más o menos), es decir, deberíamos cambiar a densidades de probabilidad.
 
Stanislav Korotky:
Sí. Sin embargo, este enfoque requiere o bien hacer que la duración de la operación sea de 1 barra, o permitir varias posiciones abiertas en el Asesor Experto, o calcular la probabilidad no a través del porcentaje de las rentables, sino, por ejemplo, como una dependencia del tamaño del beneficio del valor del indicador (más o menos), es decir, cambiar a densidades de probabilidad.


Sí, el resultado con este enfoque será borroso. Probablemente voy a reemplazar el indicador por encima de cero con la barra donde el indicador cruzó la marca cero.

Tengo la intención de hacer un indicador sobre esta base, los oficios en ella será virtual y ver lo que va a mostrar. Tal vez algunos extremos significativos pueden ser vistos.

 
Me lo pregunto, porque la fórmula bayesiana permite calcular la probabilidad de un suceso en función de la probabilidad de otro suceso relacionado, y los indicadores (al menos los que se dan en el artículo) son el mismo precio, pero visto de lado. Es decir, ¿no es un intento de calcular la probabilidad de que un bocadillo caiga hacia abajo dependiendo del lado por el que caiga al suelo?
 
fxsaber:

La parte de programación, como siempre, ¡está al más alto nivel! La parte práctica casi no la entendí debido a la escasa preparación teórica.

Intentaré contarlo con mis propias palabras de forma más sencilla:

1. Que hay tres estrategias:

  • estrategia Strat_A basada en el indicador A con probabilidad de una operación ganadora P(Win|A) =0.63
  • estrategia Strat_B basada en el indicador B con una probabilidad de una operación ganadora P(Win|B) =0.58
  • estrategia Strat_C basada en el indicador C con probabilidad de una operación ganadora P(Win|C) =0,57

2. Los tres indicadores A, B y C no están correlacionados entre sí, es decir, dan señales para entrar en el mercado independientemente unos de otros.

3. Es necesario calcular el porcentaje teórico de operaciones ganadoras para la estrategia Start_ABC, en la que la entrada en el mercado se produce sólo si los tres indicadores muestran simultáneamente la entrada en la misma dirección.

Entonces P(Ganar|ABC) = P(Ganar|A)* P(Ganar|B)* P(Ganar|C) /[ P(Ganar|A)* P(Ganar|B)* P(Ganar|C) - (1 - P(Ganar|A))*(1 - P(Ganar|B))*(1 - P(Ganar|C)) ]


¿Verdad, @Stanislav Korotky?

 
Rashid Umarov:

Intentaré contarlo con mis propias palabras de forma más sencilla:

¿Verdad, @Stanislav Korotky?

Sí, así es más o menos como lo estaba expresando ;-)

 
Stanislav Korotky:

Sí, eso es casi lo que estaba diciendo ;-)

Entonces el tema de otro artículo - ¿cómo encontrar indicadores que son independientes entre sí de forma automática?

Y entonces casi tenemos un KnowHow sencillo para crear robots a partir de cualquier colección de indicadores. Además, puedes añadir trailing, mani-management y demás al algoritmo básico a través del MQL5 Wizard.