Discusión sobre el artículo "Algoritmo de autoadaptación (Parte III): Renunciando a la optimización" - página 3

 
La cuestión está resuelta, lo que ocurre es que los detalles ya han desaparecido. Wave trading en estado puro. Creo que no es necesario recalcular estos valores de referencia para cada par en el propio Expert Advisor. Se puede hacer un script que simplemente se ejecute, funcione un par de días y ya está, aquí están los valores de referencia en un fichero, y dejar que los robots lean del fichero. Un año más tarde, volver a calcular. Es poco probable que estas distribuciones cambien incluso en un periodo de tiempo tan largo. Incluso si cambian, no cambiarán mucho y no afectará a la rentabilidad. La cuestión es que cuanto más código hay, más errores desconocidos hay, aunque aquí a uno le gusta como le gusta. Evidentemente te interesa el mercado hasta la locura ).
 
Evgeniy Ilin:
.. Creo que no es necesario volver a calcular estos valores de referencia para cada par en el propio Asesor Experto. Usted puede simplemente hacer una secuencia de comandos que se ejecuta durante un par de días y eso es todo - aquí están los valores de referencia en un archivo, y dejar que los robots de leer desde el archivo. Un año más tarde, volver a calcular. Es poco probable que estas distribuciones cambien incluso en un periodo de tiempo tan largo. Incluso si lo hacen, no cambiarán mucho...

Los datos matemáticos no cambiarán en absoluto. Sugiero que guardemos en caché estos cálculos. He adjuntado un archivo con los cálculos de estos mismos factoriales, probabilidades, sumas de probabilidades, amplitud media calculada, con almacenamiento en caché de todo esto para el tiempo de trabajo. Supongo que a alguien más aparte de mí también le puede resultar útil. Así, calcular estos valores, incluso en cada barra, ya no es estresante.

Pero construir bloques en el pasado, en cada nueva barra de nuevo, y para varios tamaños de bloque, es..... Cuanto mayor sea el tamaño, más barras habrá que procesar para obtener el número de bloques de ese tamaño necesarios para el análisis.

He utilizado OHLC para construir el bloque, no sólo C. En mi opinión, suponer que el precio pasa por (O->H->L->L->C) para barras bajistas y (O->L->H->H->C) para barras alcistas es algo más útil que suponer sólo cierre. De esta manera, por supuesto, el número de cálculos no aumenta mucho (en tiempo absoluto), pero hay ventajas. Por ejemplo, el número necesario de barras hacia atrás se teclea más rápido. Y al cambiar de M1 a M5, la imagen de mecanografía cambia de forma insignificante. Y al cambiar a M15 y superiores, los cambios son inexistentes o incluso más insignificantes en comparación con M5. Esto también ofrece perspectivas para mejorar el rendimiento. Cuando se construyen forward-blocks, no es tan divertido, porque "en movimiento" se puede construir una imagen (por ejemplo, inmediatamente por ticks), y al recalcular - otra. De nuevo, si se supone que los forward-blocks se dibujan al cierre de la siguiente barra, también se podría utilizar OHLC.

"Ciertamente no soy un maestro", como solía decir Panda, pero lo que he construido sobre mis rodillas basándome en el artículo, después de varias optimizaciones (donde la primera es la caché de cálculos estadísticos) da aproximadamente estos resultados:

- Divisa USDJPY M1, a precios de apertura, conjunto de bloques de 24 a 40, tamaño de bloque desde 90 pips y más +10% al anterior (256p máx), 12 tamaños en total.

- Para un periodo de un mes natural, una ejecución simple dura una media de 2,5 minutos, en los que la parte de procesamiento de operaciones es sólo del 10%. Cuanto más estrictos son los requisitos para la detección de tendencias, menos frecuente es la señal de apertura, más se sobrepasa en la dirección de aumentar el tamaño del bloque y el tiempo de búsqueda. Cuanto más frecuente es la señal, más frecuente es la fijación de bloques posteriores y el cálculo de fwd solamente, que es oh-so-muy-rápido.

Con el resultado de una ejecución de 2,5 minutos para un mes de cálculo, es difícil identificar matices u optimizar algunos parámetros de funcionamiento, pero posible :)

La idea del artículo es interesante y parece sencilla y clara. Pero, como dijo una chica, "no me he dado cuenta si lo he entendido...". Todo lo anterior no se refiere a la idea en sí ni a su evaluación, sino sólo a su realización concreta (por supuesto, incompleta y debida a mi propia comprensión).


P.D. Y empezó con la duda de que en 24 bloques la media de deambulación será de 3,8 :)

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Archivos adjuntos:
MStat.mqh  11 kb
 
Amba404:

Los cálculos básicos no cambiarán en absoluto. Sugiero almacenar en caché estos cálculos. He adjuntado un archivo con los cálculos de estos mismos factoriales, probabilidades, sumas de probabilidades, amplitud media calculada, con almacenamiento en caché de todo esto para el tiempo de trabajo. Supongo que a alguien más aparte de mí también le puede resultar útil. Así, calcular estos valores, incluso en cada barra, ya no es estresante.

Pero construir bloques en el pasado, en cada nueva barra de nuevo, y para varios tamaños de bloque, es..... Cuanto mayor sea el tamaño, más barras habrá que procesar para obtener el número de bloques de ese tamaño necesarios para el análisis.

He utilizado OHLC para construir el bloque, no sólo C. En mi opinión, suponer que el precio pasa por (O->H->L->L->C) para barras bajistas y (O->L->H->H->C) para barras alcistas es algo más útil que suponer sólo cierre. De esta manera, por supuesto, el número de cálculos no aumenta mucho (en tiempo absoluto), pero hay ventajas. Por ejemplo, el número necesario de barras hacia atrás se teclea más rápido. Y al cambiar de M1 a M5, la imagen de mecanografía cambia de forma insignificante. Y al cambiar a M15 y superiores, los cambios son inexistentes o incluso más insignificantes en comparación con M5. Esto también ofrece perspectivas para mejorar el rendimiento. Cuando se construyen forward-blocks, no es tan divertido, porque "en movimiento" se puede construir una imagen (por ejemplo, inmediatamente por ticks), y al recalcular - otra. De nuevo, si se supone que los forward-blocks se dibujan al cierre de la siguiente barra, también se podría utilizar OHLC.

"Ciertamente no soy un maestro", como solía decir Panda, pero lo que he construido sobre mis rodillas basándome en el artículo, después de varias optimizaciones (donde la primera es la caché de cálculos estadísticos) da aproximadamente estos resultados:

- Divisa USDJPY M1, a precios de apertura, conjunto de bloques de 24 a 40, tamaño de bloque desde 90 pips y más +10% al anterior (256p máx), 12 tamaños en total.

- Para un periodo de un mes natural, una ejecución simple dura una media de 2,5 minutos, en los que la parte de procesamiento de operaciones es sólo del 10%. Cuanto más estrictos son los requisitos para la detección de tendencias, menos frecuente es la señal de apertura, más se sobrepasa en la dirección de aumentar el tamaño del bloque y el tiempo de búsqueda. Cuanto más frecuente es la señal, más frecuente es la fijación de bloques posteriores y el cálculo de fwd solamente, que es oh-so-muy-rápido.

Con el resultado de una ejecución de 2,5 minutos para un mes de cálculo, es difícil identificar matices u optimizar algunos parámetros de funcionamiento, pero posible :)

La idea del artículo es interesante y parece sencilla y clara. Pero, como dijo una chica, "no entendí si entendí...". Todo lo anterior no es sobre la idea en sí o su evaluación, sino sólo sobre su realización concreta (por supuesto, incompleta y debida a mi propio entendimiento).


P.D. Y empezó con dudas de que en 24 bloques la media de deambulación será de 3,8 :)

Sí, mis cálculos se almacenan en caché en tiempo de ejecución. Las pruebas son muy largas... Estaba preparando las pruebas para el próximo artículo, antes de año nuevo puse las pruebas a testear. El probador es monohilo, así que dividí las pruebas en secciones de 2 años (28 pares de divisas) y cargué 5 terminales. Todo esto fue probado durante 14 días y luego mi router se rompió, empecé a conectar a Internet por cable directamente y me dio el error de envío de error 10054 en todos los testers.... Así que el próximo artículo no es pronto... Por cierto, ¿quién sabe qué tipo de error es el error de envío 10054 y cómo evitarlo en el futuro?

No todo está descrito en el artículo todavía, casi todo está descrito en los TdR, pero no todo está descrito allí también)). Ahora estoy haciendo una versión mucho mejor.

Por cierto, ¿cómo desaparecieron las dudas sobre la figura 3.8)?

Por ahora, voy a tirar los resultados de 1,5 años a partir de 2010.06.25 a 2012.02.27. Esto es sin optimización para 28 instrumentos al mismo tiempo. Los parámetros para todos los instrumentos son los mismos


 
Maxim Romanov:

Por cierto, ¿quién sabe qué tipo de error es enviar error 10054 y cómo evitarlo en el futuro?

¿Cómo por cierto dudas sobre el número 3,8 desapareció)?

Las dudas han desaparecido, son matemáticas.

y el 10054 es supuestamente un error de protocolo de red, debido a la pérdida de conexión a la red. El hecho de volver a enchufarlo no influye. El problema suele aparecer en muchos programas cuando se quita el enlace de la tarjeta de red (o se desconecta el router). En este caso (especialmente si se recibe la ip por dhcp), Windows empieza a pensar que ya no tiene un dispositivo de red funcionando, por lo que los servicios de red se fastidian. Al mismo tiempo, los programas que se ejecutan localmente a través de conexiones de red, por ejemplo a su dirección local 127.0.0.1, también se estropean.

Me ayudó lo siguiente: creé un dispositivo de red virtual (loopback, puedes buscarlo en Google), le asigné una dirección IP como 127.0.1.1, escribí el nombre de mi PC y esta dirección en hosts. Resulta que siempre hay un dispositivo de red activo en el sistema, el PC está disponible para sí mismo por su nombre y esta dirección, los servicios de red se inician, los programas que se comunican con ellos mismos a través de tcp/ip - también.

Bueno, yo siempre desactivar ipv6 también.


Una vez más, no he cogido esto durante mucho tiempo, o siempre estoy conectado, o algo ha cambiado en alguna parte ...
 
Amba404:

Se acabaron las dudas, matemáticas.

y 10054 es presumiblemente un error de protocolo de red debido a la pérdida de conexión de red. El hecho de volver a enchufarlo no influye. El problema suele aparecer en muchos programas cuando se quita el enlace de la tarjeta de red (o se desconecta el router). En este caso (especialmente si se recibe la ip por dhcp), Windows empieza a pensar que ya no tiene un dispositivo de red funcionando, por lo que los servicios de red se fastidian. Al mismo tiempo, los programas que se ejecutan localmente a través de conexiones de red, por ejemplo a su dirección local 127.0.0.1, también se estropean.

Me ayudó lo siguiente: creé un dispositivo de red virtual (loopback, puedes buscarlo en Google), le asigné una dirección IP como 127.0.1.1, escribí el nombre de mi PC y esta dirección en hosts. Resulta que siempre hay un dispositivo de red activo en el sistema, el PC está disponible para sí mismo por su nombre y esta dirección, los servicios de red se inician, los programas que se comunican con ellos mismos a través de tcp/ip - también.

Bueno, yo siempre desactivar ipv6 también.


Una vez más, no he cogido esto durante mucho tiempo, o estoy siempre conectado, o algo ha cambiado en alguna parte ...

ah, gracias... Creo que ya lo tengo, desconecté sin querer la tarjeta de red, supongo que ahí le entró el pánico al windup y se paró el tester. ¡Gracias!

 

Por favor, adjunte la muestra MT5 EA para que podamos seguir sus ideas y probar su teoría.

 
Jacob James:

Por favor, adjunte la muestra MT5 EA para que podamos seguir sus ideas y probar su teoría.

El algoritmo no se distribuye en el dominio público, pero en el próximo artículo voy a mostrar cómo funciona utilizando el ejemplo de backtests.

 

Saludos.

Algunas reflexiones y sus resultados. Un poco largo.

Hay dos enfoques para analizar las desviaciones de los bloques: el gráfico es un paseo aleatorio - utilizamos funciones estadísticas (sobre factoriales, etc.) o el gráfico es un movimiento nada aleatorio - utilizamos datos estadísticos sobre movimientos pasados. Si lleva tiempo siguiendo la formación del gráfico de bloques, probablemente se habrá dado cuenta de que el gráfico depende del punto inicial de construcción. Si construimos el gráfico en cada apertura de vela, obtendremos un gráfico ligeramente diferente en la vela N que en la N+1. Por lo tanto, hay dos opciones para generar datos estadísticos sobre bloques pasados: también en cada apertura de vela o periódicamente, por ejemplo, una vez por (hora/día/semana), pero al mismo tiempo el gráfico de bloques debe trazarse desde el mismo punto cero. El enfoque con el recálculo de todo en cada barra es posible, pero es muy lento.

Me desesperé con esta opción para recoger/probar algo en el probador, y probé todas las conjeturas o parámetros óptimos en demo, online, controlando los resultados por el gráfico Equity/Balance online también. Debo decir que en esos periodos cortos (el último desde el 21/01 hasta la hora actual) el algoritmo (bueno, tal y como yo lo entendí e implementé) es bastante estable. Abrí, por cierto, no en cada barra en una señal, pero en una nueva señal (es decir, había una señal de compra en el bloque H 150p, compré, el siguiente se abrió en Buy H=165, y que si entra en negativo. Dado que con el desarrollo positivo el desequilibrio en la deambulación disminuye, respectivamente, y la señal desaparece), Sólo una cuenta demo de 8, con una configuración muy agresiva, con un saldo de $ 1000 y apalancamiento 1:1000 utilizado 48 pares de divisas, metales, 2 petróleo, sin control de cobertura en divisas ("cobertura") fue a stopout - cuando usted compra USDJPY, no se puede comprar USDCAD, pero se puede comprar EURUSD, etc en todo el conjunto de símbolos, el artículo tiene), en el acuerdo asignado $ 10, lote adaptable, depende del tamaño del bloque, salir sólo en el beneficio acumulado en la suma de las transacciones en el símbolo o en la suma de las ganancias en todos los símbolos abiertos.

Estable, sí, pero los drawdowns son significativos. Cuando nos fuimos "en la dirección equivocada" y seguir construyendo la posición, estando en el menos, es comprensible. Pero los ajustes menos agresivos no mataron a las otras cuentas, sí.

Volviendo a la forma de calcular los bloques. Ahora utilizo la siguiente variante. Tomamos un punto de referencia - el cierre del viernes anterior. A partir de él construimos (¡1 vez!) en el pasado conjuntos de bloques con alturas como en el artículo (*1.1). Tomé (iATR(sy, PERIOD_M1, 1440) X 5) del punto inicial como la altura inicial. Inmediatamente construimos conjuntos con longitud StepMax+MAX_STAT (por ejemplo, 48+1000), y calculamos la distribución de frecuencias de carrera, etc. para cada longitud en bloques (que sea de 24 a 48). A continuación, en cada nueva barra completamos los conjuntos de avance, buscamos una señal para cada H en el rango de longitudes (por ejemplo) [24;48] bloques, nos guiamos por las estadísticas calculadas previamente, elegimos una adecuada, tomamos la decisión de abrir una nueva, cerrar/actualizar una antigua, etc.... Este enfoque proporciona un aumento significativo de la velocidad de cálculo y, en mi opinión, no difiere mucho del propuesto en el artículo (cálculo "desde cero" en cada barra). Al mismo tiempo, aparecen algunas posibilidades adicionales. En particular, si los niveles no cambian durante la semana, entonces si hay una señal para H=180p (por ejemplo), puede colocar una rejilla de órdenes en la dirección esperada del movimiento....

Además. Este enfoque permitió no utilizar estadísticas puras, sino medir distribuciones y expectativas específicas sobre un símbolo y un tamaño de bloque concretos. Esto mejoró ligeramente los resultados en comparación con el "vagabundeo puro". Al mismo tiempo, recopilamos datos sobre la longitud de vagabundeo modulo (también en statfunctions utilicé la longitud de movimiento modulo, y es comprensible que el paseo aleatorio, en general, simétrica alrededor de cero). Debo señalar por separado que el tamaño de la muestra de 1000 unidades puede ser llamado "estadísticamente fiable" más bien condicional, pero ese no es el punto.

Pues bien, luego intenté recoger la distribución de longitudes kilométricas en bloques teniendo en cuenta su signo (arriba o abajo). Y los resultados empeoraron. Inesperadamente.

Lo comprobé en el conjunto de símbolos "28 mayores" y en conjuntos para cada mayor (*AUD*, etc.). Esto ya está en MT5. He comprobado diferentes períodos, los parámetros de construcción de bloques, diversos matices de entrada-salida....

La conclusión general (según los resultados disponibles) es que cuando se tiene en cuenta la dirección de la longitud de los movimientos en bloques, la eficiencia del sistema disminuye. Si alguien puede explicarlo, estaré encantado de saber qué y cómo. Además, si alguien tiene una experiencia similar, pero el resultado opuesto, estaré encantado de discutir y comparar.

 
Amba404:

Saludos.

Algunas reflexiones y sus resultados. Es un poco largo.

Hay dos enfoques para analizar las desviaciones de los bloques: el gráfico es un paseo aleatorio - utilizamos funciones estadísticas (sobre factoriales, etc.) o el gráfico es un movimiento nada aleatorio - utilizamos datos estadísticos sobre movimientos pasados. Si lleva tiempo siguiendo la formación del gráfico de bloques, probablemente se habrá dado cuenta de que el gráfico depende del punto inicial de construcción. Si construimos el gráfico en cada apertura de vela, obtendremos un gráfico ligeramente diferente en la vela N que en la N+1. Por lo tanto, hay dos opciones para generar datos estadísticos sobre bloques pasados: también en cada apertura de vela o periódicamente, por ejemplo, una vez por (hora/día/semana), pero al mismo tiempo el gráfico de bloques debe trazarse desde el mismo punto cero. El enfoque con recálculo de todo y de nuevo en cada barra es posible, pero es muy lento.

Me desesperé con esta opción de recoger/probar algo en el tester, y probé todas las conjeturas o parámetros óptimos en demo, online, controlando los resultados por el gráfico de Equity/Balance online también. Debo decir que en esos periodos cortos (el último desde el 21/01 hasta la hora actual) el algoritmo (bueno, tal y como yo lo entendí e implementé) es bastante estable. Abrí, por cierto, no en cada barra en una señal, pero en una nueva señal (es decir, había una señal de compra en el bloque H 150p, compré, el siguiente se abrió en Buy H=165, y que si entra en negativo. Dado que con el desarrollo positivo el desequilibrio en la deambulación disminuye, respectivamente, y la señal desaparece), Sólo una cuenta demo de 8, con una configuración muy agresiva, con un saldo de $ 1000 y apalancamiento 1:1000 utilizado 48 pares de divisas, metales, 2 petróleo, sin control de cobertura en divisas ("cobertura") fue a stopout - cuando usted compra USDJPY, no se puede comprar USDCAD, pero se puede comprar EURUSD, etc en todo el conjunto de símbolos, el artículo tiene), en el acuerdo asignado $ 10, lote adaptable, depende del tamaño del bloque, salir sólo en el beneficio acumulado en la suma de las transacciones en el símbolo o en la suma de las ganancias en todos los símbolos abiertos.

Estable, sí, pero los drawdowns son significativos. Cuando nos fuimos "en la dirección equivocada" y seguir construyendo la posición, estando en el menos, es comprensible. Pero los ajustes menos agresivos no mataron a las otras cuentas, sí.

Volviendo a la forma de calcular los bloques. Ahora utilizo la siguiente variante. Tomamos un punto de referencia - el cierre del viernes anterior. A partir de él construimos (¡1 vez!) en el pasado conjuntos de bloques con alturas como en el artículo (*1.1). Tomé (iATR(sy, PERIOD_M1, 1440) X 5) del punto inicial como la altura inicial. Inmediatamente construimos conjuntos con longitud StepMax+MAX_STAT (por ejemplo, 48+1000), y calculamos la distribución de frecuencias de carrera, etc. para cada longitud en bloques (que sea de 24 a 48). A continuación, en cada nueva barra completamos los conjuntos de avance, buscamos una señal para cada H en el rango de longitudes (por ejemplo) [24;48] bloques, nos guiamos por las estadísticas calculadas previamente, elegimos una adecuada, tomamos la decisión de abrir una nueva, cerrar/actualizar una antigua, etc.... Este enfoque proporciona un aumento significativo de la velocidad de cálculo y, en mi opinión, no difiere mucho del propuesto en el artículo (cálculo "desde cero" en cada barra). Al mismo tiempo, aparecen algunas posibilidades adicionales. En particular, si los niveles no cambian durante la semana, entonces si hay una señal para H=180p (por ejemplo), puede colocar una rejilla de órdenes en la dirección esperada del movimiento....

Además. Este enfoque permitió no utilizar estadísticas puras, sino medir distribuciones y expectativas específicas sobre un símbolo y un tamaño de bloque concretos. Esto mejoró ligeramente los resultados en comparación con el "vagabundeo puro". Al mismo tiempo, recopilamos datos sobre la longitud de vagabundeo modulo (también en statfunctions utilicé la longitud de movimiento modulo, y es comprensible que el paseo aleatorio, en general, simétrica alrededor de cero). Me gustaría señalar por separado que el tamaño de la muestra de 1000 unidades puede ser llamado "estadísticamente fiable" más bien condicional, pero ese no es el punto.

Pues bien, luego intenté recoger la distribución de longitudes kilométricas en bloques teniendo en cuenta su signo (arriba o abajo). Y los resultados empeoraron. Inesperadamente.

Lo comprobé en el conjunto de símbolos "28 majors" y en conjuntos para cada major (*AUD*, etc.). Esto ya está en MT5. He comprobado diferentes períodos, los parámetros de construcción de bloques, diversos matices de entrada-salida.....

La conclusión general (según los resultados disponibles) es que cuando se tiene en cuenta la dirección de la longitud de los movimientos en bloques, la eficiencia del sistema disminuye. Si alguien puede explicarlo, estaré encantado de saber qué y cómo. Además, si alguien tiene una experiencia similar, pero el resultado opuesto, estaré encantado de discutir y comparar.

Sí, el gráfico depende del punto inicial de la construcción, esto se hace a propósito por dos razones, para que el algoritmo, a pesar de los errores de redondeo de precios con la ayuda de bloques, mejor encontró la escala máxima y la segunda razón, para evitar el ajuste a la historia. Cuando el gráfico cambia en función del punto de partida, se puede evaluar con mayor precisión la calidad del propio algoritmo.

En el probador he probado y se mostrará en el próximo artículo muchas pruebas de cómo funciona. En demo es largo y no informativo. Una prueba de 1 año en 28 pares de divisas me lleva 15 días (Ryzen 3700). En la forma en que se describe, los rendimientos no son grandes, pero pasa backtests muy constantemente. Ahora estoy mejorando el algoritmo.

Hay una peculiaridad acerca de las características estadísticas de la herramienta. Se pueden tomar y el porcentaje de rendimiento superior se puede ajustar en base a ellos, pero es necesario utilizar grandes valores de muestra para evaluar el carácter del instrumento en su conjunto. Las desviaciones locales pueden captarse, pero con otros fines. Cuando hice la prueba, los parámetros de sobreponderación separados para posiciones largas y cortas funcionan bien en acciones, es decir, cuando se tiene en cuenta la asimetría, se vuelve mejor, también mostraré esto brevemente en el próximo artículo.

El tamaño inicial del bloque también debe ajustarse a la situación actual del mercado. Yo lo hice inicialmente a través de la volatilidad, pero ahora lo estoy reelaborando para tener en cuenta las peculiaridades del mercado.

Pero la idea es hacer primero un algoritmo básico y luego cubrirlo con estadísticas. Las estadísticas no se pueden medir así como así, hay que tener en cuenta que medimos características estadísticas en una ventana grande y si se desvían del paseo aleatorio, tenderán a él en el futuro, hay que usar parámetros subóptimos de antemano. Y la estadística no debe estar desnuda, pero teniendo en cuenta la teoría, no escribí sobre la teoría porque no la probé, y no me gusta escribir lo que no está probado.

En general, el algoritmo es un tocho y en esta etapa su tarea no es drenar y ganar algo.

 

GRAN trabajo,


¡Gracias!