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 de modelos desconocidos. La idea principal del método es dividir la muestra de datos en v "pliegues". V "pliegues" aquí son submuestras aisladas seleccionadas al azar.

Para un valor fijo de k, se construye un modelo de k-vecinos más cercanos para obtener predicciones sobre el segmento v-ésimo (los segmentos restantes se usan como ejemplos) y se estima el error de clasificación. Para los problemas de regresión, la suma de los cuadrados suele servir como una estimación del error, y para los problemas de clasificación es más conveniente considerar la precisión (el porcentaje de observaciones correctamente clasificadas).

Luego, el proceso se repite secuencialmente para todas las opciones posibles v. Tras el agotamiento de v "pliegues" (ciclos), los errores calculados se promedian y se utilizan como una 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 la precisión de clasificación más grande) se toma como óptimo (óptimo en el sentido del método de validación cruzada).

Debe tenerse en cuenta que la validación cruzada es un procedimiento computacionalmente intensivo y es necesario dejar tiempo para que el algoritmo funcione, 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 supuestos razonables sobre el posible valor del parámetro, por ejemplo, estudios previos de conjuntos de datos similares.

El método de 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 a más consultas al ofrecer respuestas inmediatas a preguntas comunes y permitirles consultar 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 significativo de llamadas al mismo tiempo. Software CBR ahora se implementa 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 se encuentran: CBR Express y Case Point (Inference Corp.), Apriori (Answer Systems), DP Umbrella (VYCOR Corp.), herramientas KATE (Acknosoft, Francia), Pattern Recognition Workbench (Unica, EE. UU.), así como como algunos paquetes estadísticos como Statistica.

clasificación bayesiana

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

Puede familiarizarse con la clasificación bayesiana en detalle en. La clasificación bayesiana se utilizó originalmente para formalización del conocimiento expertos en sistemas expertos, ahora también se utiliza la clasificación bayesiana como uno de los métodos de minería de datos.

La llamada clasificación ingenua o enfoque ingenuo-bayes es la variante más simple del método que utiliza redes bayesianas. Este enfoque resuelve 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 de la suposición de independencia mutua señales.

Propiedades de clasificación ingenuas:

  1. Usando todas las variables y definiendo todas las dependencias entre ellas.
  2. Tener 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 la otra.

La mayoría de los otros métodos de clasificación asumen que la probabilidad de que un objeto pertenezca a una clase u otra es la misma antes de que comience la clasificación; Pero esto no siempre es verdad.

Digamos que sabe que un cierto porcentaje de los datos pertenece a una clase en particular. Surge la pregunta, ¿podemos utilizar esta información a la hora de construir un modelo de clasificación? Hay muchos ejemplos del mundo real del uso de este conocimiento previo para ayudarlo a clasificar objetos. Un ejemplo típico de la práctica médica. Si el médico envía los resultados de las pruebas del paciente para una investigación adicional, asigna al paciente a una determinada clase. ¿Cómo se puede aplicar esta información? Podemos usarlo como datos adicionales al construir un modelo de clasificación.

Se señalan tales ventajas de las redes bayesianas como el 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 son bastante simples de interpretar y permiten un fácil análisis hipotético en la etapa de modelado predictivo;
  • El método bayesiano permite combinar de forma natural patrones derivados de datos y, por ejemplo, conocimiento experto obtenido de forma explícita;
  • el uso de redes bayesianas evita el problema del overfitting, es decir, la excesiva complicación del modelo, que es un punto débil de muchos métodos (por ejemplo, árboles de decisión y redes neuronales).

El enfoque bayesiano ingenuo tiene las siguientes desventajas:

  • es correcto multiplicar probabilidades condicionales solo cuando todas las variables de entrada son verdaderamente independientes estadísticamente; aunque este método a menudo muestra resultados bastante buenos cuando no se cumple la condición de independencia estadística, teóricamente tal situación debería ser manejada por métodos más complejos basados ​​en el entrenamiento de redes bayesianas;
  • el procesamiento directo de variables continuas es imposible: deben convertirse 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 bayesiano ingenuo está influenciado solo por los valores individuales de las variables de entrada; el efecto combinado de pares o triples de valores de diferentes atributos no se tiene en cuenta aquí. Esto podría mejorar la calidad del modelo de clasificación en términos de precisión predictiva, sin embargo, aumentaría el número de variantes probadas.

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

Filtrado bayesiano de palabras

Más recientemente, se ha propuesto la clasificación bayesiana para el filtrado personal de spam. El primer filtro fue desarrollado por Paul Graham. El algoritmo requiere el cumplimiento de dos requisitos.

El primer requisito es que el objeto clasificado debe tener un número suficiente de características. Todas las palabras de las letras del usuario satisfacen idealmente esto, con la 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 los clientes de correo locales, ya que el flujo de "no spam" desde el cliente final es bastante constante y, si cambia, no lo hará rápidamente.

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

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


El teorema de Bayes recuerda, o cualquiera que haya tomado al menos el curso más básico en teoría de probabilidades puede deducirlo trivialmente. Recuerda cuál es la probabilidad condicional de un evento X sujeto a evento y? Directo por definición: , donde es la probabilidad conjunta X y y, a pags(X) y pags(y) - las probabilidades de cada evento por separado. Por lo tanto, la probabilidad conjunta se puede expresar de dos maneras:
.

Bueno, aquí está el teorema de Bayes para ti:

Probablemente piense que me estoy burlando de usted: ¿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 grande y no trivial como el aprendizaje automático? Sin embargo, comencemos; primero, reescribamos el teorema de Bayes en una notación diferente (sí, sigo burlándome):

Ahora relacionemos esto con una tarea típica 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. 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 precisamente donde se necesita el teorema de Bayes. es el llamado plausibilidad(verosimilitud), la probabilidad de los datos dados los parámetros fijos del modelo; esto suele ser fácil de encontrar, de hecho, la construcción de un modelo suele consistir en establecer la función de verosimilitud. A - probabilidad previa(probabilidad previa), es una formalización matemática de nuestra intuición sobre un objeto, una formalización de lo que sabíamos antes, incluso antes de cualquier experimento.

Probablemente este no sea el momento ni el lugar para ahondar en esto, pero el mérito del reverendo Thomas Bayes fue, por supuesto, no reescribir la definición de probabilidad condicional en dos líneas (no existían tales definiciones entonces), sino simplemente proponer y desarrollar tal visión del concepto mismo de probabilidad. Hoy en día, el "enfoque bayesiano" se refiere a la consideración de las probabilidades desde el punto de vista de los "grados de confianza" en lugar de un frecuentista (¡de la palabra frecuencia, no freak!) "La proporción de experimentos exitosos cuando el número total de experimentos tiende a infinito." En particular, esto nos permite hablar sobre las probabilidades de eventos únicos; después de todo, de hecho, no hay "tendencia a un número infinito de experimentos" para eventos como "Rusia se convertirá en el campeón mundial de fútbol en 2018". o, más cerca de nuestro tema, "A Vasya le gustará la película" Tractor drivers ""; aquí es más como un dinosaurio: o te gusta o no. Bueno, las matemáticas, por supuesto, son las mismas en todas partes, a los axiomas de probabilidad de Kolmogorov no les importa lo que la gente piense de ellos.

Para consolidar lo pasado - un ejemplo simple. Consideremos el problema de categorizar textos: por ejemplo, supongamos que estamos tratando de ordenar el flujo de noticias por tema en base a una base de datos existente con temas: deportes, economía, cultura... Usaremos el llamado modelo de bolsa de palabras. : representar un documento (multi) por un conjunto de palabras que contiene. Como resultado, cada caso de prueba x toma valores de un conjunto de categorías V y se describe mediante atributos. Necesitamos encontrar el valor más probable para un atributo dado, es decir,

Por el teorema de Bayes,

Es fácil de estimar: solo estimemos la frecuencia de su ocurrencia. Pero no podrá evaluar diferentes, hay demasiados, esta es la probabilidad de exactamente ese conjunto de palabras en mensajes sobre diferentes temas. Obviamente, no hay ningún lugar para obtener tales estadísticas.

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

Ahora es mucho más fácil entrenar a los individuales: basta con calcular las estadísticas de ocurrencia de palabras en categorías (hay un detalle más que conduce a dos variantes diferentes de naive bayes, pero no entraremos en detalles ahora).

Tenga en cuenta que un clasificador bayesiano ingenuo hace una suposición muy fuerte: en la clasificación de texto, asumimos que diferentes palabras en un texto sobre el mismo tema aparecen independientemente unas de otras. Esto, por supuesto, es una completa tontería, pero, sin embargo, los resultados son bastante decentes. De hecho, el ingenuo clasificador bayesiano es mucho mejor de lo que parece. Sus estimaciones de probabilidades son óptimas, por supuesto, sólo en el caso de verdadera independencia; pero el clasificador en sí es óptimo para una clase de problemas mucho más amplia, y he aquí por qué. Primero, los atributos, por supuesto, son dependientes, pero su dependencia es la misma para diferentes clases y "se cancela mutuamente" cuando se evalúan las probabilidades. Las relaciones gramaticales y semánticas entre las palabras son las mismas en el texto sobre el fútbol y en el texto sobre el aprendizaje bayesiano. En segundo lugar, para estimar probabilidades, naive bayes es muy malo, pero como clasificador es mucho mejor (por lo general, incluso si de hecho y, naive bayes dará y, pero la clasificación será más a menudo correcta).

En la próxima serie, complicaremos este ejemplo y consideraremos el modelo LDA, que es capaz de resaltar temas en un corpus de documentos sin ningún conjunto de documentos marcados, y para que un documento pueda contener varios temas, y también aplicarlo a la recomendación. tarea.

En la sociedad moderna, las estadísticas juegan un papel importante en el mecanismo de gestión económica. Recoge, procesa científicamente, generaliza y analiza la 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 Son una serie de números que caracterizan diversos aspectos de la vida del estado.

Estadísticas Es un tipo de actividad práctica de las personas, cuyo propósito es la recopilación, procesamiento y análisis de 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 recolectar, 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 aspecto cuantitativo de los fenómenos y procesos socioeconómicos masivos definidos cualitativamente, su composición, distribución, ubicación en el espacio, movimiento en el tiempo, revelando las interdependencias y patrones existentes en condiciones específicas. de lugar y tiempo.

Objeto estudiar estadistica es sociedad, los procesos que tienen lugar en él y las leyes del 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 los métodos de la teoría general de la estadística, estudia el aspecto 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, las leyes de su distribución.
  • Estadísticas internacionales. El tema de las estadísticas internacionales es el lado cuantitativo de los fenómenos y procesos de países extranjeros y organizaciones internacionales.
  • Estadísticas de la industria. El objeto de estudio es el aspecto cuantitativo de las actividades de varios sectores de la economía (estadísticas de la industria, agricultura).

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

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, examina, datos estadísticos.

La teoría general de la estadística es la base metodológica de todos los estadísticos de la industria.

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

Materia de estadísticas- los tamaños y las relaciones cuantitativas de los fenómenos socioeconómicos definidos cualitativamente, los 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. El requisito del carácter masivo se debe a la acción de la ley de los grandes números: con una gran cantidad de observaciones, las acciones de los signos aleatorios se cancelan. (tamaño de la población, número de productos producidos)
  • Fenómenos cuantitativos y cualitativos (Cobertura digital de eventos de sociedad).
  • 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 (regularidades).
  • Desarrollo de un fenómeno en el tiempo (dinámica)

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

Las estadísticas no son fórmulas abstrusas y conclusiones abstractas, es algo que está directamente relacionado con la vida real y ayuda a tomar decisiones importantes. Las estadísticas son omnipresentes, desde la probabilidad de ganar la lotería hasta la policía predictiva. Hall Varian, economista jefe de Google, dijo a The New York Times que las estadísticas serán el trabajo sexy en la próxima década.

Si mide su progreso en pies, entonces la secuencia correspondiente se puede describir como 1 + ½ + ¼ + ⅛ ... No importa cuánto se mueva hacia la pared de esta manera (y lo hará indefinidamente), la distancia acumulada recorrido por usted no puede exceder los 2 metros, es decir, su distancia original de la pared. Desde un punto de vista matemático, la distancia acumulada recorrida por usted se puede equiparar a 2 metros, lo cual es muy conveniente en términos de cálculos. Un matemático diría que la suma de una serie infinita de 1 metro + ½ metro + ¼ de metro + ⅛ de metro... converge en 2 metros, que es exactamente lo que el profesor intentaba explicar.

Ahora, con base en su propia experiencia, puede argumentar que la intuición hace que los matemáticos y otros detalles técnicos sean mucho más claros.

En la película Minority Report de 2002, Tom Cruise interpreta a un detective de prevención del crimen. Su héroe es un empleado de cierta oficina que usa cierta tecnología para predecir crímenes incluso antes de que se cometan. Y esto ya no es una fantasía. En 2011, The New York Times publicó un artículo con el título: "La policía llega al lugar antes de que se cometa el crimen". 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 Santa Cruz. Cuando los detectives llegaron allí, encontraron a dos mujeres mirando demasiado de cerca por las ventanas del automóvil. Uno de ellos ya ha sido detenido en repetidas ocasiones por robo, mientras que al otro se le descubrió que tenía drogas ilegales.

El sistema utilizado en Santa Cruz fue desarrollado por dos matemáticos, un antropólogo y un científico forense. El Departamento de Policía de Chicago ha creado una división completa de analistas pronosticadores. Parte de su formación se debió a 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 de 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 la dirección de aumento o disminución (por ejemplo, la relación entre la altura y el peso de una persona). Las personas más altas tienen más peso (en promedio); las personas bajitas 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. La 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.

Suponga, según su investigación, que las regiones que gastan más dinero en educación muestran tasas de crecimiento económico más altas que las regiones que gastan menos dinero en educación. 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. La inversión en el currículo escolar puede generar crecimiento económico. Por otro lado, las regiones con mayores tasas de crecimiento económico pueden permitirse invertir más en educación; por lo tanto, una economía fuerte puede ser la razón del aumento del gasto en educación.

Alternativamente, el gasto adicional en educación puede estimular el crecimiento económico, lo que permite una mayor inversión en educación, es decir, la causalidad puede ser bidireccional. Por lo tanto, no debemos usar variables explicativas que dependan del resultado que estamos tratando de explicar, de lo contrario, los resultados pueden ser irremediablemente confusos.

El concepto de probabilidad en lenguaje sencillo

En ciertos casos, el concepto de probabilidad se puede utilizar para atrapar a los estafadores. La firma Caveon Test Security se especializa en el llamado análisis forense de datos, que puede revelar 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 cualquier otro lugar donde se realicen, si la cantidad de respuestas incorrectas idénticas encontradas es extremadamente improbable (por lo general, estamos hablando de una imagen que se desarrolla menos). de una vez en un millón)...

Al mismo tiempo, se guía por la siguiente lógica matemática: cuando un gran grupo de estudiantes responde correctamente una pregunta, es imposible sacar una conclusión inequívoca de esto. Aquí hay dos opciones posibles: o copiaron amigablemente 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, es alarmante: todos no pueden responder de la misma forma incorrecta; al menos, la probabilidad de tal escenario es extremadamente pequeña. Esto sugiere que copiaron la respuesta incorrecta de uno de sus compañeros de clase.

Además, Caveon Test Security detecta exámenes en los que los examinados responden a preguntas difíciles significativamente mejor que a preguntas sencillas (en este caso, se supone que sabían las respuestas de antemano), o el número de correcciones de una respuesta incorrecta a una correcta significativamente. excede el número de correcciones de una respuesta correcta a 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 lo suficientemente grande de examinados puede, por accidente, dar respuestas igualmente incorrectas a una pregunta; además, cuantas más instituciones educativas se controlen, mayor será la probabilidad de encontrar una imagen similar. Sin embargo, ninguna anomalía estadística refuta la corrección fundamental del enfoque propuesto.

En el libro Naked Statistics, el autor trató de evitar el uso de fórmulas matemáticas, ecuaciones y gráficos siempre que fuera posible. Las estadísticas pueden ser realmente interesantes y, en su mayor parte, no son tan complejas como parecen inicialmente.

Publicar foto de portada -.

PD ¿Gustó? Suscríbete a nuestro boletín. Cada dos semanas le enviaremos las 10 mejores publicaciones del blog.

Nos guste o no, las estadísticas juegan un papel importante en el comercio. Desde noticias fundamentales llenas de números hasta informes comerciales o informes de prueba, no hay estadísticas de escape. Al mismo tiempo, la tesis sobre la aplicabilidad de las estadísticas en la toma de decisiones comerciales sigue siendo uno de los temas más controvertidos. ¿Es aleatorio el mercado, son estacionarias las cotizaciones, es aplicable el enfoque probabilístico a su análisis? Puedes discutir sobre esto sin cesar. En Internet y en el sitio, es fácil encontrar materiales y discusiones 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 una terminal comercial. Este artículo es un intento de demostrar un enfoque pragmático del modelo probabilístico de tomar decisiones comerciales utilizando un conjunto de indicadores técnicos. Un mínimo de teoría, un máximo de 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 del comité de indicadores para aumentar el porcentaje ganador de un sistema comercial.

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

Se supone que debe usar indicadores estándar como indicadores de trabajo, pero el marco le permitirá conectarse y analizar de forma independiente otros indicadores personalizados.

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

Introducción al modelo de probabilidad condicional

El título del artículo menciona el clasificador bayesiano ingenuo. Se basa en la conocida fórmula de Bayes, que se discutirá brevemente aquí, y se denomina "ingenua" debido a la suposición necesaria sobre la independencia de las variables aleatorias descritas por la fórmula. Hablaremos más sobre la independencia de los indicadores, pero por ahora, la fórmula en sí.

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

  • P (H) - a priori, conocida por la historia de las observaciones, la probabilidad del estado H;
  • P(E) es la probabilidad total del evento E, teniendo en cuenta todas las hipótesis existentes, de las cuales suele haber varias (cabe señalar aquí que las hipótesis deben ser inconsistentes, es decir, el estado del sistema en cada momento es solo uno , pero para los que quieran profundizar 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) es la probabilidad posterior de la hipótesis (estado) H al observar el evento E.

Si tomamos un sistema comercial simple como ejemplo, entonces las hipótesis H generalmente se consideran condiciones de mercado tales como movimiento al alza (compra), movimiento a la baja (venta) y fluctuaciones laterales (expectativa). Las señales indicadoras 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 desde el lado derecho de la fórmula (1) en el historial disponible y luego averiguar 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 para recopilar estadísticas, sobre la base de las cuales se obtendrán las probabilidades.

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

También nos limitaremos a un sistema de negociación sin niveles de take profit y stop loss, sin stop loss acompañante y sin cambiar el lote. Todos estos parámetros pueden introducirse en el modelo, pero complicarían significativamente el cálculo de probabilidades, convirtiéndolas en distribuciones multivariadas. El único parámetro del sistema comercial será la duración de la posición en barras. En otras palabras, luego de ingresar al mercado en la dirección seleccionada mediante los indicadores, la salida se realiza automáticamente después de un tiempo predeterminado. Este enfoque es bueno porque se centra en la corrección o falsedad de la hipótesis de un aumento o disminución de las cotizaciones. Por lo tanto, probaremos la hipótesis en su forma pura, sin aros salvavidas ni ropa de cama.

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

Se dijo anteriormente que "comprar", "vender" y "expectativa" generalmente se toman como hipótesis comerciales. Eliminando "esperando", reduciríamos notablemente los cálculos sin perder la generalidad de la presentación. Puede parecer que tales simplificaciones afectarán negativamente la aplicabilidad del resultado obtenido, y esto es parcialmente cierto. Sin embargo, si presta atención a la cantidad de material que aún queda por leer incluso con tales simplificaciones, entonces puede estar de acuerdo en que, para empezar, sería bueno obtener un modelo funcional, y puede agregarle detalles más adelante, gradualmente. Aquellos que deseen construir modelos más complejos que tengan en cuenta las densidades de probabilidad pueden encontrar documentos relevantes en Internet, incluso en inglés, como Métodos de razonamiento para fusionar indicadores técnicos financieros, que describe un sistema de toma de decisiones probabilístico híbrido.

Finalmente, el segundo y último movimiento cardinal es la unificación de los estados de "comprar" y "vender" en uno solo, pero con un significado universal: "entrada en el mercado". Usualmente usamos señales de indicadores bidireccionales simétricamente, de manera similar, es decir, por ejemplo, la sobrecompra de acuerdo con el indicador se convierte en una señal para vender, y la sobreventa se convierte en una señal para comprar.

En otras palabras, la hipótesis H ahora suena como una entrada exitosa en el mercado en cualquiera de las 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.

ya que existe la oportunidad de ingresar al mercado con éxito en cualquier barra: una de las direcciones resultará rentable (aquí ignoramos el margen, porque el marco de tiempo de trabajo será D1, que se discutirá 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 indicadoras que coincidieron con una dirección comercial rentable / número total de barras

Después de la simplificación, obtenemos la fórmula para calcular la probabilidad en el historial de que la señal del indicador seleccionado indique las condiciones para abrir una operació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 es necesario realizar algunas investigaciones para encontrar condiciones en las que sea consistentemente mayor que 0,5. Sin embargo, los indicadores con una puntuación alta son raros. Para los indicadores estándar, que examinaremos en primer lugar, esta probabilidad oscila entre 0,51 y 0,55. Está claro que tales valores son demasiado pequeños y preferirían permitirles "quedarse con su propia gente" que aumentar constantemente el depósito.

Para resolver este problema, es necesario usar no un indicador, sino varios. Por sí misma, esta solución no es nueva, es utilizada por la mayoría de los comerciantes. Pero la teoría de la probabilidad permitirá 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 que sea conveniente para los cálculos algorítmicos. Afortunadamente, la teoría bayesiana se aplica en muchas industrias y, por lo tanto, puede encontrar una receta preparada para nuestro caso.

En particular, existe una dirección como el filtrado de spam bayesiano. No necesitamos entenderlo a fondo. Sólo los conceptos fundamentales son importantes. Un documento (por ejemplo, un mensaje de correo electrónico) se marca como spam si contiene ciertas palabras características. Se conoce la ocurrencia general de palabras en el idioma y las probabilidades de detectarlas en el spam, al igual que conocemos las probabilidades generales de las señales indicadoras y el porcentaje de "dar en el clavo". En otras palabras, basta con reemplazar la hipótesis del "spam" por un "negocio exitoso" y el evento "word" por una "señal indicadora" para que la teoría del procesamiento del spam encaje completamente en nuestra teoría del trading probabilístico.

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

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

Por supuesto, si es necesario, la fórmula (4) se puede extender 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) se verá así:

(5)

donde N es el número de indicadores.

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


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

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

Independencia de los indicadores

Las fórmulas consideradas anteriormente se basan en la suposición de la independencia de los procesos aleatorios analizados, que en nuestro caso son señales indicadoras. Pero, ¿es cierta esta condición?

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

Arroz. 2 Grupos de indicadores estándar similares

Es fácil ver que los indicadores estocástico y WPR para el mismo período, superpuestos en la última ventana, en realidad se repiten entre sí. 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 por el tipo de promedios móviles. Además, dado que ambos se basan en promedios móviles (MA), no pueden llamarse independientes de los propios 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 estarán cerca de 1.

Entre los indicadores de volatilidad, en particular, ATR y StdDev, también hay una coincidencia notable.

Todo esto es importante a tener en cuenta al formar un conjunto de indicadores para un sistema de comercio, ya que el efecto real de un comité de indicadores dependientes será mucho menor en la práctica que el teórico esperado.

Por cierto, una situación similar ocurre cuando se entrenan redes neuronales. Con su ayuda, los comerciantes a menudo intentan procesar datos de muchos indicadores seleccionados voluntariamente. Sin embargo, alimentar vectores dependientes a la entrada de las redes reduce significativamente la eficiencia de aprendizaje, ya que se desperdicia la potencia de cálculo de la red. El volumen de datos analizados puede parecer grande, pero la información que contienen está duplicada y no tiene 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 una gran área separada de investigación. Los interesados ​​pueden encontrar artículos sobre este tema en Internet. Aquí nos guiaremos por consideraciones generales basadas en las observaciones anteriores. 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 de un oscilador. ¿Por qué es adecuado para su inclusión en el grupo?

Representemos un número de cotizaciones (o un oscilador derivado de ellas) de forma simplificada como fluctuaciones periódicas, por ejemplo, coseno o seno. Recuerda que las derivadas de estas funciones son iguales, respectivamente:

(6)

Las correlaciones de estas funciones y sus derivadas son iguales a cero.

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

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

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

Se puede suponer que la respuesta depende de la proporción de los períodos. Una ligera diferencia, obviamente, preserva la dependencia de los indicadores y, por lo tanto, se requiere una diferencia notable. Esto es en parte consistente con los métodos clásicos, como el método de tres pantallas de Elder, donde los marcos de tiempo, que generalmente son al menos 5 veces diferentes, son equivalentes a analizar indicadores con diferentes marcos de tiempo.

Cabe señalar que en el sistema en consideración, los valores independientes no deberían ser en realidad las lecturas de los indicadores, sino directamente 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 formación de las señales comerciales son similares y, por lo tanto, una dependencia fuerte o débil de una serie temporal es equivalente a una dependencia fuerte o débil de las señales.

Diseño

Entonces, descubrimos 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 en un Asesor Experto especial. Para que un Asesor Experto opere en función de las 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 los métodos para generar señales basadas en ellos. a través de los 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 la MA rápida cruza la más lenta hacia arriba y hacia abajo, respectivamente.

El EA tendrá control explícito sobre la apertura de barras y operará únicamente a los 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 el marco de tiempo de trabajo predeterminado. Por supuesto, nadie prohibirá un mayor análisis en cualquier otro período de tiempo, sin embargo, 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 las especificaciones del enfoque probabilístico. Además, para las estrategias comerciales en D1, generalmente se puede despreciar el diferencial, lo que neutraliza nuestra negativa a respaldar el estado intermedio del sistema de "espera". Para el comercio diario, por supuesto, no se puede hacer esta suposición y se tendrían que calcular más hipótesis.

Como se mencionó anteriormente, el Asesor Experto abrirá posiciones en función de 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 por defecto será de 5 días. Este es el período característico para el marco de tiempo D1 y se usa en muchos trabajos de investigación comercial que también usan el D1.

El Asesor Experto y el marco serán multiplataforma, es decir, se compilarán y ejecutarán tanto en MetaTrader 4 como en MetaTrader 5. Esta oportunidad se brindará debido a los contenedores de archivos de encabezado disponibles públicamente que permiten usar MetaTrader 4 sintaxis API MQL en el entorno MetaTrader 5 y, además, utilizaremos la compilación condicional en algunos casos: partes específicas de los códigos se incluirán en las directivas del preprocesador #ifdef __MQL4__ y #ifdef __MQL5__.

implementación MQL

Marco de indicadores

Comencemos nuestra revisión de un marco para procesar señales de indicadores discutiendo qué tipos de indicadores necesitamos. La lista más obvia incluye todos los indicadores incorporados, así como un elemento para indicadores personalizados. iPersonalizado... La enumeración será necesaria 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, iDeMarker_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, dMACD_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 significa el número de búferes disponibles, por ejemplo, i - un búfer, d - dos, t - tres. Todos estos son solo consejos para el usuario. Si especifica el número incorrecto de parámetros o el índice de un búfer inexistente, el marco generará un error en el registro.

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

Las señales deben generarse en base a las lecturas de los indicadores. En principio puede haber muchas diferentes, pero las principales opciones las reunimos en otra enumeración.

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í se debe tener en cuenta que al describir la señal, debemos brindar la oportunidad de establecer 2 indicadores;
  • el indicador cruza un cierto nivel, y aquí queda claro que debe haber un campo para ingresar el nivel;
  • el indicador está ubicado de la manera requerida en relación con otro indicador (por ejemplo, más alto o más bajo);
  • el indicador está ubicado de la manera requerida en relación con un nivel dado;

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

A partir de los nombres de los párrafos de la lista anterior, se puede suponer que es necesario establecer de alguna manera el signo requerido de los valores y la posición de las líneas entre sí. Agreguemos una enumeración más para este propósito.

enum UpZeroDown (igual o ninguno, arriba o arriba o positivo, abajo o abajo o negativo, no igual);

EqualOrNone le permite verificar:

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

UpSideOrAboveOrPositve le permite verificar:

  • intersección ascendente con IndicadorXcrucesIndicadorY
  • positividad del valor usando SignOfValueIndicatorX
  • cruzar el nivel de abajo hacia arriba usando IndicatorXcrossesLevelX
  • crecimiento de los valores del indicador en barras consecutivas usando el indicador X se relaciona con el indicador Y, si X e Y son el mismo indicador
  • posicionar X sobre Y usando el indicador X se relaciona con el indicador Y, si X e Y son indicadores diferentes
  • posición del indicador por encima del nivel usando IndicatorXrelatesToLevelX

DownSideOrBelowOrNegative le permite verificar:

  • cruce de arriba a abajo usando IndicatorXcrossesIndicatorY
  • a un valor negativo usando SignOfValueIndicatorX
  • cruzar el nivel de arriba a abajo usando IndicatorXcrossesLevelX
  • valores de indicador descendentes en barras consecutivas usando IndicatorXrelatesToIndicatorY, si X e Y son el mismo indicador
  • posicionar X debajo de Y usando IndicatorXrelatesToIndicatorY, si X e Y son indicadores diferentes
  • posición del indicador por debajo del nivel usando IndicatorXrelatesToLevelX

NotEqual le permite verificar:

  • nivel de desigualdad (valor) usando IndicatorXrelatesToLevelX

Cuando se activa la señal, debe procesarla. Para esto, definimos una enumeración especial.

enum SignalType (Alerta, Compra, Venta, CloseBuy, CloseSell, CloseAll, BuyAndCloseSell, SellAndCloseBuy, ModifyStopLoss, ModifyTakeProfit, ProceedToNextCondition);

Las principales acciones para el procesamiento de señales se muestran aquí: mostrar un mensaje, comprar, vender, cerrar todas las órdenes abiertas (compra, venta o ambas), reversión de venta a compra, reversión de compra a venta, modificación de stop loss o niveles de toma -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ñales en una cadena (por ejemplo, verifique si el búfer principal cruzó la línea de señal y, de ser así, verifique si sucedió por encima o por debajo de cierto nivel).

Puede ver que no hay ninguna colocación de orden pendiente en la lista de acciones. Esto queda fuera del alcance de este trabajo. Los interesados ​​pueden ampliar el marco.

Con todas estas enumeraciones, se pueden describir varios grupos de atributos que definen indicadores de desempeño. Un grupo se parece a:

entrada Tipo de indicador Indicador1Selector = iPersonalizado; // Cadena de entrada del selector NombreIndicador1 = ""; // · Nombre cadena de entrada Parameter1List = "" /*1.0,value:t,value:t*/; // · Cadena de entrada de parámetros Indicador1Buffer = ""; // Entrada de búfer int Indicador1Bar = 1; // Bar

El parámetro Indicator1Name se usa para establecer el nombre de un indicador personalizado, cuando el Indicador1Selector contiene iCustom.

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 promedios móviles o tipos de precios, se pueden especificar no como un número, sino como una cadena sin comillas (sma, ema, smma, lwma, close, open, high, low, mediana, típico, ponderado, bajoalto, cercacerrar).

Indicador1Buffer: 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.

Indicador1Bar - número de barra, por defecto es igual a 1.

Una vez que se han identificado los indicadores, se pueden generar señales sobre su base, es decir, Condiciones para desencadenar eventos. Cada señal se especifica mediante un grupo de parámetros de entrada.

cadena de entrada __SIGNAL_A = ""; entrada SignalCondition ConditionA = Deshabilitado; // · Condición A cadena de entrada IndicadorA1 = ""; // Indicador X para señal A cadena de entrada IndicadorA2 = ""; // Indicador Y para señal A entrada doble NivelA1 = 0; // Nivel X para entrada de señal A double LevelA2 = 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_.

La condición se utiliza para seleccionar una condición de prueba de 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 de indicador son el número de indicador del grupo de atributos correspondiente o el prototipo de indicador en el formulario:

[correo electrónico protegido](parámetro1, parámetro2, ...)

Este formulario de registro le permite determinar rápidamente el indicador utilizado sin describirlo en detalle utilizando un grupo de atributos. Por ejemplo,

[correo electrónico protegido](1,0, sma, alto)

da los valores de los precios altos, y en cada barra actual del Asesor Experto en funcionamiento, se toma la barra número 1 (la completada más reciente, para la cual finalmente se conoce el precio alto).

Por lo tanto, los indicadores se pueden especificar tanto en grupos de atributos seleccionados (para referencia posterior a ellos 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 se necesita usar 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 desencadenar la condición. De acuerdo con la Ejecución, se realiza una acción cuando se activa una 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 se pueden configurar adicionalmente directamente en la señal) y las señales: 8. Todo esto se puede cambiar en el código original. El archivo IndicatN.mqh se adjunta al final del artículo.

Además, 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 prueba al código de llamada (que será nuestro Asesor Experto).

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

class TradeSignals (público: alerta bool; compra bool; venta bool; salida de compra bool; salida de venta bool; ModifySL bool; ModifyTP bool; índice int; valor doble; mensaje de cadena; TradeSignals (): alerta (falso), compra (falso), venta (falso), buyExit (falso), sellExit (falso), ModifySL (falso), ModifyTP (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 CloseAll, los indicadores buyExit y sellExit se marcan en el objeto TradeSignals.

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

Usando el campo de valor, puede pasar un valor arbitrario, por ejemplo, un nuevo nivel de stop loss obtenido 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 archivos de encabezado auxiliares fmtprnt2.mqh (salida de registro formateada) y RubbArray.mqh (matriz "gomosa"), que también se adjuntan.

El archivo de encabezado IndicatN.mqh debe incluirse en el código de EA utilizando la directiva #include. Como resultado, después de la compilación en el cuadro de diálogo de configuración del Asesor Experto, recibiremos 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 las propiedades ya completadas. Los veremos en detalle cuando pasemos al concepto de un Asesor Experto y comencemos a establecer estrategias comerciales específicas. También vale la pena señalar aquí que al especificar los atributos del indicador, puede reemplazar cualquier parámetro numérico con una expresión de la forma = var1, = var2, etc. a 9. Se refieren a parámetros de entrada especiales del mismo nombre var1, var2, etc., destinados a la optimización. Por ejemplo, la entrada:

[correo electrónico protegido](= var4, = var5, = var6, abierto)

significa que los parámetros de los períodos de las medias móviles rápidas, lentas y de señalización MACD pueden optimizarse a través de los parámetros de entrada var4, var5 y var6, respectivamente. E incluso con la optimización deshabilitada, 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, moveremos todas las funciones comerciales a una clase especial y las organizaremos como un archivo de encabezado Expert0.mqh separado. Dado que vamos a probar sistemas comerciales bastante simples, la clase solo le permitirá abrir y cerrar posiciones.

Así, todas las operaciones rutinarias con indicadores y relacionadas con el comercio se colocan en archivos de cabecera.

#incluir<IndicarN.mqh>#incluir<Experto0.mqh>

El archivo indstats.mq4 del Asesor Experto contendrá muy pocas líneas de código y una lógica simple.

Dado que el Asesor Experto, después de cambiar la extensión a mq5, debe compilar y funcionar en MetaTrader 5, agreguemos archivos de encabezado que transferirán los 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 ConsistentSignalNumber = 1; entrada int Magia = 0; entrada flotante Lote = 0,01 f; input int TradeDuration = 1;

Se requieren Magic y Lot para crear un objeto Expert desde el archivo Expert0.mqh.

Experto e (Magia, Lote);

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

El parámetro TradeDuration establece el número de barras durante las cuales se mantendrá una posición abierta. Como se mencionó anteriormente, abriremos tratos en función de las señales y saldremos de ellos después de 5 barras, es decir. días, ya que se utiliza el marco de tiempo D1.

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

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

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

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

Al formar una nueva barra, verificaremos todos los indicadores y las condiciones relacionadas llamando nuevamente al marco del indicador. Como resultado, obtenemos una serie de señales activadas: objetos TradeSignals.

Ahora es el momento de hablar de la acumulación de estadísticas.

Cada condición (evento) del marco, si ocurre, genera por defecto una señal con la bandera de alerta. Usaremos esto para contar la cantidad de señales de los indicadores, así como la cantidad de estados del sistema realizados, es decir casos (barras) cuando la compra o venta sería exitosa.

Para calcular estadísticas, describamos las matrices.

int barras = 0; // recuento total de barras/muestras toro int = 0, oso = 0; // número de barras/muestras por tipo de comercio int comprar = (0), vender = (0); // matrices de señales incondicionales int buyOnBull = (0), sellOnBear = (0); // matrices de señales condicionales (exitosas)

En nuestro caso de negociación de barras, cada barra es una nueva entrada potencial en una operación con una duración de 5 barras. Cada uno de estos segmentos se caracteriza por una subida o bajada de las cotizaciones y se marca como alcista o bajista, respectivamente.

Todas las señales de compra y venta se resumirán en los arreglos de compra y venta, y si la señal correspondiente coincidió con el segmento "alcista" o "bajista", es decir, es exitosa, también se acumula en el arreglo buyOnBull o sellOnBear. , dependiendo del tipo...

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

constante RubbArray * ts = IndicatN :: handleStart (); bool arriba = falso, abajo = falso; int buySignalCount = 0, sellSignalCount = 0; para (int i = 0; i< ts.size(); i++) { // las alertas se utilizan para recopilar estadísticas si (ts [i] .alerta) ( // al configurar eventos, enumerados por i, // la hipótesis H_xxx debe venir primero, antes de las señales S_xxx, // porque asignamos marcas arriba o abajo aquí if (IndicatN :: GetSignal (ts [i] .index) == "H_BULL") (bull ++; buy.index] ++; up = true;) else if (IndicatN :: GetSignal (ts [i] . index) == "H_BEAR") (bear ++; sell.index] ++; down = true;) else if (StringFind (IndicatN :: GetSignal (ts [i] .index), "S_BUY") == 0 ) (buy. index] ++; if (up) (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 (down) (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 con más profundidad, introduzcamos una convención de nomenclatura especial para 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 identificarse utilizando los parámetros de entrada del marco primero, antes de otros eventos (señales indicadoras). Esto es necesario para establecer los signos correspondientes - las variables booleanas arriba y abajo - sobre la base de las hipótesis confirmadas.

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

Como puede ver, al referirnos al número de eventos activados ts [i] .index, obtenemos su identificador llamando a la función GetSignal. Si las hipótesis se cumplen, actualizamos los contadores generales de zonas alcistas o bajistas. En el caso de generar señales, realizamos su recuento total para cada tipo de señal, así como el índice de su é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 Asesor Experto debe respaldar el comercio basado en señales. Para ello, complementaremos el cuerpo del ciclo 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, implementaremos la funcionalidad comercial. En primer lugar, cerraremos las posiciones abiertas (si las hay) después de un período específico.

if (e.getLastOrderBar ()> = TradeDuration) (e.closeMarketOrders ();) if (buySignalCount> = ConsistentSignalNumber && sellSignalCount> = ConsistentSignalNumber) (Print ("Colisión de señales");) else if (buySignalCount> =) ConsistentSignal 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, saltamos este estado. Si el número de señales de compra o venta es igual o superior al número predeterminado de ConsistentSignalNumber, abra la orden correspondiente.

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

En el controlador OnDeinit, mostraremos las estadísticas recopiladas sobre alertas o sobre 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 probarse frente a dos hipótesis sobre la compra o la venta. Para ello configuraremos las señales H_BULL y H_BEAR, así como sus indicadores.

Para obtener los precios de las barras, usamos el indicador iMA con un período de 1. En el grupo __INDICADOR_1, configure:

Selector = iMA_period_shift_method_price

Parámetros = 1.0, sma, abierto

En el grupo __INDICATOR_2, realizaremos configuraciones similares, excepto por el número de barra: se 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 EA no opera, pero 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, según el tipo de precio utilizado: para indicadores que operan a precios de apertura, puede tomar valores de la barra 5, y para todos los demás, de 6. En el modo de recopilación de estadísticas, la barra número 5 es una barra actual virtual, y todas las posteriores brindan información sobre el "futuro". realización de las hipótesis de un mercado alcista o bajista.

Hagamos una reserva de inmediato de que en el modo de negociación tomaremos señales de la barra 0 (si el indicador se traza en el precio de apertura) o la barra 1 (en otros casos). Si el Asesor Experto no funcionara en los precios de apertura y analizara los ticks, sería necesario observar los valores del indicador en la barra 0 en este modo.

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

Usando estas dos copias del indicador MA, establezcamos hipótesis. En el grupo __SIGNAL_A, ingresa:

SEÑAL_A = H_TORO

Condición = IndicadorXrelatesToIndicatorY Indicador X = 1 Indicador Y = 2 Dirección o señal = UpSideOAboveOrPositve Action = Alerta

El grupo __SIGNAL_B se configurará de la misma forma, excepto la dirección:

SEÑAL_B = H_OSO
Dirección o señal = DownSideOrBelowOrNegative

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

  • estocástico
  • Bandas de Bollinger

Adelantémonos que se han optimizado los parámetros de todos los indicadores, y algunos se han dejado especialmente como referencias a las variables de entrada var1, var2, etc. para demostrar esta característica del marco. Lo más probable es que cada estrategia deba volver a optimizarse para reproducir los resultados positivos en los datos de su ISP.

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 a abajo. Para ello, definimos el grupo __INDICADOR_3:

Selector = dStochastic_K_D_slowing_method_price

Parámetros = 14,3,3, sma, lowhigh Búfer = barra principal = 6

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

Configuremos señales de compra y venta basadas en el indicador estocástico. Grupo para comprar:

SIGNAL_C = S_BUY estocástico

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

Grupo en venta:

SIGNAL_D = S_SELL estocástico

Condición = IndicadorXcrossesLevelX 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, open Buffer = señal Bar = 5

Los periodos rápido, lento, señal serán leídos desde los parámetros var4, var5, var6, disponibles para optimización. Ahora hay 6, 21, 6 respectivamente. Usamos el compás 5 porque el indicador se traza en el 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 comprar:

SEÑAL_E = S_COMPRAR macd

Condición = IndicadorXcruzaIndicadorY Indicador X = [correo electrónico protegido](= var4, = var5, = var6, abierto) Indicador Y = 4 Dirección o signo = UpSideOrAboveOrPositve

Grupo en venta:

SIGNAL_F = S_SELL macd

Condición = IndicadorXcruzaIndicadorY Indicador X = [correo electrónico protegido](= var4, = var5, = var6, abierto) Indicador Y = 4 Dirección o signo = DownSideOrBelowOrNegative

Estrategia basada en las Bandas de Bollinger consiste en comprar cuando el máximo de la barra anterior rompe la línea superior del indicador desplazada a la derecha 2 barras, y vender cuando el mínimo de la barra anterior rompe la línea inferior del indicador desplazada a la derecha 2 barras. A continuación se muestran los ajustes para las dos líneas del indicador.

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

Amortiguador = barra superior = 5

Selector = tBands_period_deviation_shift_price

Parámetros = = var1, = var2,2, típico Buffer = 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 se desplazan 2 barras a la derecha, es decir, realmente calculado sobre datos pasados.

Finalmente, los grupos de configuración de señales son los siguientes.

SIGNAL_G = S_COMPRAR bandas

Condición = IndicadorXcruzaIndicadorY Indicador X = [correo electrónico protegido](1,0, sma, alto) Indicador Y = 5 Dirección o signo = UpSideOrAboveOrPositive

SIGNAL_H = S_VENDER bandas

Condición = IndicadorXcruzaIndicadorY Indicador X = [correo electrónico protegido](1,0, sma, bajo) Indicador Y = 6 Dirección o signo = DownSideOrBelowOrNegative

Todos los ajustes en forma de archivos de configuración se adjuntan al final del artículo.

resultados

Estadísticas de indicadores

Para calcular las probabilidades, usamos las estadísticas del período 2014.01.01-2017.01.01 para el par EURUSD D1. La configuración avanzada para el modo de recopilación de estadísticas se encuentra en el archivo indstats-stats-all.set.

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

: barras = 778: toro = 328 oso = 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 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 para comprar y una columna para vender. Por ejemplo, una estrategia basada en un estocástico dio 30 señales de compra, y 18 de ellas rentables, así como 22 señales de venta, 14 de las cuales fueron rentables. Si sumamos el número total de señales exitosas para cada estrategia y lo dividimos por el número de señales generadas, obtenemos la eficiencia (probabilidad de éxito basada en datos históricos) para 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 el modo de negociación. Para hacer esto, debe editar los números de la barra en la configuración, reemplazando 5 con 0, 6 - con 1. Además, debe habilitar secuencialmente una tras otra estrategias comerciales configurando los parámetros de Acción para Comprar y Vender en lugar de Alerta. Por ejemplo, para verificar el comercio por estocástico, en el grupo __SIGNAL_C (S_BUY estocástico), reemplace el valor de Alerta con el valor de Compra en el parámetro Acción, y el valor de Alerta con Venta en el grupo __SIGNAL_D (S_SELL estocástico).

Los ajustes correspondientes para las 3 estrategias se dan, respectivamente, en los archivos indstats-trade-stoch.set, indstats-trade-macd.set, indstats-trade-bands.set.

Habiendo lanzado el Asesor Experto 3 veces con estos conjuntos de parámetros, recibiremos 3 registros con breves informes sobre el comercio. Las estadísticas están al final. Por ejemplo, para un estocástico obtenemos la línea:

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

Estas son cifras para transacciones reales: 18 de 29 compras son rentables, 14 de 22 ventas 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 Venta: 28/49 0,57 Total: 0,58

: Compras: 29/51 0,57 Ventas: 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. Algunas diferencias se explican por el hecho de que las señales comerciales pueden superponerse entre sí si están dentro de las 5 barras, y luego no se abre una nueva operación.

Por supuesto, podemos analizar informes comerciales para 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 sea exitosa al ingresar 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. La configuración correspondiente se encuentra en el archivo indstats-trade-all.set.

De acuerdo con la prueba comercial en el probador, la eficiencia final de dicho sistema en la práctica es 0.75:

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

Aquí está el informe de la prueba:


Fig. 8 Informe sobre una combinación de estrategias basado 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.


beneficio, $ 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, se logra un aumento en la probabilidad de ganar debido a entradas más raras pero más precisas: el número de operaciones y la ganancia total disminuyeron, pero el factor de ganancia y la reducción máxima mejoraron en al menos un 35% y, en algunos casos, más de 2 veces.

Conclusión

El artículo analiza la implementación más simple de 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 del aumento de la probabilidad de transacciones exitosas según la fórmula bayesiana 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 de tiempo entre señales.

En un caso más general, es posible calcular la densidad de probabilidad de la implementación de las hipótesis comerciales en función del estado (y no de las señales) de los indicadores. Por ejemplo, el valor de sobrecompra o sobreventa, determinado por un valor específico del oscilador, da el porcentaje (probabilidad) de entradas exitosas. Además, la probabilidad de una operación exitosa obviamente depende de los parámetros de stop loss y take profit elegidos, de los métodos de gestión de lotes y muchos otros parámetros del sistema. Todo esto puede analizarse desde el punto de vista de la teoría de la probabilidad y usarse para un cálculo más preciso, pero también más complejo, de las decisiones comerciales.

Los archivos se adjuntan a continuación:

  • indstats.mq4 (también conocido como indstats.mq5) - un Asesor Experto;
  • common-includes.zip - archivo con archivos de encabezado mqh de uso común;
  • adicional-mt5-includes.zip - archivo con archivos de encabezado adicionales para MT5;
  • instats-tester-sets.zip - archivo con archivos de configuración;