Librerías: MultiTester - página 9

 
fxsaber:

Ahora total libertad para automatizar el Comprobador.

Uno de los ejemplos de aplicación real (todo se hace automáticamente)

  1. Se toman todos los símbolos y se realizan los siguientes pasos para cada símbolo.
  2. Comienzo Optimización.
  3. Al final de la mejor pasada se toman los datos y a partir de ellos se forman (se establecen rangos de parámetros de entrada) varias tareas para la optimización.
  4. Se realizan todas las optimizaciones a partir del punto 3.
  5. Se toman los mejores pases de todas las optimizaciones del punto 4 y se guardan como conjuntos para la negociación de la cartera.


Resultó ser un escáner de mercado y ajustador de TS muy potente. No se necesitan fuentes de TC para estas manipulaciones.

 
// Ejemplo de carga de un Set-file en el Tester.
#property script_show_inputs

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132

input string inFileName = "SetFile.set"; // Fijar-archivo

string FileToString( const string FileName )
{
  ushort Buffer[];
  
  return(FileLoad(FileName, Buffer) ? ShortArrayToString(Buffer) : NULL);
}

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
Lo mismo ocurre con los archivos ini del comprobador.
 
Gracias
 
La librería ha sido actualizada para MT5 build2209+.
 
fxsaber:

Resultó ser un escáner de mercado y ajustador de TS muy potente.

#property script_show_inputs

#include <fxsaber\MultiTester\MultiTester.mqh> // https://www.mql5.com/es/code/26132
#include <fxsaber\MultiTester\Task.mqh>

input bool OnlyCustomSymbols = true; // Sólo caracteres personalizados
input bool AllSymbols = false;       // Todos los caracteres o corriente

void Add( const string SymbName )
{
  TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);

  for (int i = 0; i < ::inAmount; i++)
    TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}

// Esta función se encarga de generar la lista de tareas.
void SetTesterSettings()
{
  if (AllSymbols)
    // Buscar todos los símbolos de la Observación del Mercado.
    for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
    {
      const string Name = SymbolName(i, true);

      if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
        Add(Name);
    }
  else if (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
    Add(_Symbol);
}


El Asesor Experto debe tener

sinput int inMinTrades = 500; // Número mínimo de operaciones (posiciones).
sinput int inMaxTrades = 90000; // Número máximo de operaciones (posiciones).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
He sorteado algunos escollos. Actualizado.
 

Desconozco las versiones anteriores. Pero la última versión puede ejecutar una prueba para el mismo instrumento varias veces.

Done aparece en el registro, luego vacío (Start no aparece), y el terminal ha iniciado una nueva pasada al mismo tiempo. Parece ser que else if (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos)) devuelve false, porque TesterSettings.Run(Pos) ha devuelto false. Y en la siguiente pasada del temporizador else if (MTTESTER::IsReady()) devolverá false, con lo que se hará un bucle de espera. El propio TesterSettings.Run(Pos)) devuelve false, parece ser trivial debido al timeout, es decir, simplemente no espera y sale.

 

traveller00:

TesterSettings.Run(Pos)) devuelve false parece ser trivial debido al tiempo de espera, es decir, simplemente no espera y sale.

Si es así, prueba a aumentar este número

  static bool ClickStart( const bool Check = true, const int Attempts = 5 )

Nunca he tenido un caso en el que el botón Start no se convirtiera en un botón Stop durante mucho tiempo después de ser pulsado.


Ejecuté Example3 durante cien caracteres y todo funcionó bien.

 
Sí, eso es lo que he hecho yo, aumentarlo a 50. Pero sólo en caso de que alguien más va a tener un problema similar o desea ajustar en la versión general.
 
traveller00:
Sí, eso es lo que he hecho yo, aumentarlo a 50. Pero por si alguien más tiene un problema similar o quiere modificarlo en la versión general.

Puse registro del número de intentos que tardaba en cambiar el estado del botón. Resultados interesantes.


ZY Tal vez este error sigue afectando.