Librerías: MultiTester - página 17

 

Miré a mi propia, de hecho para algunos símbolos no aparecieron archivos con historial de garrapatas, miró a través del registro y ahí está:

2020.02.12 16:02:30.144 Core 1  NZDUSD : real ticks begin from 2017.01.02 00:00:00

Ahora entiendo, el resto era una simulación.


Por cierto MultiTester no cambia el símbolo en el terminal minimizado, es mejor añadir la apertura de una ventana antes de iniciar una nueva pasada. Por ahora he añadido tal función a fInit.

bool ActivateTerminalWindow(){
   HANDLE ChartWindow = (HANDLE)ChartGetInteger(0, CHART_WINDOW_HANDLE);
   if(ChartWindow){
      HANDLE TerminalWindow = GetParent(ChartWindow);
      TerminalWindow = GetParent(TerminalWindow);
      TerminalWindow = GetParent(TerminalWindow);
      if(TerminalWindow){
         ShowWindow(TerminalWindow, 3);
         return true;
      }
   }
   return false;
}
 
Evgenii Kuznetsov:

Por cierto MultiTester no cambia el símbolo en terminal minimizado, mejor añadir abrir una ventana antes de iniciar una nueva pasada.

No lo he comprobado, no lo he encontrado.

 
fxsaber:

Al final hice esto Formar un lote de tareas a partir de archivos ini y enviarlo para su ejecución.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Asesores Expertos: Validar

fxsaber, 2020.02.22 10:46 AM

Cuando necesito realizar muchas tareas diferentes de Tester, uso Validate.


1. Configuro una tarea en el Tester que quiero ejecutar.

2. 2. En la pestaña Configuración, pulso CTRL+C. Todos los ajustes aparecen en el portapapeles.

3. Utilizando CTRL+V, copio estos ajustes en un archivo ini, que coloco en la carpeta con las tareas.

4. Así es como creo el número necesario de tareas - archivos ini (cuatro tareas en la pantalla).


5. Al iniciar Validar, especifico el nombre de la carpeta donde se encuentran las tareas.


Eso es todo, ahora Validate con todos sus trucos ejecutará estas tareas.


Utilizo MultiTester-derivatives sólo en casos específicos, cuando necesito crear tareas a medida que las ejecuto.

Recomiendo usar Validate para ejecutar un lote de cualquier tarea ya hecha.

 

Por favor, comparta su experiencia sobre cómo hacer GA correctamente. Me encontré con una situación en la que GA encuentra sólo uno de los extremos locales requeridos.

Para un determinado TS/símbolo entiendo dónde buscar, así que hago GA en diferentes rangos. Pero en general, no está claro cómo proceder.

 
fxsaber:

Por favor, comparta su experiencia sobre cómo hacer GA correctamente. Me encontré con una situación cuando GA encuentra sólo uno de los extremos locales requeridos.

Para un determinado TS/símbolo entiendo dónde buscar, así que hago GA en diferentes rangos. Pero en general, no está claro cómo proceder.

Creo que había algo sobre el tema aquí - https://www.mql5.com/ru/forum/87536.

O llame al autor(@Andrey Dik).

Чемпионат Алгоритмов Оптимизации.
Чемпионат Алгоритмов Оптимизации.
  • 2016.06.09
  • www.mql5.com
Чемпионат алгоритмов оптимизации задуман как соревнование для людей ищущих, любознательных, для которых стоять на месте означает движение назад...
 
Andrey Khatimlianskii:

Creo que había algo sobre el tema aquí - https://www.mql5.com/ru/forum/87536

O llama al autor(@Andrey Dik).

Estoy haciendo preguntas en el contexto de la utilización de MT5-Tester. Por lo tanto, los algoritmos de optimización personalizados no son adecuados.

 
fxsaber:

Por favor, comparta su experiencia sobre cómo hacer GA correctamente. Me encontré con una situación cuando GA encuentra sólo uno de los extremos locales requeridos.

Para un determinado TS/símbolo entiendo dónde buscar, así que hago GA en diferentes rangos. Pero en general, no está claro cómo proceder.

Ahora dejo de probar si la reducción es grande

y para animar un poco el GA, hago esto:

#define  TESTER_STOP(ret) { EA_STOP = true; TesterStop(); return ret; }
double OnTester()
{
   srand((int)TimeCurrent());
// if(StartHour==20 && CountHours==22) return (-(rand() % 1000));// Uso esto si el AG empezó a converger alrededor de un máximo por tiempo de ejecución

   if(EA_STOP) return (-(rand() % 1000));                                                               // prueba fallida, interrumpida por una gran caída

   int o_count = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() < 2) o_count++;
   }
   if(o_count < 160) return (-(rand() % 1000));                                                         // busca al menos 160 acuerdos en seis meses

   return(AccountInfoDouble(ACCOUNT_BALANCE));
}


void OnTick()
{
   if(IS_OPTIMIZATION)
   {
      double balance = AccountInfoDouble(ACCOUNT_BALANCE);
      MaxBalance = fmax(MaxBalance, balance);
      if(MaxBalance - balance > 200) TESTER_STOP();                                                     // detener la prueba en una reducción de 200 dólares
   }


Este es el método que he estado probando durante la última semana, ahora estoy muy contento con GA.

 

Yo en mi optimizador repito GA hasta que por 4 veces no hay mejora en el último resultado. Puede llevar una docena de intentos o más. Normalmente obtengo buenos resultados. Aunque lleva mucho tiempo.

Cuando vuelvo a optimizar en las fechas actuales, puedo obtener un nuevo máximo local mejorado, y si no - parto del antiguo y lo refino para el nuevo mercado mediante una optimización lenta (elijo un grupo de variables interdependientes y optimizo iterativamente cada combinación por parejas).

Además, introduje micropenalizaciones (mutágeno adicional) en OnTester. En este caso, el AG realiza más pasadas debido a mutaciones más frecuentes y, como resultado, se encuentran nuevos máximos con más frecuencia.

// Micro penalizaciones para elegir un valor de parámetro menor cuando los resultados son iguales
res -= BP * 0.0001 / 200;       // Dividir por el rango de optimización (0...200)
 
Igor Makanu:

Voy a dejar de probar ahora si hay un gran drawdown.

y para animar un poco el GA, estoy haciendo esto:

Llevo una semana haciendo pruebas con este método, ahora estoy muy satisfecho con GA.

Lo hago aproximadamente de la misma manera. El control del drawdown es para una optimización más rápida, y el control del número de operaciones es para dirigir mejor el GA, filtrando la basura.

Pero esto no es suficiente.


ZY Es más barato.

TesterStatistics(STAT_TRADES)
 
Edgar Akhmadeev:

introdujo micropenalizaciones (mutágeno adicional) en OnTester. En este caso, el AG realiza más pasadas debido a mutaciones más frecuentes y, como resultado, se encuentran nuevos máximos más a menudo.

Por favor, aclárelo.