Autoengaño del comerciante: desconfianza en los delanteros. - página 2

 
Youri Tarshecki:

Cualquiera puede hacer la experiencia más sencilla: obtener resultados de negociación en una cuenta demo y ejecutar el mismo sistema con la misma configuración en su probador durante el mismo período. Es decir, conseguir un delantero real y uno virtual de prueba y compararlo.

Esta no es una comparación válida, ya que el probador de estrategias utiliza sólo 4 cotizaciones para la apertura, cierre, máximo y mínimo de la barra. Como regla, los Asesores Expertos trabajan con todas las cotizaciones intra-barra en cuentas demo o reales.

Youri Tarshecki:

De hecho, la simulación del comportamiento del sistema ejecutándolo en un periodo histórico no optimizado es la forma más eficiente de análisis para un operador. La comprobación de la realidad es, por supuesto, la forma más fiable, pero desgraciadamente hay que vivir eternamente para pasar por todas las variantes en las cuentas reales. Es decir, modelar como hacia el pasado es la forma más eficaz de investigación. Pero entonces, ¿por qué los delanteros están completamente ausentes de los debates? ¿Quizás sea porque no existe un software práctico para procesar y analizar los resultados de múltiples pruebas, tanto hacia atrás como hacia delante?

Estoy de acuerdo contigo. Parece que haces mucho de eso. Por favor, dígame qué herramienta financiera prefiere para dicho análisis. Tengo un EA que se dispara sólo en la apertura de la barra y quiero probarlo con este tipo de modelado.

 

 Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

Lo que quiero decir es que, independientemente de la herramienta, la metodología de las pruebas debe incluir los avances. Pero la gente los ignora en masa. Los que los utilizan, por regla general, los estiman a ojo. En otras palabras, no hay programas que introduzcan normas objetivas en la evaluación de los delanteros.
 
Youri Tarshecki:
Lo que quiero decir es que, independientemente de la herramienta, la metodología de las pruebas debe incluir los avances. Pero la gente los ignora en masa. Los que los utilizan, por regla general, los estiman a ojo. Es decir, no hay programas que introduzcan normas objetivas en la evaluación de los delanteros.
Los diferentes instrumentos tienen diferentes propiedades de comportamiento en el mercado. Incluyendo la "inercia de la rentabilidad" en la prueba de avance. Por eso quería preguntarle: ¿ha encontrado un instrumento (o un tipo de instrumento) que dé el mejor resultado en sus experimentos, en igualdad de condiciones?
 
Youri Tarshecki:
Lo que quiero decir es que, independientemente del instrumento, la metodología de las pruebas debe incluir los avances. Pero la gente los ignora en masa. Los que los utilizan, por regla general, estiman a ojo. Es decir, no hay programas que introduzcan normas objetivas en la fijación de precios a plazo.

Ignorando masivamente las pruebas de avance. La razón es sencilla: pasar con éxito hacia adelante sólo indica que el mercado en la sección de avance es similar a la sección de optimización. Strategy Tester se ajusta perfectamente a la dinámica actual del mercado. Como resultado, después de dividir el segmento de optimización en 12 partes de avance obtendremos 12 conjuntos de parámetros no relacionados entre sí, cada uno de los cuales arrojará 11 de las 12 secciones de tiempo. En cambio, es mejor encontrar un conjunto de parámetros, aunque promediado, para una larga historia, que precipitarse de un conjunto de parámetros a otro.

El mercado no cambia, lo que ocurre es que cada sistema de negociación capta sólo un estado concreto del mercado, y el mercado tiene muchos de estos estados.

 
Es mejor no confiar en los delanteros que confiar en ellos. Y si lo haces, es sólo si utilizas el WFA
 
Vasiliy Sokolov:

Ignorando masivamente las pruebas de avance. La razón es sencilla: pasar con éxito hacia adelante sólo indica que el mercado en la sección de avance es similar a la sección de optimización. Strategy Tester se ajusta perfectamente a la dinámica actual del mercado. Como resultado, después de dividir el segmento de optimización en 12 partes de avance, obtendremos 12 conjuntos de parámetros no relacionados, cada uno de los cuales arrojará 11 de las 12 secciones de tiempo. En cambio, es mejor encontrar un conjunto de parámetros, aunque promediado, para una larga historia, que precipitarse de un conjunto de parámetros a otro.

El mercado no cambia, lo que ocurre es que cada sistema de negociación sólo capta un estado concreto del mercado, y hay muchos de estos estados en el mercado.

No se puede dividir la "sección optimizada en 12 partes delanteras" porque un delantero es por definición una sección no optimizada. Es decir, usted está contrastando el método de comprobación a posteriori en sí mismo y simplemente la noción de promediación.

El objetivo de un forward es averiguar cómo se comporta el asesor en una situación de futuro no optimizada. Lo que comentas tiene más que ver con la búsqueda del mejor trozo de historia para su optimización. Es decir, si cree que el historial largo funciona mejor, no hay problema, cargue el probador con 2 años Back - 1 año Forward. Y luego 2 meses atrás -1 mes adelante 12 veces. Si el rendimiento futuro del primer enfoque es mejor que la suma del rendimiento futuro del segundo enfoque, entonces el primer enfoque es mejor, y viceversa. El mismo hecho de que optimices el Asesor Experto sugiere que crees en la inercia del mercado, pero simplemente crees que se manifiesta en un periodo de tiempo significativamente mayor. Pero no es que se esté optimizando sobre TODA la historia disponible de 30 años, por lo que también se tiene en cuenta la volatilidad del mercado. Es una eterna contradicción de constancia y variabilidad, pero al comparar los delanteros de diferentes períodos de prueba se puede entender con más precisión cómo se resuelve esta contradicción en la realidad. Hasta que no lo haya comprobado, ¿su afirmación es puramente intuitiva o simplemente habitual?

 
Youri Tarshecki:
Supongamos que utilizo OnTesterPass en el código de un EA que estoy probando. ¿Cómo sabrá que se trata de una ejecución prospectiva y no de una ejecución ordinaria de optimización de variables? Y aunque lo consiga, serán archivos diferentes, y necesitamos una tabla para muchos forwards de un EA . Y luego otra tabla, y otra para otro, y todo ello en un solo archivo.

Por lo que recuerdo, esto es lo que hice - guardé el tiempo de la primera operación en el marco - este es el "balance". Por lo tanto, al registrar los parámetros e indicadores de todas las ejecuciones en un archivo, es fácil distinguir el backtest del forward por dos fechas distintivas. He guardado todas las ejecuciones exactamente en un archivo (abierto en OnTesterInit y cerrado en OnTesterDeinit).

Los detalles estaban aquí:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Trabajar con marcos

Stanislav Korotky, 2014.11.07 15:23

En el manejador OnTester puedes añadir tus propios marcos con datos usando FrameAdd - lo importante es que todo esto se hace en el agente de pruebas, que puede ser remoto (por ejemplo, en la nube).

OnTesterInit, OnTesterDeinit, OnTesterPass son llamados en la terminal donde se inicia el proceso de prueba/optimización y desde donde se distribuyen las tareas a los agentes. Dentro de OnTesterPass se puede acceder a todos aquellos marcos que se han añadido a los agentes de prueba utilizando FrameAdd, más o menos así (sacado del viejo EA, puede que no compile):

void OnTesterPass()
{
  string  name;
  ulong   pass;
  long    id;
  double  value, data[];
  string  params[];
  uint    par_count;
  string  output = "";
  ushort eq = StringGetCharacter("=", 0);

  while(FrameNext(pass, name, id, value, data)) // data - массив положенный во фрейм с помощью FrameAdd
  {
    output = pass + ";" + (data[0]);
    
    for(int i = 1; i < 10; i++) output += ";" + data[i];
    
    if(FrameInputs(pass, params, par_count))
    {
      for(uint i = 0; i < par_count; i++)
      {
        string pair[];
        int n = StringSplit(params[i], eq, pair);
        if(n == 2)
        {
          long pvalue, pstart, pstep, pstop;
          bool enabled = false;
          if(ParameterGetRange(pair[0], enabled, pvalue, pstart, pstep, pstop))
          {
            if(enabled)
            {
              output += ";" + pair[1];
            }
          }
        }
      }
    }
    
    output += "\n";
    // TODO: FileWriteString(fhandle, output);
  }
}

y aquí:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Trabajar con marcos

Stanislav Korotky, 2014.11.07 20:15

Deberías añadir cuadros, como he escrito arriba, durante la carrera. En teoría, si el EA tiene parámetros, debería obtenerlos dentro del marco junto con sus datos, es decir, los params no deberían estar vacíos. Aquí hay más código del mismo Asesor Experto.

int fhandle = -1;

void OnTesterInit()
{
  // готовим каким-то образом файл, как нам нужно
  fhandle = FileOpen("tester-" + _Symbol + GetTickCount() + ".csv", FILE_WRITE|FILE_CSV|FILE_ANSI);
  FileWriteString(fhandle, "Pass;First;LR;Profit;Expected Payoff;Profit Factor;Recovery Factor;Sharpe Ratio;Custom;Equity DD %;Trades\n");
}

void OnTesterDeinit()
{
  FileClose(fhandle);
}

double OnTester()
{
  // собираем данные по эквити
  double LR = CountChannels(Equity);
  
  // конструируем собственный критерий оптимизации
  double result = MathAbs(LR) * TesterStatistics(STAT_PROFIT) * TesterStatistics(STAT_PROFIT_FACTOR) * TesterStatistics(STAT_TRADES) * (100 - TesterStatistics(STAT_EQUITY_DDREL_PERCENT));

  // рассчитываем еще какие-то данные
  //...

  // складываем все в массив
  double data[10];
  // data[0] = first;
  // data[1] = LR;
  // data[2] = TesterStatistics(STAT_PROFIT);
  // ...
  // data[7] = result;
  // ...
  // data[9] = ...

  // отправляем данные в терминал
  if(!FrameAdd(MQL5InfoString(MQL5_PROGRAM_NAME), 1, LR, data))
    Print("Frame add error: ", GetLastError());
  else
    Print("Frame added, Ok");

  return(result);
}

 

Personalmente, creo que es más lógico comprobar los resultados en el pasado que en el futuro, porque los cambios más recientes del mercado son los más significativos.

Durante 15 minutos optimicé, eliminé los resultados innecesarios y guardé los 5-10 restantes en el conjunto y los ejecuté en el historial hasta el momento de la optimización, y elegí los mejores por el gráfico.

También estaba pensando en el proceso de automatización de estas acciones...

Una solución sencilla parece ser simplemente poner restricciones a la negociación en el rango de tiempo que se puede cambiar en el propio EA, como resultado obtendremos dos ejecuciones virtuales en el historial para una ejecución real, que se puede comparar fácilmente en excel.

 
-Aleks-:

Personalmente, creo que es más lógico comprobar los resultados en el pasado que en el futuro, porque los cambios más recientes del mercado son los más significativos.

Durante 15 minutos optimicé, eliminé los resultados innecesarios y guardé los 5-10 restantes en el conjunto y los ejecuté en el historial hasta el momento de la optimización, y elegí los mejores por el gráfico.

También estaba pensando en el proceso de automatización de estas acciones...

Una solución sencilla parece ser simplemente poner restricciones a la negociación en el rango de tiempo que se puede cambiar en el propio EA, como resultado obtendremos dos ejecuciones virtuales en el historial para una ejecución real, que se puede comparar fácilmente en excel.

Centrarse en el ÚLTIMO cambio es otro tipo de autoengaño. Naturalmente, es necesario utilizar una configuración nueva para el comercio. Pero si se limita a optimizar para el periodo más reciente, nunca podrá entender si su Asesor Experto es resistente a los cambios futuros. Mira la segunda foto de mi post - puedes verlo claramente. El avance es una comparación del pasado con el pasado. Su método no tiene nada que ver con el análisis prospectivo. Prácticamente cualquier Asesor Experto puede ser optimizado para un buen backtest. El patrón aquí es el siguiente: cuanto más se optimizan los ajustes, más bonito es el backtest. Y el más feo es el delantero. Los delanteros ayudan a encontrar exactamente la lógica que utiliza más patrones a largo plazo, y por lo tanto es más prometedora.
 
El avance es un control útil, pero no una panacea. Es posible seleccionar una variante de los parámetros en los resultados de la optimización que proporcione un buen avance, pero no garantiza buenos resultados en lo real.