Entradas Populares

La Elección Del Editor - 2019

MQL5: Escribir un indicador y asesor basado en el índice de correlación

Al abrir una posición en forex, asumimos que la demanda de una de las monedas del par crecerá y, como resultado, el cambio en el tipo de cambio conducirá a un aumento en la ganancia flotante. En términos generales, antes de ingresar al mercado, determinamos cuál de las monedas es "más fuerte", respectivamente, qué factores moverán el precio en primer lugar. Forex, por su especificidad, no proporciona las herramientas necesarias para tal análisis, por lo que los operadores idearon muchas formas de justificar el concepto mismo de poder basado en características secundarias. Algunos de ellos incluso dieron lugar a una doctrina separada, no lejos de los pronósticos astrológicos, que no se denominó erróneamente "análisis humanitario".

Haciendo una analogía, si la temperatura del universo a gran escala fuera exactamente la misma, la vida no existiría. El mercado también existe debido al movimiento constante: las oportunidades comerciales aparecen solo cuando hay una distorsión de la oferta y la demanda. Imagine en este momento que todas las monedas de forex serían equivalentes a un costo igual, por ejemplo, a uno: no habría nada para comerciar.

El material está dirigido a comerciantes comunes, y créanme, todos estamos aquí, a menos que, por supuesto, usted sea el propietario de su propia plataforma de negociación; todos los expertos en este caso están abiertos para usted. El mercado de divisas en esta aproximación es una caja negra. En base a esto, trataremos de identificar las fortalezas y debilidades de las monedas solo sobre la base de la información de las fuentes disponibles para nosotros, y tomar decisiones comerciales basadas en estas estimaciones. La idea no es nueva en absoluto, pero el enfoque que se utilizará en el artículo no se usa ampliamente. Si pudiéramos tener en cuenta todos los factores que afectan el cambio en el valor relativo de las monedas, crear una estrategia rentable basada en ellas sería una tarea trivial, incluso sin un sistema completamente cerrado.

Hoy intentaremos escribir nuestra propia herramienta: Indicador y asesor basado en el índice de correlación pares de divisas Y al mismo tiempo practicaremos la programación.

Ley de conservación de energía

Un sistema cerrado supone que el dinero no va más allá del sistema. Podemos imaginar un sistema cerrado como una bóveda bancaria aislada donde el dinero puede moverse de celda en celda, pero no puede salir de los límites de una habitación acondicionada. En consecuencia, después de calcular la pérdida de una cierta cantidad de dinero, tenemos una idea precisa de la cantidad de fondos disponibles, que se redistribuirán a otras celdas en el futuro.

Si hubiera un sistema cerrado ideal en forex, observaríamos una relación finamente ajustada: aquí fue, llegó. Esto significa que el crecimiento de una moneda debería provocar la caída de otra, y así sucesivamente en todas partes. Por lo tanto, después de haber construido un instrumento sintético a partir de la "canasta del mercado", obtenemos un sistema comercial de beneficio mutuo basado en la transferencia natural de dinero. Desafortunadamente, el movimiento de los pares de divisas no sigue leyes exactas, y el mercado real está lejos del concepto de un sistema cerrado.

Fuentes de informacion

Por falta de información privilegiada, la mayoría depende de factores fundamentales, dicen, la economía de un determinado país sufre: el valor de la moneda cae. De hecho, varios indicadores económicos, el tiempo de las sesiones de negociación, la manipulación puramente artificial de la economía, los acontecimientos políticos e incluso solo los rumores de grandes inversores e instituciones financieras pueden afectar en gran medida el tipo de cambio. En este caso, las relaciones causales son muy simples de encontrar después del hecho, pero es extremadamente difícil predecir el grado de su influencia de antemano. El pánico que surge en esos momentos incluso complica la búsqueda de patrones, por lo que muchas personas prefieren no comerciar con las noticias.

La adivinación nunca ha sido tan divertida. Por ejemplo, cierta compañía quebró y los fondos fluyeron como un estanque de montaña a través de canales formados naturalmente, derramándose sobre grietas centenarias, evaporando simultáneamente residuos en la atmósfera. Y nuestra tarea aquí es rastrear estas transformaciones con una precisión bastante alta, de modo que tanto la fuerza de estos factores como su presencia sean una prueba indiscutible: mueven nuestra herramienta principal para generar ingresos: el precio de mercado.

La reacción del mercado en muchos casos es directamente opuesta a las previsiones disponibles, lo que parece sugerir un pensamiento, pero ¿qué estamos estudiando realmente? En este sentido, en el orden de los albañiles, este tipo de análisis generalmente se asocia no con eventos macroeconómicos, sino con la definición de las principales tendencias mundiales.

A diferencia del mercado de valores, el forex es un poco complicado. Sí, tal vez podamos determinar algún potencial de la moneda, y si el pronóstico se cumple, se producirá un desglose de nivel importante o cambiará una tendencia a corto plazo. No debe confiar en la experiencia y el sentido del mercado aquí: los operadores con habilidades similares hace mucho tiempo que abandonaron el mercado y enseñan su experiencia a personas con menos experiencia.

Entonces, surge la pregunta, ¿por qué analizar las tendencias en la economía, si el precio ya habla por sí mismo? Como saben, el indicador más importante en Forex es el precio. Sin embargo, no conocemos los volúmenes exactos, ni la cantidad, ni el tiempo de las operaciones comerciales. Al mismo tiempo, consideramos que el precio es una evaluación justa de la situación actual, a pesar de su naturaleza incierta. Dicha declaración se deriva de la definición misma de un mercado distribuido: no hay una sola parte que controle el valor de un activo negociado. Por lo tanto, solo para simplificar, tomaremos esta afirmación como verdad.

Tipos de índices existentes

La evaluación más justa del valor de las monedas es el cálculo de índices basados ​​en la balanza de pagos. Sin embargo, la cuestión de si el peso nominal de las monedas depende de la balanza comercial entre países sigue abierta. Obviamente, este valor no es fijo y cambia constantemente. Por lo tanto, al calcular índices, los analistas a menudo llegan a algunas simplificaciones al eliminar variables innecesarias de la ecuación. En general, en el mercado de divisas, existen varios métodos generalmente aceptados para evaluar el potencial y determinar una tendencia.

Observamos tres de estos métodos:

  1. Índice promedio ponderado correspondiente a los indicadores de rotación del comercio exterior. Aquí todo es simple: parece que tenemos en cuenta las monedas de todos los países que lideran el comercio más activo y calculamos la media geométrica ponderada de la cesta recibida. Este método se reconoce oficialmente y se basa en la cantidad real de dinero en circulación.
  2. Cálculo de la media geométrica de todas las cruces. Como no podemos calcular los volúmenes de negociación para Forex, tomamos todos los pares involucrados en el cálculo por adelantado para instrumentos con aproximadamente el mismo volumen de negociación. Nuevamente, no tenemos en cuenta todas las monedas, sino solo las más populares.
  3. Cálculo del índice de divisas por la tasa de crecimiento de pares de divisas relacionados utilizando un indicador auxiliar. Esta es la forma más común de calcular la fortaleza de las monedas en función de los precios disponibles. Para el cálculo, puede utilizar cualquier indicador técnico disponible, generalmente basado en un promedio móvil, que posteriormente utilizaremos como punto de partida de nuestro cálculo.

Usaremos un enfoque ligeramente diferente: considerar las dependencias entre pares de monedas y, sobre esta base, construir suposiciones sobre la fuerza de influencia de una moneda en particular. Es decir, para determinar la fortaleza de una moneda en particular, determinaremos su impacto total. Cada par tendrá una moneda común, de lo que se deduce que cuanto mayor es el valor de la dependencia, mayor es la influencia que tiene la moneda común. Para estimar las dependencias, consideraremos la correlación. El coeficiente resultante incluirá la correlación cruzada geométrica media por pares.

Kit de herramientas

Nuestra tarea es determinar qué tan sincronizados van los pares y, en consecuencia, qué influencia tiene la moneda líder. Utilizaremos la correlación como el método más conocido para determinar las dependencias de dos series de tiempo. Para no depender de un método de cálculo, consideraremos simultáneamente a Pearson y Spearman. Según sus características, la nave espacial Pearson no es resistente a las emisiones de series temporales. A su vez, la correlación de rango de Spearman se puede aplicar a casi cualquier serie. Por lo tanto, para tomar una decisión, utilizaremos tanto el método uno como el otro.

Entonces, tenemos disponible una lista de los principales instrumentos de negociación que participarán en los cálculos. El número de herramientas no debe afectar radicalmente el resultado, sino que solo debe aumentar su precisión. Es decir, al agregar o eliminar monedas, el pronóstico debe permanecer aproximadamente igual. Por supuesto, las monedas más populares, sin embargo, influirán fuertemente en el resultado, por lo que aún debe mantenerse un mínimo.

Escribir un indicador

La preparación adecuada de los datos de origen es un proceso extremadamente importante. Cualquier imprecisión en esta etapa puede afectar dramáticamente el resultado final, haciéndolo inútil. Necesitamos resolver dos problemas: la disponibilidad del historial y la sincronización horaria. Comenzaremos a cargar el historial un poco más tarde, pero, para empezar, el indicador debe inicializarse, es decir, debe procesar los parámetros de entrada y marcar los buffers del indicador.

int OnInit () {currenciesToSymbols (Monedas); ...}

Lo primero que hacemos es inicializar la lista de caracteres. Primero, divida la línea en monedas separadas y elimine los espacios adicionales. En el siguiente paso, recopilamos monedas en pares, verificando previamente la disponibilidad de un par de divisas en la descripción general del mercado.

void cur CurrencyToSymbols (string currs) {string arr; StringSplit (currs, ',', arr); int sz = ArraySize (arr); cantidadCurrs = sz; para (int i = 0; i

Luego viene la inicialización de los buffers de indicadores.

int OnInit () {... // por búfer para cada moneda para (int i = 0; i

Dada la complejidad de los cálculos, en grandes cantidades de datos, el indicador puede estar atascado durante un tiempo decente. Para evitar que esto suceda, haremos el renderizado a través del temporizador, mostrando el resultado en partes, comenzando desde la primera barra (extrema) en el gráfico.

EventSetMillisecondTimer (10);

Debido a limitaciones de hardware, el temporizador no puede comenzar más rápido que unas pocas decenas de milisegundos. Por lo tanto, dividiremos los cálculos en pedazos durante 50 ms. Para la sincronización, tomamos como guía el tiempo de apertura de la última barra de series de tiempo y profundizamos en la historia hasta que se alcanza el límite de tiempo. Luego, vuelva a dibujar el gráfico con ChartRedraw (). Por lo tanto, la representación se realizará de forma inmediata y gradual, de derecha a izquierda, abriendo casi instantáneamente el acceso a los últimos datos.

nulo OnTimer () {ulong st = GetMicrosecondCount (); // if la primera ejecución if (currTime == 0) {// obtiene el tiempo de la barra extrema en el gráfico currTime = (datetime) SeriesInfoInteger (_Symbol, _Period, SERIES_LASTBAR_DATE); para (int l = 0; l0) {datetime tm; CopyTime (_Symbol, _Period, Count-1,1, tm); startTime = tm0; } else startTime = StartDate; } // cuando dibujamos todo, continúe monitoreando la barra actual if (currTime= startTime && GetMicrosecondCount () - st

El temporizador indicador, desafortunadamente, no funciona en el probador de estrategias, y por períodos cortos es completamente redundante. Por lo tanto, por compatibilidad, aún dejaremos la función OnCalculate, que se incluirá con el indicador especial TestMode. Esta bandera es necesaria para usar el indicador en el experto; para uso real, es mejor dejar falso.

int OnCalculate (const int rates_total, const int anterior_calculated, const datetime & time, const double & open, const double & high, const double & low, const double & close, const long & tick_volume, const long & volume, const int & spread) {if (TestMode) {int pos = rates_total-prev_calculated; if (prev_calculated == 0) {if (Count> 0) {datetime tm; CopyTime (_Symbol, _Period, Count-1,1, tm); startTime = tm0; pos = Count-1; } else pos = getBarIndexByTime (StartDate); para (int l = 0; l= 0; ind-) {para (int t = 0; t

Entonces, el cálculo principal tiene lugar en la función principal, donde se pasan el índice de barras y el número de moneda. Si no hay suficiente historial en el terminal, el indicador intentará descargarlo, luego de lo cual intentará copiar los datos. Además, si es necesario, entregamos los datos de precios y elegimos el método para calcular la correlación. La función devuelve la media geométrica de todas las correlaciones.

double main (int index, int currency) {for (int k = 0; k

El número de líneas corresponde al número de monedas especificado en los parámetros de entrada. El nombre de la moneda se puede ver en la información sobre herramientas cuando pasa el cursor sobre la línea.

Como las líneas van sincrónicamente la mayor parte del tiempo, a veces las señales indicadoras se vuelven difíciles de distinguir. Por lo tanto, agregamos la función OnChartEvent al indicador con el procesamiento del evento CHARTEVENT_MOUSE_MOVE. Esto es necesario para resaltar líneas individuales cuando pasa el cursor sobre ellas con un mouse.

void OnChartEvent (const int id, const long & lparam, const double & dparam, const string & sparam) {if (id == CHARTEVENT_MOUSE_MOVE) {// almacenar coordenadas y convertir píxeles a tiempo / dinero int x = (int) lparam; int y = (int) dparam; fecha y hora doble precio; int sub; ChartXYToTimePrice (0, x, y, sub, tiempo, precio); líneas int = 0; int bar = getBarIndexByTime (hora); int sz; if (bar> = 0) {for (int t = 0; t= sz) descanso; // Comprueba si la línea está cerca del cursor, selecciónala si (buffert.historybar + 0.03> price && buffert.historybar-0.03

Ahora, cuando pasa el mouse sobre el gráfico, la línea de índice debajo del cursor se destacará de las demás, lo que simplificará su análisis.

Escribiendo un robot

 

Como el indicador no muestra la dirección del movimiento, solo se puede usar como filtro para un sistema existente. Para la verificación, tomemos una estrategia comercial simple en RSI. Reglas de entrada: salida de la zona de sobrecompra / sobreventa. La decisión sobre si ingresar o no será tomada por un filtro en forma de indicador de correlación.

Primero, pruebe el EA sin ningún filtro. Esto nos dará el punto de referencia necesario contra el cual la mejora o el deterioro de los resultados de la segunda prueba debe ser notable. Como puede ver, el asesor no puede ganar dinero, y un RSI claramente no es suficiente para un sistema comercial estable.

Luego, intente agregar un filtro. Las condiciones también son simples: cuando el coeficiente de correlación excede 0.5, creemos que la moneda es lo suficientemente fuerte y le da luz verde a la entrada. Las condiciones para ingresar al mercado siguen siendo las mismas. Como puede ver, el número de transacciones se reduce significativamente. Pero el gráfico en sí parece más estable y, al final, incluso muestra ganancias.

Dado que esta es una prueba muy superficial, los resultados podrían ser aún mejores. La diferencia entre las dos pruebas es obvia, teniendo en cuenta la influencia de los pares de divisas elimina las tendencias a corto plazo del comercio, por lo tanto, las tasas se utilizan solo para monedas fuertes. Por lo tanto, nos deshacemos de las apuestas falsas a sabiendas al operar en una sola dirección.

Conclusión

El cálculo de la correlación lineal no es la forma más confiable de determinar patrones. El hecho de que los pares con el euro se sincronicen durante algún tiempo no significa que exista una relación directa entre ellos, pero se supone. Hay un enlace de sonido en el método, esto se confirma mediante pruebas, pero el método para determinar las dependencias no es el único correcto. Todo el cálculo se lleva a cabo en la función principal, puede cambiar su salida agregando su propia fórmula: hay suficiente espacio para los experimentos. En este caso, el análisis de la correlación promedio ayuda a determinar la tendencia a largo plazo.

Deja Tu Comentario