Optimización y pruebas fuera de la muestra. - página 6

 
Mathemat:
Vita, buen punto. Pero yo diría que la capacidad de generalización no es sólo una propiedad de la EA, sino también una propiedad del algoritmo de aprendizaje, que debe identificar correctamente esta capacidad. El algoritmo metaquot no revela esta capacidad, sino que la destruye mediante la sobreoptimización.

Un algoritmo de metacitas no capta esta capacidad, sino que la sobreoptimización se lo come. -- Me gustaría ver un ejemplo.
 

Los ejemplos abundan. No lo tenía claro. Me refería a que un uso poco meditado del optimizador a lo "¡uno, dos, tres!" lleva a un optimismo excesivo y poco razonable de los grailistas. Por ejemplo, el último ejemplo - "¿Se mueve el Forex en nuestra contra? O tal vez no lo entiendo'. O "Asesor de tendencias (experto)". Estoy esperando la respuesta". Todo esto son trucos.

Acerca de "destruir de raíz": la probabilidad de que la curva de ajuste marginal en un intervalo de datos conduzca a una rentabilidad sostenida en el intervalo real, fuera de la muestra, es extremadamente baja. El óptimo se encuentra en algún punto intermedio entre la superrentabilidad y el punto de equilibrio, que es inherente al algoritmo de entrenamiento NS.

Dime por favor, Vita, ¿nuestro optimizador genético en su forma pura proporciona alguna garantía de rentabilidad de un Asesor Experto en el futuro - incluso si es super-duper rentable en las pruebas/optimización? No hablo del probador, el probador está bien.

P.D. Por fin he encontrado una de las primeras menciones al optimizador genético de MQ: https://www.mql5.com/ru/forum/50805. Ver el post de Filin y la respuesta de Slawa. La respuesta muestra que el optimizador es útil sólo para la estimación aproximada de las capacidades de un Asesor Experto y nada más. La mayoría de los grailistas lo utilizan como primera y única herramienta de prueba "total" de los Asesores Expertos. Se trata de un enfoque amateur que conduce a falsas ilusiones. De hecho, esta herramienta, pensada sólo para una estimación aproximada, es, por la ley de la mezquindad, buena sólo para desechar Asesores Expertos obviamente malos en caso de resultados obviamente negativos - pero no para hacer conclusiones positivas sobre el valor del Asesor Experto...

 

Mathemat писал (а):

Los ejemplos abundan. No lo tenía claro. Me refería a que un uso poco meditado del optimizador a lo "¡uno, dos, tres!" lleva a un optimismo excesivo y poco razonable de los grailistas. Por ejemplo, el último ejemplo - "¿Se mueve el Forex en nuestra contra? O tal vez no lo entiendo'. O "Asesor de tendencias (experto)". Estoy esperando la respuesta". Todo esto son retoques.

--> :) Lo tengo. Sin embargo, estoy de acuerdo, las metacomillas no pueden ser responsables de la "aplicación precipitada del optimizador". Estoy a favor del pensamiento humano y de la optimización de los optimizadores. Yo, por ejemplo, conozco la ley según la cual opera mi Asesor Experto. El optimizador me da un montón de conjuntos de parámetros rentables. Cómo los obtenga - de forma "contundente" con la ayuda de la genética o de forma "inteligente" con la ayuda de una red neuronal - me es indiferente, porque en cualquier caso miro críticamente (deliberadamente, por así decirlo) los resultados y separo inmediatamente las moscas de las chuletas, porque soy el único que conoce exactamente la ley por la que opera mi Asesor Experto.

--> Imaginemos que tenemos un optimizador "inteligente" que puede decir con precisión: "Este es el conjunto óptimo de parámetros de funcionamiento. Lo juro, ¡no hay ajuste!" o "No, chicos, para este EA no puedo escoger parámetros de trabajo, y no sólo ajustarme a la curva." ¡Esos serían los tiempos! ¡Un optimizador que certifique las estrategias implementadas en los EAs! ¡Acceso libre desde las meta-cotizaciones! ¡Genial! Realmente quiero uno.

Acerca de "matar de raíz": la probabilidad de que el ajuste de curvas marginal en un intervalo de datos conduzca a una rentabilidad sostenida en el intervalo real, fuera de la muestra, es extremadamente baja. El óptimo está en algún punto intermedio entre el punto de equilibrio y la superrentabilidad, lo que es inherente al algoritmo de aprendizaje NS.

--> El "óptimo está en algún lugar en el medio" es una sensación intuitiva que resulta del hecho de que los "graales" totalmente optimizados tienen garantizado el fracaso en el futuro, por lo que uno no debe optimizar hasta el final, o que "la verdad está en algún lugar cercano" o algo así. Este sentimiento no tiene nada que ver con la realidad. La regularidad puede optimizarse hasta el límite y sólo ahí se revelará en todo su esplendor. Por mucho que se retuerza, no servirá de nada, pero se puede desarrollar la sensación de que lo óptimo está en algún punto intermedio.

Por favor, dime, Vita, ¿nuestro optimizador genético en su forma pura proporciona alguna garantía de rentabilidad de un Asesor Experto en el futuro - incluso en el caso de la rentabilidad super-duper en la parte de pruebas / optimización? No hablo del probador, el probador está bien.

--> No lo estoy, y creo que es inapropiado exigir tales garantías a los resultados del optimizador. Ver arriba lo de "inteligente", dando garantías, optimizador.

P.D. Por fin he encontrado una de las primeras menciones al optimizador genético de MQ:

https://www.mql5.com/ru/forum/50805

. Ver el post de Filin y la respuesta de Slawa. De la respuesta se desprende que el optimizador sólo es útil para una estimación aproximada de las capacidades de un Asesor Experto y nada más. La mayoría de los grailistas lo utilizan como primera y única herramienta de prueba "total" de los Asesores Expertos. Se trata de un enfoque amateur que conduce a falsas ilusiones. De hecho, una herramienta de este tipo destinada sólo a la estimación aproximada es, por la ley de la mezquindad, lo suficientemente buena sólo para desechar Asesores Expertos obviamente malos en caso de un resultado claramente negativo - pero no para hacer una conclusión positiva sobre el valor del Asesor Experto...

-->"El optimizador sólo es útil para la estimación aproximada de las capacidades del EA" - de nuevo, la afirmación al optimizador que es incapaz de estimar con precisión las capacidades de un EA, pero, de hecho, para certificar las estrategias de un EA. Sólo queda crear un robot que genere estrategias, alimentarlas al optimizador, obtener una opinión sobre su idoneidad, e ir al corte garantizado de dinero. ¿Qué te parece esta ilusión?


 

La ilusión es grande, pero sólo una ilusión. Pero es posible mejorar drásticamente la aplicación de lo que tenemos (probador/optimizador) con los medios disponibles en MQL4. De lo contrario, seguiremos viendo superchopes cada tres días con resultados sólo ajustados, simulando ser pruebas normales...

Y no tengo ninguna queja sobre las metacitas: el optimizador hace exactamente aquello para lo que fue diseñado, es decir, optimización genética en el espacio de parámetros del Asesor Experto, y de hecho hace lo mismo.

Tengo una sugerencia para el probador: sería bueno tener una función estándar como test() en la que se especificaran claramente todos los parámetros necesarios, incluido el nombre del archivo de historial en el que se prueba todo. La vinculación rígida de un nombre de archivo con su contenido no es una solución suficientemente flexible.

 
leonid553:

Buenas tardes a todos.

Después de optimizar un EA, a menudo tenemos que nerd fuera de la muestra más de una docena de conjuntos de parámetros sugeridos por el optimizador.

Tengo una idea de optimizar los Asesores Expertos fuera de la muestra. Supongamos que "cargamos" al Asesor Experto con la optimización de una serie de parámetros. Fijamos una fecha. Por ejemplo, a partir del 1 de enero. 2006 hasta el 1 de enero de 2007.

Hemos recibido varios miles de Asesores Expertos. Después, guardamos la página con los RESULTADOS DE LA OPTIMIZACIÓN como un archivo separado. A continuación, fijamos el siguiente periodo histórico para la optimización, es decir, añadimos un mes o dos, o los que necesitemos.

En nuestro caso, fijamos por ejemplo a partir del 1 de enero. 2007 a 1 de junio de 2007. Y de nuevo utilizamos la optimización. Para ser más exactos, no será una optimización del todo. El optimizador no debe tomar los parámetros en las PROPIEDADES DEL EXPERTO, sino volver a seleccionar los conjuntos de parámetros del archivo que guardamos después de la primera optimización. Después de esta segunda optimización, sólo nos quedan los vAriens que han dado beneficios fuera de la muestra.

El resultado, en el mejor de los casos, es que obtenemos los "parámetros ideales" para trabajar y probar en línea más adelante.

Creo que esto será una adición útil al probador de mt4. Probablemente, y lo más probable, es que ya esté implementado por alguien en algún lugar. Si alguien lo sabe, por favor, comparta el enlace.

Yo, debido a mis modestos conocimientos, no consigo averiguar cómo llevar la idea a la práctica.

Seguro que ya existe una aplicación práctica de este algoritmo... En el foro sólo he encontrado sus derivados... Por ejemplo, "Cómo aplicar su criterio de optimización"...

Quiero compartir mi solución a este problema....

Vamos a preparar un EA... Añadamos parámetros externos...

extern int    Counter      = 1;        // Счетчик подсчета количества оптимизаций. Если равен 0, то обычная оптимизация...
extern string Filename     = "";       // Имя файла с оптимизируемыми параметрами

int    FilePtr=0;                      //  Положение файлового указателя

En la función init() inserte el siguiente bloque....

   if(IsOptimization() && Counter>0)
   {
// Для ускорения процесса будем поддерживать сквозной указатель файловой позиции
// с помощью глобальной переменной FilePtr 
// На первом проходе инициализируем её нулём.
      if (GlobalVariableCheck("FilePtr")==false || Counter == 1) 
      {
         FilePtr = 0; 
         GlobalVariableSet("FilePtr",0); 
      } 
      else 
      {
         FilePtr = GlobalVariableGet("FilePtr"); 
      }

      int handle=FileOpen(Filename,FILE_CSV|FILE_READ,';');
      FileSeek(handle,FilePtr, SEEK_SET);
      Parametr1=StrToInteger(FileReadString(handle));
      Parametr2=StrToInteger(FileReadString(handle));
      Parametr3=StrToInteger(FileReadString(handle));

      FilePtr = FileTell(handle); 
      GlobalVariableSet("FilePtr",FilePtr);
      
      FileClose(handle); 
   }

Parametr1, Parametr2, Parametr3 - parámetros externos, que deben ser optimizados....

Eso es todo...

 
kharko:

Seguro que ya existe una aplicación práctica de este algoritmo... En el foro sólo he encontrado sus derivados... Por ejemplo, "Cómo aplicar su criterio de optimización"...

Quiero compartir mi solución a este problema....

Eche un vistazo a los artículos de Nikolay Kositsin, por ejemplo, "Expertos basados en sistemas de trading populares y alquimia de optimización de robots de trading (continuación)".

 

¿Cómo funciona?

En el intervalo de tiempo A ejecutamos la optimización habitual de los parámetros (Counter=0) ...

Transferimos los resultados a Excel... Ahora nuestra tarea es crear un archivo con los parámetros optimizados y guardarlo en el directorio ...\Nde los archivos de prueba

Seleccione las columnas con nuestros parámetros en Excel, cópielas y péguelas en Word o en el Bloc de notas como texto sin formato...

En Wordboard o Notepad convierta cada línea en la forma: valor1;valor2;valor3.

Guárdalo en el directorio ...\Nde los archivos de prueba

Si no eres demasiado vago, puedes escribir una macro para realizar las operaciones anteriores sobre la marcha...

Ahora podemos ejecutar la optimización en la franja horaria B... Ahora el parámetro de optimización será Counter... Especifique el valor máximo (número de filas en la lista)...

Ya está, el problema está resuelto... Buena suerte...

 

He leído este artículo... Creo que mi variante es más sencilla y conveniente.... y lo más importante es que es universal...

La aplicación anterior coincide totalmente con el deseo del autor de la rama...

 
Un ejemplo real de optimización... Ver anexo
Archivos adjuntos:
sample.zip  1201 kb
 

Gracias, kharko por la solución. ¡Intentaré utilizarlo!