Librerie: MultiTester - pagina 9

 
fxsaber:

Ora la libertà di automatizzare il Tester è totale.

Uno degli esempi di applicazione reale (tutto viene eseguito automaticamente)

  1. Vengono presi tutti i simboli e per ognuno di essi vengono eseguite le seguenti operazioni.
  2. Inizio l'ottimizzazione.
  3. Alla fine del miglior passaggio vengono presi i dati e da essi si formano (con intervalli impostati di parametri di ingresso) diversi task per l'ottimizzazione.
  4. Vengono eseguite tutte le ottimizzazioni a partire dal punto 3.
  5. I passaggi migliori vengono presi da tutte le ottimizzazioni del punto 4 e salvati come set per la negoziazione del portafoglio.


Si è rivelato uno scanner di mercato e un regolatore di TS molto potente. Le fonti TC non sono necessarie per queste manipolazioni.

 
// Esempio di caricamento di un file Set nel Tester.
#property script_show_inputs

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

input string inFileName = "SetFile.set"; // Imposta file

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

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
Analogamente ai file ini del Tester.
 
Grazie
 
La libreria è stata aggiornata per MT5 build2209+.
 
fxsaber:

Si è rivelato uno scanner di mercato e un regolatore di TS molto potente.

#property script_show_inputs

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

input bool OnlyCustomSymbols = true; // Solo caratteri personalizzati
input bool AllSymbols = false;       // Tutti i caratteri o corrente

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);
}

// Questa funzione è responsabile della generazione dell'elenco dei compiti.
void SetTesterSettings()
{
  if (AllSymbols)
    // Cerca tutti i simboli nel Market Watch.
    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);
}


Il Consulente esperto dovrebbe avere

sinput int inMinTrades = 500; // Numero minimo di operazioni (posizioni).
sinput int inMaxTrades = 90000; // Numero massimo di operazioni (posizioni).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
Ha aggirato alcune insidie. Aggiornato.
 

Non conosco le versioni precedenti. Ma l'ultima versione può eseguire più volte un test per lo stesso strumento.

Nel log appare Done, poi vuoto (Start non appare), e il terminale ha avviato un nuovo passaggio nello stesso momento. Sembra che else if (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos)) restituisce false, perché TesterSettings.Run(Pos) ha restituito false. E al prossimo passaggio del timer, if (MTTESTER::IsReady()) restituirà false, facendo in modo che il ciclo rimanga in attesa. Lo stesso TesterSettings.Run(Pos)) restituisce false, sembra essere banale a causa del timeout, cioè non aspetta ed esce.

 

traveller00:

TesterSettings.Run(Pos)) restituisce false sembra essere banale a causa del timeout, cioè non aspetta ed esce.

Se è così, provare ad aumentare questo numero

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

Non ho mai avuto un caso in cui il pulsante di avvio non si trasformasse in un pulsante di arresto per molto tempo dopo essere stato premuto.


Ho eseguito l'Esempio 3 per un centinaio di caratteri e tutto ha funzionato bene.

 
Sì, è quello che ho fatto io stesso, ho aumentato il valore a 50. Ma nel caso in cui qualcun altro abbia un problema simile o voglia modificarlo nella versione generale.
 
traveller00:
Sì, è quello che ho fatto io stesso, ho aumentato il valore a 50. Ma nel caso in cui qualcun altro abbia un problema simile o voglia modificarlo nella versione generale.

Ho registrato il numero di tentativi necessari per cambiare lo stato del pulsante. Risultati interessanti.


ZY Forse questo bug è ancora presente.