Definición de estadísticas y sus niveles. Métodos de clasificación y previsión. Máquinas de vectores soporte. Método del "vecino más cercano". Clasificación bayesiana. Grupos de indicadores para evaluar el estado de salud de la población.

La validación cruzada es un método bien conocido para obtener estimaciones de parámetros desconocidos del modelo. La idea principal del método es dividir la muestra de datos en v "pliegues". Los "pliegues" V son submuestras aisladas seleccionadas al azar.

Dado un valor fijo de k, se construye un modelo de k vecinos más cercanos para obtener predicciones sobre segmento v(los segmentos restantes se utilizan como ejemplos) y se estima el error de clasificación. Para problemas de regresión, la suma de cuadrados se utiliza con mayor frecuencia como estimación del error, y para problemas de clasificación es más conveniente considerar la precisión (el porcentaje de observaciones clasificadas correctamente).

Luego el proceso se repite secuencialmente para todos opciones posibles elección Una vez agotados v “pliegues” (ciclos), los errores calculados se promedian y se utilizan como medida de la estabilidad del modelo (es decir, una medida de la calidad de la predicción en los puntos de consulta). Los pasos anteriores se repiten para diferentes k, y el valor correspondiente al error más pequeño (o mayor precisión de clasificación) se acepta como óptimo (óptimo en el sentido del método de validación cruzada).

Tenga en cuenta que la validación cruzada es un procedimiento computacional intensivo y es necesario dejar tiempo para que se ejecute el algoritmo, especialmente si el tamaño de la muestra es lo suficientemente grande.

La segunda opción para elegir el valor del parámetro k es establecer su valor usted mismo. Sin embargo, este método debe usarse si existen conjeturas razonables sobre el posible valor del parámetro, como estudios previos de conjuntos de datos similares.

El método de los k vecinos más cercanos muestra resultados bastante buenos en una amplia variedad de problemas.

Un ejemplo de un uso real del método anterior es software Centro de soporte técnico de Dell, desarrollado por Inference. Este sistema ayuda al personal del centro a responder más solicitudes ofreciendo respuestas inmediatas a preguntas comunes y permitiéndoles acceder a la base de datos mientras hablan por teléfono con el usuario. Los empleados del centro de soporte técnico, gracias a la implementación de este método, pueden atender un número importante de llamadas simultáneamente. Software CBR está actualmente implementado en la intranet de Dell.

No hay demasiadas herramientas de minería de datos que implementen el método de k vecinos más cercanos y el método CBR. Entre los más famosos: CBR Express y Case Point (Inference Corp.), Apriori (Answer Systems), DP Umbrella (VYCOR Corp.), KATE Tools (Acknosoft, Francia), Pattern Recognition Workbench (Unica, EE. UU.), así como algunos paquetes estadísticos, por ejemplo, Statistica.

clasificación bayesiana

Nombres alternativos: modelado bayesiano, estadística bayesiana, método de red bayesiano.

Puede obtener más información sobre la clasificación bayesiana en. La clasificación bayesiana se utilizó originalmente para formalización del conocimiento expertos en sistemas expertos, ahora la clasificación bayesiana también se utiliza como uno de los métodos de Minería de Datos.

El llamado enfoque de clasificación ingenua o enfoque ingenuo-bayes es la versión más simple del método que utiliza redes bayesianas. Con este enfoque se resuelven los problemas de clasificación, el resultado del método son los llamados modelos “transparentes”.

La clasificación "ingenua" es un método de clasificación bastante transparente y comprensible. Se llama “ingenuo” porque parte del supuesto de que independencia mutua señales.

Propiedades de la clasificación ingenua:

  1. Usando todas las variables y definiendo todas las dependencias entre ellas.
  2. Teniendo dos supuestos sobre las variables:
    • todas las variables son igualmente importantes;
    • todas las variables son estadísticamente independientes, es decir el valor de una variable no dice nada sobre el valor de otra.

La mayoría de los demás métodos de clasificación suponen que, antes de que comience la clasificación, es igualmente probable que un objeto pertenezca a una clase u otra; Pero esto no siempre es verdad.

Digamos que sabemos que un cierto porcentaje de los datos pertenece a una clase particular. Surge la pregunta: ¿podemos utilizar esta información al construir un modelo de clasificación? Hay muchos ejemplos de la vida real sobre el uso de este conocimiento previo para ayudar a clasificar objetos. Un ejemplo típico de la práctica médica. Si un médico envía los resultados de las pruebas de un paciente para realizar pruebas adicionales, asigna al paciente a una clase específica. ¿Cómo puedes aplicar esta información? Podemos usarlo como datos adicionales al construir un modelo de clasificación.

Se destacan las siguientes ventajas de las redes bayesianas como método de minería de datos:

  • el modelo define las dependencias entre todas las variables, esto facilita el manejo de situaciones en las que se desconocen los valores de algunas variables;
  • Las redes bayesianas se interpretan de manera bastante simple y permiten un análisis sencillo de escenarios hipotéticos en la etapa de modelado predictivo;
  • el método bayesiano permite combinar de forma natural patrones inferidos a partir de datos y, por ejemplo, conocimiento experto obtenido explícitamente;
  • el uso de redes bayesianas evita el problema del sobreajuste, es decir, la complicación excesiva del modelo, que es una debilidad de muchos métodos (por ejemplo, árboles de decisión y redes neuronales).

El enfoque Naive Bayes tiene las siguientes desventajas:

  • Es correcto multiplicar probabilidades condicionales sólo cuando todas las variables de entrada son verdaderamente estadísticamente independientes; aunque este método suele mostrar resultados bastante buenos cuando no se cumple la condición de independencia estadística, teóricamente esta situación debería manejarse mediante métodos más complejos basados ​​en el entrenamiento de redes bayesianas;
  • El procesamiento directo de variables continuas es imposible: es necesario convertirlas a una escala de intervalo para que los atributos sean discretos; sin embargo, tales transformaciones a veces pueden conducir a la pérdida de patrones significativos;
  • El resultado de la clasificación en el enfoque Naive Bayes está influenciado únicamente por los valores individuales de las variables de entrada; aquí no se tiene en cuenta la influencia combinada de pares o tripletes de valores de diferentes atributos. Esto podría mejorar la calidad del modelo de clasificación en términos de su precisión predictiva, sin embargo, aumentaría el número de opciones probadas.

La clasificación bayesiana ha encontrado una amplia aplicación en la práctica.

Filtrado de palabras bayesiano

Recientemente, se propuso la clasificación bayesiana para el filtrado de spam personal. El primer filtro fue desarrollado por Paul Graham. Para que el algoritmo funcione se deben cumplir dos requisitos.

El primer requisito es que el objeto que se clasifica tenga un número suficiente de características. Esto lo cumplen idealmente todas las palabras de las cartas de los usuarios, a excepción de las muy cortas y muy raras.

El segundo requisito es el reciclaje constante y la reposición del conjunto "spam, no spam". Estas condiciones funcionan muy bien en clientes de correo electrónico locales, ya que el flujo de "no spam" del cliente final es bastante constante y, si cambia, no lo hace rápidamente.

Sin embargo, para todos los clientes del servidor es bastante difícil determinar con precisión el flujo "no spam", ya que la misma carta que es spam para un cliente no lo es para otro. El diccionario resulta ser demasiado grande, no hay una división clara entre spam y "no spam", como resultado, la calidad de la clasificación, en este caso la solución al problema de filtrar letras, se reduce significativamente.

En esta parte no hablaremos de sistemas de recomendación como tales. En su lugar, nos centraremos específicamente en la herramienta principal del aprendizaje automático, el teorema de Bayes, y veremos un ejemplo simple de su aplicación: el ingenuo clasificador de Bayes. Descargo de responsabilidad: es poco probable que le cuente algo nuevo a un lector familiarizado con el tema; hablaremos principalmente sobre la filosofía básica del aprendizaje automático.


El teorema de Bayes es recordado o puede deducirse trivialmente cualquiera que haya seguido incluso el curso más básico de teoría de la probabilidad. Recuerda cuál es la probabilidad condicional de un evento. X sujeto al evento y? Correcto por definición: , ¿dónde está la probabilidad conjunta? X Y y, A pag(X) Y pag(y) - las probabilidades de cada evento por separado. Esto significa que la probabilidad conjunta se puede expresar de dos formas:
.

Bueno, aquí está el teorema de Bayes:

Probablemente pienses que me estoy burlando de ti: ¿cómo puede una reescritura trivialmente tautológica de la definición de probabilidad condicional ser la herramienta principal de algo, especialmente de una ciencia tan amplia y no trivial como el aprendizaje automático? Sin embargo, comencemos a entender; Primero, reescribamos el teorema de Bayes en diferentes notaciones (sí, sí, sigo burlándome):

Ahora relacionemos esto con un problema típico de aprendizaje automático. Aquí D son los datos, lo que sabemos, y θ son los parámetros del modelo que queremos entrenar. Por ejemplo, en el modelo SVD, los datos son las calificaciones que los usuarios dieron a los productos y los parámetros del modelo son los factores que entrenamos para los usuarios y los productos.

Cada una de las probabilidades también tiene su propio significado. - esto es lo que queremos encontrar, la distribución de probabilidad de los parámetros del modelo después cómo tomamos en cuenta los datos; se llama probabilidad posterior(probabilidad posterior). Esta probabilidad, por regla general, no se puede encontrar directamente, y aquí es donde se necesita el teorema de Bayes. - este es el llamado credibilidad(probabilidad), probabilidad de los datos dados los parámetros fijos del modelo; esto suele ser fácil de encontrar; de hecho, el diseño del modelo suele consistir en especificar una función de verosimilitud. A - probabilidad previa(probabilidad previa), es una formalización matemática de nuestra intuición sobre un tema, una formalización de lo que sabíamos antes, incluso antes de cualquier experimento.

Probablemente no sea el momento ni el lugar para profundizar en esto, pero el mérito del reverendo Thomas Bayes no fue, por supuesto, reescribir la definición de probabilidad condicional en dos líneas (no existían tales definiciones entonces), sino precisamente poner avanzar y desarrollar tal visión del concepto mismo de probabilidad. Hoy en día, el “enfoque bayesiano” se refiere a la consideración de probabilidades desde el punto de vista de “grados de confianza” en lugar de la “proporción fricuentista (de la palabra frecuencia, ¡no fenómeno!) de experimentos exitosos cuando el número total de experimentos tiende al infinito”. .” En particular, esto nos permite hablar de las probabilidades de eventos únicos; después de todo, de hecho, no existe un "número de experimentos que tienda al infinito" para eventos como "Rusia se convertirá en campeona mundial de fútbol en 2018" o , más cerca de nuestro tema, "Te gustará la película" Conductores de tractores""; Es más como con un dinosaurio: te gusta o no. Bueno, las matemáticas, por supuesto, son iguales en todas partes; a los axiomas de probabilidad de Kolmogorov no les importa lo que la gente piense de ellos.

Para consolidar lo que se ha cubierto, he aquí un ejemplo sencillo. Consideremos la tarea de categorización de texto: supongamos, por ejemplo, que intentamos ordenar un flujo de noticias por tema basándose en una base de datos existente con temas: deportes, economía, cultura... Usaremos la llamada bolsa de- Modelo de palabras: representa un documento como un (multi)conjunto de palabras que contiene. Como resultado, cada caso de prueba x toma valores del conjunto de categorías V y se describe mediante atributos. Necesitamos encontrar el valor más probable de este atributo, es decir

Según el teorema de Bayes,

Es fácil de estimar: simplemente estimaremos la frecuencia de su aparición. Pero no será posible evaluar diferentes, hay demasiados, esta es la probabilidad de que aparezca exactamente el mismo conjunto de palabras en mensajes sobre diferentes temas. Evidentemente, no hay ningún lugar donde obtener esas estadísticas.

Para abordar esto, un clasificador Bayes ingenuo (a veces incluso llamado Bayes del idiota) asume una independencia condicional de los atributos dado el valor de la función objetivo:

Ahora es mucho más fácil entrenar a los individuales: basta con calcular las estadísticas de aparición de palabras en categorías (hay un detalle más que lleva a dos versiones diferentes del ingenuo Bayes, pero no entraremos en detalles ahora).

Tenga en cuenta que el clasificador Naive Bayes hace una suposición bastante sólida: en la clasificación de textos, asumimos que Diferentes palabras en el texto sobre el mismo tema aparecen de forma independiente unos de otros. Esto, por supuesto, es una completa tontería, pero, sin embargo, los resultados son bastante decentes. De hecho, el clasificador Naive Bayes es mucho mejor de lo que parece. Sus estimaciones de probabilidad son óptimas, por supuesto, sólo en el caso de verdadera independencia; pero el clasificador en sí es óptimo en una clase mucho más amplia de problemas, y he aquí por qué. En primer lugar, los atributos son, por supuesto, dependientes, pero su dependencia es la misma para diferentes clases y "se cancela mutuamente" al estimar probabilidades. Las dependencias gramaticales y semánticas entre palabras son las mismas tanto en el texto sobre fútbol como en el texto sobre aprendizaje bayesiano. En segundo lugar, para estimar probabilidades, el ingenuo Bayes es muy malo, pero como clasificador es mucho mejor (normalmente, incluso si de hecho y , el ingenuo Bayes producirá y , pero la clasificación será más a menudo correcta).

En la próxima serie, complicaremos este ejemplo y consideraremos un modelo LDA que es capaz de identificar temas en un corpus de documentos sin ningún conjunto de documentos etiquetados, de modo que un documento pueda contener varios temas y también aplicarlo al problema de recomendación. .

En la sociedad moderna, las estadísticas juegan un papel importante en el mecanismo de gestión económica. Recopila, procesa científicamente, resume y analiza información que caracteriza el desarrollo de la economía del país, el nivel de vida de la población y otros fenómenos y procesos sociales.

La estadística como ciencia.

Estadísticas- Se trata de series de números que caracterizan diversos aspectos de la vida del estado.

Estadísticas es un tipo de actividad práctica de las personas cuya finalidad es recopilar, procesar y analizar información.

Estadísticas es una ciencia que desarrolla la metodología estadística, es decir un conjunto de técnicas y métodos para recopilar, procesar y analizar información.

De este modo, ConEstadísticas es una ciencia teórica general (un complejo de disciplinas científicas) que estudia el lado cuantitativo de fenómenos y procesos socioeconómicos masivos cualitativamente definidos, es decir, composición, distribución, ubicación en el espacio, movimiento en el tiempo, identificando interdependencias y patrones existentes en condiciones específicas de lugar y tiempo.

Objeto estudiar estadística es sociedad, procesos que ocurren en él y patrones de desarrollo.

La estadística como ciencia es un sistema integral de disciplinas científicas:
  • Teoría general de la estadística: desarrolla la teoría de la investigación estadística, que es la base metodológica de otras ramas de la estadística.
  • (Estadísticas macroeconómicas). Utiliza métodos de la teoría general de la estadística, estudia el lado cuantitativo de los fenómenos y procesos socioeconómicos a nivel de la economía nacional.
  • Estadística matemática y teoría de la probabilidad. Estudia variables aleatorias y las leyes de su distribución.
  • Estadísticas internacionales. La premisa de las estadísticas internacionales es el lado cuantitativo de los fenómenos y procesos en países extranjeros y organizaciones internacionales.
  • Estadísticas de la industria. El tema de estudio es el lado cuantitativo de las actividades de diversos sectores de la economía (estadísticas industriales y agrícolas).

La teoría general de la estadística abre el curso de estudio de las disciplinas estadísticas. Es una disciplina fundamental para el estudio de las estadísticas de la industria y crea las bases para la asimilación y aplicación de métodos de análisis estadístico.

Teoría general de la estadística. es la ciencia de los principios y métodos más generales de los fenómenos socioeconómicos y resuelve otros problemas sociales. Desarrolla un sistema de categorías, revisa datos estadísticos.

La teoría general de la estadística es la base metodológica de todas las estadísticas de la industria.

Al presentar los fundamentos de la teoría de la estadística se pretende estudiar las siguientes cuestiones:
  • la materia, métodos y tareas de la estadística y su conexión con algunas otras disciplinas afines;
  • sistema de indicadores estadísticos y clasificaciones utilizados en estadísticas económicas, su contenido y alcance, relaciones entre indicadores y clasificaciones de estadísticas;
  • las áreas más importantes del análisis estadístico basado en datos económicos y financieros;
  • principales fuentes de datos primarios y la base para la formación de una base estadística.

Tema de estadística- dimensiones y relaciones cuantitativas de fenómenos socioeconómicos cualitativamente definidos, patrones de su conexión y desarrollo en condiciones específicas de lugar y tiempo.

Materia de estadística (estudios estadísticos):
  • Fenómenos sociales de masas y su dinámica mediante indicadores estadísticos. La exigencia de carácter masivo se debe a la acción de la ley de los grandes números: con un gran número de observaciones, los efectos de las características aleatorias se anulan entre sí. (población, número de productos producidos)
  • Fenómenos cuantitativos y cualitativos (Cobertura digital de eventos sociales).
  • El lado cuantitativo de los fenómenos sociales, indisolublemente ligado a su contenido cualitativo, se observa mediante el proceso de transición de cambios cuantitativos a cualitativos (patrones).
  • Desarrollo de un fenómeno a lo largo del tiempo (dinámica)

“Hay tres tipos de mentiras: mentiras,
mentiras y estadísticas descaradas”.
Mark Twain

Las estadísticas no son fórmulas abstrusas ni conclusiones abstractas, es algo que está directamente relacionado con la vida real y ayuda a hacer Decisiones importantes. Las estadísticas son omnipresentes, desde la probabilidad de ganar la lotería hasta la policía predictiva. Hal Varian, economista jefe de Google, dijo al New York Times que trabajar con estadísticas se convertirá en el trabajo atractivo en la próxima década.

Si mides tu progreso en pies, entonces la secuencia correspondiente se puede describir como 1 + ½ + ¼ + ⅛... No importa cuántas veces te acerques a la pared de esta manera (y lo harás hasta el infinito), el La distancia total que recorre no puede exceder los 2 metros, es decir, su distancia inicial desde la pared. Desde un punto de vista matemático, la distancia total recorrida se puede equiparar a 2 metros, lo cual resulta muy conveniente a la hora de realizar cálculos. Un matemático diría que la suma de la serie infinita 1 metro + ½ metro + ¼ metro + ⅛ metro... converge en 2 metros, que es exactamente lo que intentaba explicar el profesor.

Ahora, basándonos en nuestra propia experiencia, podemos decir que gracias a la intuición, las matemáticas y otros detalles técnicos se vuelven mucho más claros.

En la película Minority Report de 2002, Tom Cruise interpreta a un detective que detiene el crimen. Su héroe es un empleado de cierta oficina que utiliza cierta tecnología para predecir crímenes antes de que se cometan. Y esto ya no es una fantasía. En 2011, The New York Times publicó un artículo titulado: “La policía llega al lugar antes de que se cometa un delito”. Dijo que un programa informático especial predijo una alta probabilidad de robo de automóviles ese día en un estacionamiento subterráneo ubicado en el distrito comercial de la ciudad de Santa Cruz. Cuando los detectives llegaron allí, encontraron a dos mujeres mirando demasiado de cerca por las ventanillas del coche. Uno de ellos ha sido detenido repetidamente por robo y el otro fue encontrado en posesión de drogas ilegales.

El sistema utilizado en Santa Cruz fue desarrollado por dos matemáticos, un antropólogo y un criminólogo. El Departamento de Policía de Chicago ha creado una unidad completa de analistas de pronósticos. Parte de su formación se explica por el hecho de que las bandas que aterrorizaban la ciudad actuaban según ciertos patrones.

La correlación mide el grado de conexión entre dos fenómenos. Por ejemplo, existe una correlación entre las temperaturas del verano y las ventas de helados. Cuando suben las temperaturas, aumentan las ventas de helados. Dos variables están correlacionadas positivamente si un cambio en una variable hace que la otra cambie en la misma dirección, es decir, en una dirección creciente o decreciente (por ejemplo, la relación entre la altura y el peso de una persona). Las personas más altas pesan más (en promedio); las personas bajas pesan menos. Una correlación es negativa si un cambio positivo en una variable provoca un cambio negativo en otra (por ejemplo, la relación entre el ejercicio regular y el peso de una persona).

Un punto importante en esta discusión es que la correlación no implica causalidad: una correlación positiva o negativa entre dos variables no significa necesariamente que los cambios en una variable causen cambios en la otra. Una relación estadística entre A y B no prueba que A sea la causa de B. En términos generales, es posible que B sea la causa de A.

Digamos que, según su investigación, las regiones que gastan más dinero en educación experimentan tasas más altas de crecimiento económico que las regiones que invierten en educación. menos dinero. La presencia de una relación positiva y significativa entre estas dos variables no nos dice nada sobre la dirección de esta relación. Las inversiones en programas escolares pueden generar crecimiento económico. Por otro lado, las regiones con mayores tasas de crecimiento económico pueden darse el lujo de invertir más en educación escolar; por lo tanto, una economía fuerte puede ser una razón para aumentar el gasto en educación.

Otra posibilidad es que el gasto adicional en educación podría estimular el crecimiento económico, lo que permitiría una mayor inversión en educación, lo que significa que la relación causa-efecto podría ser en ambos sentidos. Por lo tanto, no deberíamos utilizar variables explicativas que dependan del resultado que intentamos explicar, de lo contrario los resultados podrían estar irremediablemente confundidos.

El concepto de probabilidad en un lenguaje claro.

En determinados casos, el concepto de probabilidad puede utilizarse para atrapar a los estafadores. Caveon Test Security se especializa en la llamada análisis forense de datos, que permite identificar ciertos patrones que sugieren engaño. Por ejemplo, esta empresa llamará la atención del público sobre los resultados de los exámenes en una institución educativa en particular o en algún otro lugar donde se realicen, si el número detectado de respuestas incorrectas idénticas resulta extremadamente improbable (generalmente estamos hablando de una imagen que ocurre menos de una vez en un millón).

Para ello se guía por la siguiente lógica matemática: cuando un grupo grande de estudiantes responde correctamente a una pregunta, no se puede sacar ninguna conclusión clara. Aquí hay dos opciones posibles: o copiaron por unanimidad la respuesta correcta de uno de sus camaradas, o todos son tipos muy inteligentes. Pero cuando un gran grupo de estudiantes responde incorrectamente a una pregunta, esto resulta alarmante: no todos pueden responder igualmente incorrectamente; al menos la probabilidad de que tal escenario sea extremadamente pequeña. Esto sugiere que copiaron la respuesta incorrecta de uno de sus compañeros.

Además, Caveon Test Security detecta exámenes en los que los examinados responden preguntas difíciles significativamente mejor que las simples (en cuyo caso se supone que conocían las respuestas de antemano), o el número de correcciones de una respuesta incorrecta a una respuesta correcta es significativamente mayor que el número de correcciones de la respuesta correcta por una incorrecta (en este caso, se supone que después del examen el profesor o examinador cambió las hojas de respuestas).


Por supuesto, no es difícil ver las limitaciones inherentes al uso de probabilidades. Un grupo suficientemente grande de examinados puede dar de manera absolutamente aleatoria respuestas igualmente incorrectas a una pregunta; Además, cuantas más instituciones educativas se inspeccionen, mayor será la probabilidad de encontrar un panorama similar. Sin embargo, ninguna anomalía estadística refuta la corrección fundamental del enfoque propuesto.

En el libro "Estadísticas desnudas", el autor intentó evitar en la medida de lo posible el uso de fórmulas, ecuaciones y gráficos matemáticos. Las estadísticas pueden ser realmente interesantes y, en su mayor parte, no son tan difíciles como parecen a primera vista.

Foto de portada de la publicación - .

PD ¿Apreciado? Suscríbete a nuestro boletín. Le enviaremos las 10 publicaciones principales del blog cada dos semanas.

Nos guste o no, las estadísticas desempeñan un papel importante en el comercio. Desde noticias fundamentales llenas de números hasta informes comerciales o informes de prueba, no hay forma de escapar de los indicadores estadísticos. Al mismo tiempo, la tesis sobre la aplicabilidad de las estadísticas a la hora de tomar decisiones comerciales sigue siendo uno de los temas más controvertidos. ¿El mercado es aleatorio, las cotizaciones son estacionarias y se puede aplicar un enfoque probabilístico a su análisis? Puedes discutir sobre esto sin cesar. En Internet, e incluso en el sitio web, es fácil encontrar materiales y debates con una variedad de puntos de vista, cálculos científicos rigurosos y gráficos impresionantes. Sin embargo, los comerciantes, por regla general, están interesados ​​en el aspecto aplicado: cómo funciona todo en la práctica, en la terminal comercial. Este artículo es un intento de demostrar un enfoque pragmático de un modelo de decisión comercial probabilístico utilizando un conjunto de indicadores técnicos. Mínima teoría, máxima práctica.

La idea es evaluar el potencial de varios indicadores desde la perspectiva de la teoría de la probabilidad y probar la capacidad de un comité de indicadores para aumentar el porcentaje de ganancias de un sistema comercial.

Esto requerirá la creación de un marco para procesar señales de indicadores arbitrarios y un simple experto basado en él para realizar pruebas.

Está previsto utilizar indicadores estándar como indicadores de trabajo, pero el marco le permitirá conectar y analizar de forma independiente otros indicadores personalizados.

Pero antes de empezar a diseñar e implementar algoritmos, todavía tenemos que profundizar un poco en la teoría.

Introducción al modelo de probabilidad condicional

El título del artículo menciona el clasificador Naive Bayes. Se basa en la conocida fórmula de Bayes, que se analizará brevemente aquí, y se denomina "ingenua" debido al supuesto necesario de independencia de las variables aleatorias descritas por la fórmula. Hablaremos de la independencia de los indicadores más adelante, pero por ahora hablemos de la fórmula en sí.

donde H es una determinada hipótesis sobre el estado interno del sistema (en nuestro caso, esta es una hipótesis sobre el estado del mercado y el sistema comercial), E es un evento observado (en nuestro caso, estas son señales indicadoras), como así como las probabilidades que los describen:

  • P(H) es la probabilidad a priori del estado H, conocida a partir del historial de observaciones;
  • P(E) - la probabilidad total del evento E teniendo en cuenta todas las hipótesis existentes, de las cuales generalmente hay varias (aquí cabe señalar que las hipótesis deben ser inconsistentes, es decir, solo hay un estado del sistema en cada momento, pero para los que quieran profundizar más en la teoría, enlaces);
  • P(E|H) - probabilidad de ocurrencia del evento E si la hipótesis (estado) H es verdadera;
  • P(H|E) - probabilidad posterior de la hipótesis (estado) H al observar el evento E.

Si tomamos como ejemplo el sistema comercial más simple, los estados del mercado como el movimiento ascendente (compra), el movimiento descendente (venta) y las fluctuaciones laterales (expectativas) generalmente se consideran como hipótesis H. Las señales del indicador se utilizan como eventos E que describen el estado probable del mercado.

Para las señales de un indicador específico, es fácil calcular las probabilidades del lado derecho de la fórmula (1) en el historial disponible y luego encontrar el estado más probable del mercado P(H|E).

Sin embargo, para el cálculo es necesario definir más claramente las hipótesis y la metodología de recopilación de estadísticas a partir de las cuales se obtendrán las probabilidades.

En primer lugar, supongamos que la negociación se realiza mediante barras (no mediante ticks). El rendimiento de las operaciones se puede evaluar por el tamaño de la ganancia, el factor de ganancia u otras características, pero para simplificar la presentación, tomaremos el número de entradas ganadoras y perdedoras en el mercado. Esto vinculará directamente la evaluación del sistema con la probabilidad de operaciones exitosas (señales gastadas).

También nos limitaremos a un sistema de negociación sin niveles de toma de ganancias y stop loss, sin soporte de stop loss y sin cambiar el lote. Todos estos parámetros pueden introducirse en el modelo, pero complicarían significativamente los cálculos de probabilidad al convertirlos en distribuciones multivariadas. El único parámetro del sistema de negociación será la duración de la posición en barras. En otras palabras, después de entrar en el mercado en la dirección seleccionada mediante indicadores, la salida se realiza automáticamente después de un tiempo predeterminado. Este enfoque es bueno porque pone énfasis en la exactitud o falsedad de la hipótesis sobre el crecimiento o caída de la cotización. Por lo tanto, probaremos la hipótesis en su forma pura, sin aros salvavidas ni paja debajo.

Para completar el tema de las simplificaciones, haremos dos movimientos cardinales más.

Ya se ha dicho anteriormente que las hipótesis comerciales suelen ser "comprar", "vender" y "esperar". Al descartar la "expectativa", reduciríamos notablemente los cálculos sin pérdida de generalidad. Puede parecer que tales simplificaciones afectarán negativamente la aplicabilidad del resultado obtenido, y hasta cierto punto esto es cierto. Sin embargo, si presta atención a la cantidad de material que queda por leer incluso con tales simplificaciones, probablemente estará de acuerdo en que sería bueno obtener un modelo funcional al principio y poder agregarle detalles más adelante, gradualmente. Quienes deseen construir modelos más complejos que tengan en cuenta las densidades de probabilidad pueden encontrar trabajos relevantes en Internet, incluso en inglés, como Reasoning Methods for Merging Financial Technical Indicators, que describe un sistema híbrido de toma de decisiones probabilística.

Finalmente, el segundo y último paso fundamental es combinar los estados de "compra" y "venta" en uno, pero con un significado universal: "entrada al mercado". Por lo general, utilizamos señales de indicadores multidireccionales de forma simétrica, de manera similar, es decir, por ejemplo, la sobrecompra según el indicador se convierte en una señal de venta y la sobreventa en una señal de compra.

En otras palabras, la hipótesis H ahora parece una entrada exitosa al mercado en cualquiera de dos direcciones (compra o venta).

En estas condiciones, el cálculo de probabilidades del lado derecho de la fórmula (1) se puede realizar en el historial de cotizaciones seleccionado de la siguiente manera.

porque en cualquier barra existe la oportunidad de ingresar con éxito al mercado: una de las direcciones será rentable (aquí descuidamos el diferencial, porque el marco de tiempo de trabajo será D1, que se analiza con más detalle a continuación).

P(E) = número de barras con señales indicadoras / número total de barras

P(E|H) = número de barras con señales de indicador que coincidieron con una dirección comercial rentable / número total de barras

Después de la simplificación, obtenemos una fórmula para calcular el historial de probabilidad de que la señal del indicador seleccionado indique las condiciones para abrir una transacción exitosa:

(2)

donde Nok es el número de señales correctas, Ntotal es el número total de señales.

Un poco más adelante implementaremos un marco que nos permitirá calcular esta probabilidad para cualquier indicador. Como veremos, esta probabilidad suele ser cercana a 0,5 y se deben realizar algunas investigaciones para encontrar condiciones en las que sea consistentemente mayor que 0,5. Sin embargo, los indicadores con un indicador grande son raros. Para los indicadores estándar, que estudiaremos primero, esta probabilidad oscila entre 0,51 y 0,55. Está claro que estos valores son demasiado pequeños y es más probable que le permitan "quedarse con lo suyo" que aumentar constantemente su depósito.

Para solucionar este problema, es necesario utilizar no un indicador, sino varios. Esta solución en sí misma no es nueva; la utilizan la mayoría de los comerciantes. Pero la teoría de la probabilidad permitirá realizar un análisis cuantitativo de la efectividad de los indicadores en varias combinaciones y evaluar el efecto potencial.

La fórmula (1) para el caso de tres indicadores (A, B, C) se verá así:

(3)

Necesitamos llevarlo a una forma conveniente para el cálculo algorítmico. Afortunadamente, la teoría bayesiana se utiliza en muchas industrias y, por lo tanto, existe una receta preparada para nuestro caso.

En particular, existe una dirección como el filtrado de spam bayesiano. No tenemos que entenderlo a fondo. Sólo los conceptos fundamentales son importantes. Documento (por ejemplo, mensaje Correo electrónico) se marca como spam si contiene determinadas palabras características. Se conoce la aparición general de palabras en un idioma y las probabilidades de encontrarlas en spam, del mismo modo que conocemos las probabilidades generales de las señales indicadoras y el porcentaje de sus "aciertos en la marca". En otras palabras, basta con reemplazar la hipótesis del "spam" por una "transacción exitosa" y el evento "palabra" por una "señal indicadora", para que la teoría del procesamiento del spam encaje completamente en nuestra teoría del comercio probabilístico.

Luego, la fórmula (3) se puede ampliar a través de las probabilidades de indicadores individuales de la siguiente manera (para los cálculos, consulte el enlace de arriba):

Los cálculos de P(H|A), P(H|B), P(H|C) se realizan según la fórmula (2) para cada indicador por separado.

Por supuesto, si es necesario, la fórmula (4) se puede ampliar fácilmente a cualquier número de indicadores. Para comprender aproximadamente cómo la cantidad de indicadores afecta la probabilidad de una decisión comercial correcta, supongamos que todos los indicadores tienen el mismo valor de probabilidad:

Entonces la fórmula (4) tomará la forma:

(5)

donde N es el número de indicadores.

En la Figura 1 se muestra una gráfica de esta función para varios valores de N.


Arroz. 1 Tipo de probabilidad conjunta con diferente número de variables aleatorias

Entonces, con p = 0,51 obtenemos P(3) = 0,53, lo cual no es particularmente impresionante, pero con p = 0,55 - P(3) = 0,65, y esto ya es una mejora notable.

Independencia de indicadores

Las fórmulas discutidas anteriormente se basan en el supuesto de independencia de los procesos aleatorios analizados, que en nuestro caso son señales indicadoras. ¿Pero se cumple esta condición?

Es obvio que algunos indicadores, incluidos muchos de la lista estándar, tienen mucho en común. Como ilustración visual, la Figura 2 muestra algunos de los indicadores integrados.

Arroz. 2 grupos de indicadores estándar similares

Es fácil notar que los indicadores estocástico y WPR para el mismo período, superpuestos en la última ventana, en realidad se repiten. Esto no es sorprendente ya que sus fórmulas son aritméticamente equivalentes.

Los indicadores MACD y Awesome Oscillator que se muestran justo arriba en la captura de pantalla son idénticos, ajustados al tipo de promedios móviles. Además, dado que ambos se basan en medias móviles (MA), no pueden considerarse independientes de las propias MA.

RSI, RVI, CCI también están altamente correlacionados. Cabe señalar que casi todos los osciladores estándar son similares; los coeficientes de correlación serán cercanos a 1.

También existe una notable superposición entre los indicadores de volatilidad, en particular ATR y StdDev.

Es importante tener todo esto en cuenta al crear un conjunto de indicadores para un sistema comercial, ya que el efecto real de un comité de indicadores dependientes será en la práctica mucho menor que el teórico esperado.

Por cierto, una situación similar surge cuando se entrenan redes neuronales. Con su ayuda, los traders suelen intentar procesar datos de muchos indicadores elegidos voluntariamente. Sin embargo, alimentar vectores dependientes a la entrada de las redes reduce significativamente la eficiencia del entrenamiento, ya que se desperdicia la potencia informática de la red. El volumen de datos analizados puede parecer grande, pero la información que contienen está duplicada y carece de sentido.

Un enfoque riguroso de este problema requiere calcular la correlación entre indicadores y compilar conjuntos con los valores por pares más pequeños. Esta es un gran área de investigación separada. Los interesados ​​pueden encontrar artículos sobre este tema en Internet. Aquí nos guiaremos por consideraciones generales basadas en las observaciones expuestas anteriormente. Por ejemplo, uno de los conjuntos puede verse así: Estocástico, ATR, AC (Aceleración/Desaceleración) o WPR, Bandas de Bollinger, Momentum.

Cabe aclarar aquí que el indicador de aceleración/desaceleración (AC) es esencialmente un derivado del oscilador. ¿Por qué es apto para ser incluido en el grupo?

Imaginemos una serie de cotizaciones (o un oscilador derivado de ellas) en forma simplificada como fluctuaciones periódicas, por ejemplo, coseno o seno. Recuerde que las derivadas de estas funciones son iguales, respectivamente:

(6)

Las correlaciones entre estas funciones y sus derivadas son cero.

Por lo tanto, utilizar la primera derivada de un indicador es generalmente un buen candidato para ser considerado como indicador independiente adicional.

La segunda derivada es un candidato dudoso en tales procesos oscilatorios, porque las posibilidades de obtener una réplica de la señal original son altas.

Concluyendo la conversación sobre la independencia de los indicadores, tiene sentido detenerse en la cuestión de si las copias de un indicador calculado con diferentes períodos pueden considerarse independientes.

Se puede suponer que la respuesta depende de la proporción de períodos. Obviamente, una ligera diferencia preserva la dependencia de los indicadores y, por lo tanto, se requiere una diferencia notable. Esto concuerda en parte con los métodos clásicos, como el método de las tres pantallas de Elder, donde los períodos de tiempo que difieren, por regla general, al menos 5 veces, equivalen a analizar indicadores con diferentes períodos de tiempo.

Cabe señalar que en el sistema considerado las cantidades independientes no deberían ser en realidad las lecturas de los indicadores, sino las señales comerciales generadas por ellos. Sin embargo, para la mayoría de los indicadores del mismo tipo, por ejemplo, los osciladores, los principios de generación de señales comerciales son similares y, por lo tanto, una dependencia fuerte o débil de las series temporales equivale a una dependencia fuerte o débil de las señales.

Diseño

Entonces, hemos entendido la teoría y estamos listos para abordar la cuestión de qué y cómo codificar.

Recopilaremos estadísticas de señales comerciales de indicadores con un experto especial. Para que un experto pueda operar basándose en lecturas de indicadores arbitrarios, será necesario desarrollar un marco (de hecho, un archivo de encabezado mqh) que recibirá una descripción de los indicadores utilizados y cómo generar señales basadas sobre ellos a través de parámetros de entrada. Por ejemplo, deberíamos poder establecer dos medias móviles de diferentes períodos en los parámetros y generar señales de compra y venta. cuando el MA rápido cruza al más lento hacia arriba y hacia abajo, respectivamente.

El Asesor Experto tendrá control explícito sobre la apertura de barras y negociará únicamente a precios de apertura. Este no es un verdadero experto, sino una herramienta para calcular probabilidades y probar hipótesis. Para nosotros es importante que la verificación se realice rápidamente, porque hay un número ilimitado de opciones para conjuntos de indicadores.

D1 se utilizará como plazo de trabajo predeterminado. Por supuesto, nadie prohibirá análisis adicionales en ningún otro período de tiempo, pero D1 es el menos susceptible al ruido aleatorio, y el análisis de patrones que han existido durante varios años cumple más plenamente con los detalles del enfoque probabilístico. Además, para las estrategias comerciales en D1, generalmente se puede ignorar el diferencial, lo que neutraliza nuestra negativa a respaldar el estado intermedio del sistema de "espera". Por supuesto, para el comercio intradiario no se podría hacer tal suposición y sería necesario calcular la probabilidad de un mayor número de hipótesis.

Como se mencionó anteriormente, el experto abrirá posiciones basándose en las señales del indicador y las cerrará después de un período de tiempo predeterminado. Para ello introducimos el parámetro de entrada correspondiente. Su valor predeterminado será de 5 días. Este es el período característico del período D1, se utiliza en muchos trabajo de investigación en el comercio, también utilizando D1.

El EA y el marco serán multiplataforma, es decir, se compilarán y ejecutarán tanto en MetaTrader 4 como en MetaTrader 5. Esta característica se proporcionará a través de archivos contenedores de encabezado existentes y disponibles públicamente que permiten el uso de MetaTrader 4 MQL. Sintaxis API en el entorno MetaTrader 5 y, además, en algunos casos usaremos compilación condicional: partes específicas del código se incluirán en las directivas de preprocesador #ifdef __MQL4__ y #ifdef __MQL5__.

Implementación en MQL

Marco para indicadores

Comenzaremos nuestra revisión del marco para procesar señales de indicadores discutiendo qué tipos de indicadores necesitaremos. La lista más obvia incluye todos los indicadores integrados, así como un elemento para indicadores personalizados. iPersonalizado. Será necesaria una enumeración para seleccionar indicadores utilizando los parámetros de entrada del marco.

enum IndicatorType (iCustom, iAC, iAD, tADX_period_price, tAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price, iAO, iATR_period, tBands_period_deviation_shift_price, iBearsPower_period_price, iBullsPower_period_price, iBWMFI, iCCI_period_price, iDe Marker_period, tEnvelopes_period_method_shift_price_deviation, iForce_period_method_price, dFractals, dGator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price, fIchimoku_tenkan_kijun_senkou, iMomentum_period_price, iMFI_period, iMA_period_shift_method_price, d MACD_fast_slow_signal_price, iOBV_price, iOsMA_fast_slow_signal_price, iRSI_period_price, dRVI_period, iSAR_step_maximum, iStdDev_period_shift_method_price, dStochastic_K_D_slowing_method_price, iWPR_period);

El nombre de cada indicador integrado contiene un sufijo con información sobre los parámetros del propio indicador. El primer carácter del elemento indica el número de buffers disponibles, por ejemplo, i - un buffer, d - dos, t - tres. Todos estos son sólo consejos para el usuario. Si especifica una cantidad incorrecta de parámetros o el índice de un búfer inexistente, el marco mostrará un error en el registro.

Por supuesto, en los parámetros de entrada deberá especificar para cada indicador no sólo su tipo, sino también los parámetros reales en forma de cadena, el número del búfer y el número de la barra desde la que se leerán los datos.

Según las lecturas del indicador, es necesario generar señales. En principio pueden haber muchas diferentes, pero reuniremos las principales opciones en otro listado.

enum SignalCondition (Disabled, NotEmptyIndicatorX, SignOfValueIndicatorX, IndicatorXcrossesIndicatorY, IndicatorXcrossesLevelX, IndicatorXrelatesToIndicatorY, IndicatorXrelatesToLevelX);

Así, se pueden generar señales:

  • si el valor del indicador no está vacío;
  • el valor del indicador tiene el signo requerido (positivo o negativo);
  • el indicador cruza otro indicador, y aquí cabe señalar que al describir la señal, debemos brindar la oportunidad de especificar 2 indicadores;
  • el indicador cruza un cierto nivel, y aquí queda claro que debería haber un campo para ingresar el nivel;
  • el indicador está posicionado según sea necesario en relación con otro indicador (por ejemplo, arriba o abajo);
  • el indicador está colocado de la manera requerida en relación con el nivel especificado;

El primer elemento, Desactivado, le permite desactivar cualquier condición de generación de señal. Proporcionaremos varios grupos idénticos de parámetros de entrada para describir las señales y cada señal estará desactivada de forma predeterminada.

A partir de los nombres de los elementos del listado anterior, se puede suponer que de alguna manera es necesario establecer el signo requerido de los valores y la posición de las líneas entre sí. Para ello, agreguemos una enumeración más.

enumeración ArribaCeroAbajo (EqualOrNone, UpSideOrAboveOrPositve, DownSideOrBelowOrNegative, NotEqual);

EqualOrNone le permite comprobar:

  • valor vacío en combinación con SignOfValueIndicatorX
  • igualdad de niveles en combinación con IndicatorXrelatesToLevelX

UpSideOrAboveOrPositve le permite verificar:

  • cruce de abajo hacia arriba usando IndicatorXcrossesIndicatorY
  • valor positivo usando SignOfValueIndicatorX
  • cruzar un nivel de abajo hacia arriba usando IndicatorXcrossesLevelX
  • crecimiento de los valores del indicador en barras sucesivas usando IndicatorXrelatesToIndicatorY, si X e Y son el mismo indicador
  • colocando X sobre Y usando IndicatorXrelatesToIndicatorY si X e Y son indicadores diferentes
  • posicionar el indicador por encima del nivel usando IndicatorXrelatesToLevelX

DownSideOrBelowOrNegative le permite verificar:

  • cruce de arriba hacia abajo usando IndicatorXcrossesIndicatorY
  • a un valor negativo usando SignOfValueIndicatorX
  • cruzar un nivel de arriba a abajo usando IndicatorXcrossesLevelX
  • soltar los valores del indicador en barras consecutivas usando IndicatorXrelatesToIndicatorY si X e Y son el mismo indicador
  • colocando X debajo de Y usando IndicatorXrelatesToIndicatorY si X e Y son indicadores diferentes
  • posicionar el indicador por debajo del nivel usando IndicatorXrelatesToLevelX

NotEqual le permite comprobar:

  • desigualdad al nivel (valor) usando IndicatorXrelatesToLevelX

Cuando se activa la señal, es necesario procesarla. Para ello, definiremos una enumeración especial.

enum SignalType (Alerta, Compra, Vender, CerrarCompra, CerrarVenta, CerrarTodo, BuyAndCloseSell, SellAndCloseBuy, ModifyStopLoss, ModifyTakeProfit, ProceedToNextCondition);

Aquí se muestran las principales acciones para procesar señales: mostrar un mensaje, comprar, vender, cerrar todas las órdenes abiertas (compra, venta o ambas), invertir de venta a compra, invertir de compra a venta, modificar niveles de stop loss o take. beneficio, así como la transición a la verificación de la siguiente condición (señal). El último punto le permite construir una verificación de señal en una cadena (por ejemplo, verificar si el búfer principal ha cruzado la línea de señal y, de ser así, verificar más a fondo si esto sucedió por encima o por debajo de un cierto nivel).

Puede notar que no hay ninguna configuración de órdenes pendientes en la lista de acciones. Esto queda fuera del alcance de este trabajo. Los interesados ​​pueden ampliar el marco.

Teniendo todas estas enumeraciones, es posible describir varios grupos de atributos con ayuda de los cuales se establecen los indicadores operativos. Un grupo se parece a:

entrada Tipo de indicador Indicador1Selector = iPersonalizado; // · Cadena de entrada del selector Indicator1Name = ""; // · Cadena de entrada de nombre Parameter1List = "" /*1.0,value:t,value:t*/ ; // · Cadena de entrada de parámetros Indicator1Buffer = ""; // · Entrada del búfer int Indicator1Bar = 1; // · Bar

El parámetro Indicator1Name está destinado a especificar el nombre de un indicador personalizado cuando iCustom está configurado en Indicator1Selector.

El parámetro Parameter1List le permite especificar los parámetros del indicador como una cadena, separados por comas. El tipo de cada parámetro de entrada se reconocerá automáticamente, por ejemplo, 11.0 - doble, 11 - int, 2015.01.01 20:00 - fecha/hora, verdadero/falso - bool, "texto" - cadena. Algunos parámetros (por ejemplo, tipos de media móvil o tipos de precios) se pueden especificar no como un número, sino como una cadena sin comillas (sma, ema, smma, lwma, cierre, apertura, máximo, mínimo, mediana, típico, ponderado, bajoalto, cercacerrado).

Indicator1Buffer: número o nombre del búfer sin comillas. Los nombres de búfer admitidos son principal, señal, superior, inferior, mandíbula, dientes, labios, tenkan, kijun, senkouA, senkouB, chikou, +di, -di.

Indicator1Bar: número de barra, el valor predeterminado es 1.

Una vez determinados los indicadores, se pueden generar señales en base a ellos, es decir, condiciones para desencadenar eventos. Cada señal está especificada por un grupo de parámetros de entrada.

cadena de entrada __SIGNAL_A = ""; entrada SignalCondition CondiciónA = Desactivado; // · Condición A cadena de entrada IndicatorA1 = ""; // · Indicador X para la señal A cadena de entrada IndicatorA2 = ""; // · Indicador Y para la señal A entrada doble NivelA1 = 0; // · Nivel X para entrada de señal A double NivelA2 = 0 ; // · Nivel Y para entrada de señal A UpZeroDown DirectionA = EqualOrNone; // · Dirección o señal A entrada SignalType ExecutionA = Alerta ; // Acción A

Para cada señal, puede especificar un identificador en el parámetro __SIGNAL_.

Usando Condición, selecciona la condición para verificar la señal. A continuación, se establecen uno o dos indicadores y uno o dos valores de nivel (el segundo nivel está reservado para el futuro y no se utilizará en este experimento). Los indicadores en los parámetros del indicador son el número de indicador del grupo de atributos correspondiente o el prototipo del indicador en la forma:

nombredelindicador@búfer(param1,param2,...)

Esta forma de grabación le permite determinar rápidamente el indicador utilizado sin ella. Descripción detallada utilizando un grupo de atributos. Por ejemplo,

iMA@0(1,0,pequeña,alta)

da valores de precios altos, y en cada barra actual de un experto en trabajo, se toma la barra número 1 (la completada más recientemente, para la cual finalmente se conoce el precio alto).

Por lo tanto, los indicadores se pueden especificar tanto en grupos de atributos seleccionados (para su posterior referencia desde señales por número) como directamente en señales en el parámetro Indicador (X o Y). El primer método es conveniente si es necesario utilizar el mismo indicador en diferentes señales o como X e Y dentro de una señal.

El parámetro Dirección especifica la dirección o el signo del valor para que se active la condición. De acuerdo con Ejecución, se realiza una u otra acción cuando se activa la señal.

Dentro del marco, ahora se determina que un indicador no puede tener más de 20 parámetros, el número máximo de grupos seleccionados con atributos de indicador es 6 (pero, como recordamos, los indicadores también se pueden configurar directamente en la señal), y las señales - 8. Todo esto se puede cambiar en el código fuente. El archivo IndicatN.mqh se adjunta al final del artículo.

También en este archivo, en forma de varias clases, se implementa toda la lógica para analizar los parámetros del indicador, llamarlos, verificar las condiciones y devolver los resultados de la verificación al código de llamada (que será nuestro experto).

En particular, para transmitir instrucciones sobre la necesidad de realizar cualquier acción de la enumeración SignalType analizada anteriormente, se utiliza una clase pública simple TradeSignals con campos lógicos correspondientes a los elementos de la enumeración:

clase TradeSignals (público: bool alerta; bool comprar; bool vender; bool comprarSalir; bool venderSalir; bool ModifySL; bool ModifyTP; índice int; valor doble; mensaje de cadena; TradeSignals(): alerta(falso), comprar(falso), vender (falso), comprarSalir(falso), venderSalir(falso), ModificarSL(falso), ModificarTP(falso), valor (EMPTY_VALUE), mensaje("" )());

Cuando se cumplen las condiciones necesarias, los campos se establecen en verdadero. Por ejemplo, si se selecciona la acción Cerrar todo, los indicadores buyExit y sellExit se configuran en el objeto TradeSignals.

El campo de índice contiene el número de serie de la condición desencadenada.

Usando el campo de valor, puede pasar un valor arbitrario, por ejemplo, un nuevo nivel de stop loss obtenido a partir de los valores del indicador.

Finalmente, el campo de mensaje contiene un mensaje para el usuario que describe la situación.

Los detalles de la implementación de todas las clases se pueden encontrar en el código fuente. Utiliza los archivos de encabezado auxiliares fmtprnt2.mqh (salida de registro formateada) y RubbArray.mqh (matriz de goma), que también se incluyen.

El archivo de encabezado del marco IndicatN.mqh debe incluirse en el código experto utilizando la directiva #include. Como resultado, después de la compilación en el cuadro de diálogo de configuración experta, obtendremos grupos de parámetros de entrada con atributos de indicador:

Fig.3 Configuración de indicadores

y con definiciones de señal:

Fig.4 Configuración de señales comerciales

Las capturas de pantalla muestran propiedades ya completadas. Los veremos en detalle cuando pasemos al concepto de Asesor Experto y comencemos a configurar estrategias comerciales específicas. Vale la pena señalar aquí que al configurar los atributos del indicador, puede reemplazar cualquier parámetro numérico con una expresión como =var1, =var2, etc. a 9. Se refieren a parámetros de entrada de marco especiales del mismo nombre var1, var2, etc., destinados a la optimización. Por ejemplo, la entrada:

iMACD@principal(=var4,=var5,=var6,abierto)

significa que los parámetros de los períodos de media móvil de señal MACD rápido, lento y se pueden optimizar a través de los parámetros de entrada var4, var5 y var6 respectivamente. E incluso con la optimización desactivada, durante las pruebas individuales, los valores de los atributos del indicador correspondiente se leerán de los parámetros de entrada especificados del marco.

Experto en pruebas

Para facilitar la codificación, trasladaremos todas las funciones comerciales a una clase especial y la diseñaremos como un archivo de encabezado independiente Expert0.mqh. Dado que vamos a probar sistemas comerciales bastante simples, la clase solo permitirá abrir y cerrar posiciones.

Por lo tanto, todas las operaciones rutinarias con indicadores y relacionadas con el comercio se colocan en archivos de encabezado.

#incluir<IndicatN.mqh >#incluir<Experto0.mqh >

Directamente en el archivo experto indstats.mq4 habrá muy pocas líneas de código y una lógica simple.

Dado que el Asesor Experto debe compilarse y funcionar en MetaTrader 5 después de cambiar la extensión a mq5, agregaremos archivos de encabezado que garanticen la transferencia de códigos al nuevo entorno.

#ifdef __MQL5__ #incluir #incluir #incluir #terminara si

Ahora pasemos a los parámetros de entrada del Asesor Experto.

entrada int Número de señal consistente = 1; entrada int Magia = 0; flotador de entrada Lote = 0,01 f; entrada int TradeDuration = 1;

Se requieren Magic y Lot para crear un objeto Expert a partir del archivo Expert0.mqh.

Experto e(Magia, Lote);

El parámetro ConsistentSignalNumber contendrá la cantidad de señales comerciales que intentamos combinar para mejorar la confiabilidad.

El parámetro TradeDuration especifica el número de barras durante las cuales se mantendrá la posición abierta. Como se mencionó anteriormente, abriremos operaciones basadas en señales y las cerraremos después de 5 barras, es decir. días, ya que se utiliza el plazo D1.

En el controlador de eventos OnInit, inicializaremos el marco del indicador.

int OnInit () ( return IndicatN::handleInit(); )

En el controlador OnTick proporcionaremos control sobre la apertura de la barra.

void OnTick () ( fecha y hora estática lastBar; if (lastBar != Time) ( const RubbArray *ts = IndicatN::handleStart(); ... última barra = Hora; ) )

Al formar una nueva barra, comprobaremos todos los indicadores y las condiciones asociadas a ellos llamando nuevamente al marco de indicadores. Como resultado, obtenemos una serie de señales activadas: objetos TradeSignals.

Ahora toca hablar de la acumulación de estadísticas.

Cada condición (evento) del marco, si ocurre, genera una señal con el indicador de alerta de forma predeterminada. Usaremos esto para contar la cantidad de señales de los indicadores, así como la cantidad de estados realizados del sistema, es decir. casos (barras) en los que comprar o vender sería exitoso.

Para calcular estadísticas, describiremos matrices.

barras enteras = 0; // recuento total de barras/muestras int toro = 0, oso = 0; // número de barras/muestras por tipo de operación int comprar = (0), vender = (0); // matrices de señales incondicionales int comprarOnBull = (0), venderOnBear = (0); // matrices de señales condicionales (exitosas)

En nuestro caso de negociación de barras, cada barra es un potencial nueva entrada en una operación que dura 5 barras. Cada uno de estos segmentos se caracteriza por un aumento o caída de las cotizaciones y se marca como alcista o bajista, respectivamente.

Todas las señales de compra y venta se resumirán en los arrays de compra y venta, y si la señal correspondiente coincide con el “bullness” o “bajista” del segmento, es decir, tiene éxito, también se acumula en el buyOnBull o matriz sellOnBear, según el tipo.

Para llenar las matrices, escribamos el siguiente código dentro de OnTick.

const RubbArray *ts = IndicatN::handleStart(); bool arriba = falso, abajo = falso; int comprarSignalCount = 0, venderSignalCount = 0; para (int i = 0 ; i< ts.size(); i++) { // las alertas se utilizan para recopilar estadísticas si (ts[i].alerta) ( // mientras configuramos eventos, enumerados por i, // la hipótesis H_xxx debería aparecer primero, antes de las señales S_xxx, // porque aquí asignamos marcas arriba o abajo if (IndicatN::GetSignal(ts[i].index) == "H_BULL" ) ( bull++; buy.index]++; up = true ; ) else if (IndicatN::GetSignal(ts[i].index) == "H_BEAR" ) ( oso++; sell.index]++; abajo = verdadero ; ) else if (StringFind (IndicatN::GetSignal(ts[i].index), "S_BUY" ) == 0 ) ( comprar. index]++; if (arriba) ( if (PrintDetails) Print ("buyOk " , IndicatN::GetSignal(ts[i].index)); buyOnBull.index]++; ) ) else if (StringFind (IndicatN: :GetSignal(ts[i].index), "S_SELL" ) == 0 ) ( sell.index]++; if (abajo) ( if (PrintDetails) Print ("sellOk " , IndicatN::GetSignal(ts[i] ].index)); sellOnBear.index]++; ) ) if (PrintDetails) Print (ts[i].message); ) )

Habiendo recibido una serie de señales activadas, repasamos sus elementos en un bucle. Si se establece el indicador de alerta, se trata de una recopilación de estadísticas.

Antes de analizar el código más profundamente, introduzcamos una convención especial para nombrar señales (eventos). Las hipótesis sobre condiciones de mercado alcistas o bajistas se marcarán con los identificadores H_BULL y H_BEAR. Estos eventos deben determinarse primero utilizando los parámetros de entrada del marco, antes que otros eventos (señales indicadoras). Esto es necesario para establecer los signos correspondientes (variables lógicas hacia arriba y hacia abajo) en base a hipótesis confirmadas.

Las señales del indicador deben tener identificadores que comiencen con S_BUY o S_SELL.

Como puedes ver, usando una referencia al número del evento activado ts[i].index, obtenemos su identificador mediante una llamada a la función GetSignal. Si las hipótesis se cumplen, actualizamos los contadores generales de tramos alcistas o bajistas. En el caso de generar señales, mantenemos su conteo total para cada tipo de señal, así como su índice de éxito, es decir, el número de coincidencias con las hipótesis actuales.

Recuerde que la hipótesis H_BULL o la hipótesis H_BEAR son verdaderas en cada barra.

Además de recopilar estadísticas, el experto debe apoyar el comercio basado en señales. Para ello, complementaremos el cuerpo del bucle con un cheque para las banderas de compra y venta.

if (ts[i].buy) ( buySignalCount++; ) else if (ts[i].sell) ( sellSignalCount++; )

Después del ciclo, implementamos la funcionalidad comercial. En primer lugar, cerraremos las posiciones abiertas (si las hay) después del período especificado.

if (e.getLastOrderBar() >= TradeDuration) ( e.closeMarketOrders(); ) if (buySignalCount >= ConsistentSignalNumber && sellSignalCount >= ConsistentSignalNumber) ( Print ("Colisión de señales" ); ) else if (buySignalCount >= ConsistentSignalNumber) ( e.closeMarketOrders(e.mask(OP_SELL)); if (e.getOrderCount(e.mask(OP_BUY)) == 0) ( e.placeMarketOrder(OP_BUY); ) ) else if (sellSignalCount >= ConsistentSignalNumber) ( e. closeMarketOrders(e.mask(OP_BUY)); if (e.getOrderCount(e.mask(OP_SELL)) == 0) ( e.placeMarketOrder(OP_SELL); ) )

Si las señales de compra y venta se contradicen, nos saltamos esta condición. Si el número de señales de compra o venta es igual o mayor que el ConsistentSignalNumber predefinido, abra la orden correspondiente.

Cabe señalar que al establecer ConsistentSignalNumber en un valor inferior al número de señales configuradas, será posible probar el sistema en el modo de combinación de todas o la mayoría de las estrategias. En funcionamiento normal, el experto utilizará intersección en lugar de unión, ya que para encontrar eventos conjuntos, ConsistentSignalNumber debe ser exactamente igual al número de señales. Por ejemplo, con 3 señales configuradas y ConsistentSignalNumber igual a 3, la negociación se realizará solo cuando los tres eventos ocurran simultáneamente. Si ConsistentSignalNumber se establece en 1, las operaciones se abrirán al recibir cualquiera (al menos una) de las 3 señales.

En el controlador de OnDeinit, mostraremos las estadísticas recopiladas sobre alertas o el historial de pedidos en el registro.

El código fuente completo del Asesor Experto se puede ver en el archivo indstats.mq4.

Todas las señales deben compararse con dos hipótesis de compra o venta. Para ello configuraremos las señales H_BULL y H_BEAR, así como sus indicadores.

Para obtener precios de barras, utilice el indicador iMA con un período de 1. En el grupo __INDICATOR_1, establezca:

Selector = iMA_period_shift_method_price

Parámetros = 1,0,sma,abierto

En el grupo __INDICATOR_2 haremos configuraciones similares excepto por el número de barra; allí debe ingresar 5, la cantidad de barras que usaremos en el parámetro TradeDuration.

En otras palabras, en el modo de recopilación de estadísticas, el experto no opera, sino que analiza el cambio en las cotizaciones entre la barra 5 y 0, así como las señales del indicador en la barra 5 o 6, dependiendo del tipo de precio utilizado: por indicadores que funcionan a precios de apertura, puede tomar valores de la barra 5 y para todos los demás, de la 6. En el modo de recopilación de estadísticas, la barra número 5 es una barra virtual actual, y todas las siguientes proporcionan información sobre el "futuro" implementación de hipótesis de mercado alcistas o bajistas.

Inmediatamente hagamos una reserva de que en el modo de negociación tomaremos señales de la barra 0 (si el indicador se construye al precio de apertura) o de la barra 1 (en otros casos). Si el experto no trabajó basándose en los precios de apertura y analizó los ticks, sería necesario observar los valores del indicador en la barra 0 en este modo.

La presencia de estos dos modos (recopilación de estadísticas y comercio) implica la necesidad de crear diferentes conjuntos de parámetros que difieren en el número de barras de trabajo. Comenzaremos con un conjunto para recopilar estadísticas y luego lo convertiremos fácilmente en uno comercial real.

Utilizando estas dos copias del indicador MA, estableceremos hipótesis. En el grupo __SIGNAL_A ingresamos:

SEÑAL_A = H_BULL

Condición = IndicatorXrelatesToIndicatorY Indicador X = 1 Indicador Y = 2 Dirección o señal = UpSideOrAboveOrPositve Acción = Alerta

Configuremos el grupo __SIGNAL_B de la misma manera, excepto por la dirección:

SEÑAL_B = H_OSO
Dirección o signo = DownSideOrBelowOrNegative

Para probar el modelo de comercio probabilístico, utilizaremos 3 estrategias estándar basadas en indicadores:

  • estocástico
  • Bandas de Bollinger

Tengamos en cuenta de antemano que se han optimizado los parámetros de todos los indicadores, algunos de los cuales se dejaron específicamente en forma de enlaces a las variables de entrada var1, var2, etc. para demostrar esta capacidad del marco. Para replicar resultados positivos con los datos de su proveedor, es probable que sea necesario volver a optimizar cada estrategia.

Estrategia estocástica Consiste en comprar cuando el indicador cruza el nivel 20 de abajo hacia arriba y vender cuando cruza el nivel 80 de arriba hacia abajo. Para ello definimos el grupo __INDICATOR_3:

Selector = dStochastic_K_D_slowing_method_price

Parámetros = 14,3,3,sma,lowhigh Buffer = barra principal = 6

Dado que el indicador utiliza precios altos y bajos, es necesario tomar la barra número 6, la última completamente formada antes de la barra 5, donde comienza el comercio virtual si se activa la señal.

Basándonos en el indicador estocástico, configuraremos señales de compra y venta. Grupo para compra:

SIGNAL_C = S_BUY estocástico

Condición = IndicatorXcrossesLevelX Nivel X = 20 Dirección o signo = UpSideOrAboveOrPositve

Grupo en venta:

SIGNAL_D = S_SELL estocástico

Condición = IndicatorXcrossesLevelX Nivel X = 80 Dirección o signo = DownSideOrBelowOrNegative

estrategia MACD Consiste en comprar cuando la línea principal cruza la línea de señal hacia arriba y vender cuando cruza hacia abajo.

Configuremos el grupo de indicadores __INDICATOR_4:

Selector = dMACD_fast_slow_signal_price

Parámetros = =var4,=var5,=var6,abrir Búfer = señal Barra = 5

Leeremos los períodos de señal rápida, lenta de los parámetros var4, var5, var6, disponibles para optimización. Ahora hay 6, 21, 6 respectivamente. Usamos el compás 5 porque... Construimos el indicador en función del precio de apertura.

Dado que el número de grupos para configurar indicadores es limitado, describiremos el búfer principal directamente en las señales. Grupo para compra:

SEÑAL_E = S_COMPRAR macd

Condición = IndicatorXcrossesIndicatorY Indicador X = iMACD@main(=var4,=var5,=var6,open) Indicador Y = 4 Dirección o signo = UpSideOrAboveOrPositve

Grupo en venta:

SEÑAL_F = S_VENDER macd

Condición = IndicatorXcrossesIndicatorY Indicador X = iMACD@main(=var4,=var5,=var6,open) Indicador Y = 4 Dirección o signo = DownSideOrBelowOrNegative

Estrategia basada en BollingerBands Consiste en comprar cuando el máximo de la barra anterior rompe la línea superior del indicador desplazada 2 barras hacia la derecha, y vender cuando el mínimo de la barra anterior rompe la línea inferior del indicador desplazada 2 barras hacia la derecha. A continuación se muestran las configuraciones de las dos líneas indicadoras.

Parámetros = =var1,=var2,2,típico

Buffer = barra superior = 5

Selector = tBands_period_deviation_shift_price

Parámetros = =var1,=var2,2,búfer típico = barra inferior = 5

El período y la desviación se especifican en var1 y var2 como 7 y 1 respectivamente. En ambos casos se puede utilizar la barra 5, a pesar del tipo de precio típico, porque las líneas del indicador están desplazadas 2 barras hacia la derecha, es decir en realidad se calculan a partir de datos pasados.

Finalmente, los grupos de configuración de señal se ven así.

SIGNAL_G = S_BUY bandas

Condición = IndicatorXcrossesIndicatorY Indicador X = iMA@0(1,0,sma,high) Indicador Y = 5 Dirección o signo = UpSideOrAboveOrPositve

SIGNAL_H = S_SELL bandas

Condición = IndicatorXcrossesIndicatorY Indicador X = iMA@0(1,0,sma,low) Indicador Y = 6 Dirección o signo = DownSideOrBelowOrNegative

Todas las configuraciones en forma de archivos configurados se adjuntan al final del artículo.

resultados

Estadísticas sobre indicadores

Para calcular las probabilidades, utilizamos estadísticas para el período 2014.01.01-2017.01.01 para el par EURUSD D1. La configuración experta para el modo de recopilación de estadísticas está contenida en el archivo indstats-stats-all.set.

Los datos recopilados se muestran en el registro. A continuación se muestra un ejemplo:

: barras=778 : alcista=328 bajista=449 : comprar: 328 0 30 0 50 0 58 0 : comprarOk: 0 0 18 0 29 0 30 0 : vender: 0 449 0 22 0 49 0 67 : venderOk: 0 0 0 14 0 28 0 41 : totales: 0,00 0,00 0,60 0,64 0,58 0,57 0,52 0,61 : Estadísticas por nombre: : macd=0,576 : bandas=0,568 : estocástico=0,615

El número total de barras es 778, de las cuales 328 eran adecuadas para una operación de compra exitosa de 5 días y 449 eran adecuadas para una operación de venta exitosa de 5 días. Las primeras 2 columnas contienen contadores de hipótesis: los mismos 2 números, y los siguientes pares de columnas se refieren a las estrategias comerciales correspondientes, cada una de las cuales está representada por una columna de compra y una columna de venta. Por ejemplo, la estrategia estocástica generó 30 señales de compra, 18 de las cuales fueron rentables, y 22 señales de venta, 14 de las cuales fueron rentables. Si sumamos el número total de señales de éxito de cada estrategia y lo dividimos por el número de señales generadas, obtenemos la efectividad (probabilidad de éxito basada en datos históricos) de cada una de ellas:

  • Estocástico - 0.615
  • MACD-0,576
  • Bandas - 0,568
Comercio de prueba

Para asegurarse de que las estadísticas se calculen correctamente, debe ejecutar el Asesor Experto en modo comercial. Para hacer esto, necesita editar los números de barra en la configuración, reemplazando 5 con 0, 6 con 1. Además, debe habilitar secuencialmente las estrategias comerciales una tras otra configurando los parámetros de Acción en Comprar y Vender en lugar de Alerta. Por ejemplo, para probar el comercio estocástico, en el grupo __SIGNAL_C (S_BUY estocástico), reemplace el valor de Alerta en el parámetro Acción con el valor de Compra, y en el grupo __SIGNAL_D (S_SELL estocástico), reemplace el valor de Alerta con Vender.

Las configuraciones correspondientes para las 3 estrategias se encuentran, respectivamente, en los archivos indstats-trade-stoch.set, indstats-trade-macd.set, indstats-trade-bands.set.

Al ejecutar el experto 3 veces con estos conjuntos de parámetros, obtendremos 3 registros con breves informes comerciales. Las estadísticas están al final. Por ejemplo, para estocástico obtenemos la línea:

: Compra: 18/29 0,62 Vende: 14/22 0,64 Total: 0,63

Estas son las cifras sobre transacciones reales: 18 compras de 29 son rentables, 14 ventas de 22 son rentables y la eficiencia general de la señal es de 0,63.

Los resultados de las estrategias MACD y BollingerBands se muestran a continuación.

: Compra: 29/49 0,59 Vende: 28/49 0,57 Total: 0,58

: Compra: 29/51 0,57 Vende: 34/59 0,58 Totales: 0,57

Resumamos los indicadores de todas las estrategias en una lista.

  • Estocástico - 0,63
  • MACD-0,58
  • Bandas - 0,57

Aquí vemos un acuerdo casi completo con la teoría de la subsección anterior. Parte de la diferencia se debe al hecho de que las señales comerciales pueden superponerse entre sí si están dentro de 5 barras y luego no se abre una operación repetida.

Por supuesto, podemos analizar los informes comerciales de cada estrategia.


Fig.5 Informe de estrategia basado en el indicador estocástico


Fig.6 Informe de estrategia basado en el indicador MACD


Fig.7 Informe de estrategia basado en el indicador BollingerBands

Usando la fórmula (4), calculamos la probabilidad teórica de que la transacción tenga éxito al ingresar en función de las señales sincrónicas de los tres indicadores.

P(H|ABC) = 0,63 * 0,58 * 0,57 / (0,63 * 0,58 * 0,57 + 0,37 * 0,42 * 0,43) = 0,208278 / (0,208278 + 0,066822) = 0,208278 / 0,2751 = 0,757

Para probar esta situación, debemos habilitar las tres señales y también cambiar el valor del parámetro ConsistentSignalNumber de 1 a 3. Las configuraciones correspondientes se encuentran en el archivo indstats-trade-all.set.

Según la prueba comercial realizada en el probador, la eficiencia final de dicho sistema en la práctica es 0,75:

: Compra: 4/7 0,57 Vende: 5/5 1,00 Total: 0,75

Aquí está el informe de la prueba:


Fig.8 Informe sobre una combinación de estrategias basada en 3 indicadores

A continuación se muestra una tabla de indicadores comerciales para cada uno de los indicadores por separado y para su superposición.


Ganancia, $ FP norte dd$
estocástico 204 2.36 51 41
MACD 159 1.39 98 76
Bandas 132 1.29 110 64
Total 68 3.18 12 30

Como podemos ver, el aumento en la probabilidad de ganar se logra gracias a entradas más raras, pero más precisas: el número de transacciones y la ganancia total han disminuido, pero el factor de ganancia y la reducción máxima han mejorado en al menos un 35%, y en algunos casos, más de 2 veces.

Conclusión

El artículo analiza la opción más sencilla para implementar un enfoque probabilístico para tomar decisiones comerciales basadas en señales de indicadores. Con la ayuda de un experto especial, se demostró que los cálculos teóricos para aumentar la probabilidad de transacciones exitosas utilizando la fórmula de Bayes corresponden a los resultados obtenidos en la práctica.

Dado que la generación de señales es discreta, las señales de diferentes indicadores pueden no coincidir y es potencialmente posible una situación en la que la superposición de indicadores no da señales comunes confirmadas por todos los indicadores. Una posible solución a este problema es introducir una tolerancia temporal entre señales.

En un caso más general, es posible calcular la densidad de probabilidad de la implementación de hipótesis comerciales dependiendo del estado (y no de las señales) de los indicadores. Por ejemplo, el valor de sobrecompra o sobreventa determinado por un valor de oscilador específico proporciona el porcentaje (probabilidad) de entradas exitosas. Además, la probabilidad de una transacción exitosa depende obviamente de los parámetros seleccionados de stop loss y takeprofit, de los métodos de gestión de lotes y de muchos otros parámetros del sistema. Todo esto puede analizarse desde el punto de vista de la teoría de la probabilidad y utilizarse para realizar cálculos más precisos, pero también más complejos, de las decisiones comerciales.

Los archivos se adjuntan a continuación:

  • indstats.mq4 (también conocido como indstats.mq5) - experto;
  • common-includes.zip: archivo con archivos de encabezado mqh comunes utilizados;
  • adicional-mt5-includes.zip: archivo con archivos de encabezado adicionales para MT5;
  • instats-tester-sets.zip: archivo con archivos de configuración establecidos;