Discusión sobre el artículo "Clasificador bayesiano ingenuo para las señales de un conjunto de indicadores"
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.
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?
¿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 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.
¿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, 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.
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?
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 ;-)
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.
- 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
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.
Fig. 1 Aspecto de la probabilidad conjunta con un número distinto de magnitudes aleatorias
Autor: Stanislav Korotky