Librerie: MultiTester - pagina 35

 
fxsaber #:

Grazie per il vostro aiuto nei test! Aggiornato MTTester.mqh inviato.

Grazie mille per la libreria

 
MTTester.mqh è stato nuovamente aggiornato. Questa volta vi dirò qual è stato il problema.
#include <fxsaber\Benchmark\Benchmark.mqh>  // https://www.mql5.com/it/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/it/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // Se il pulsante di avvio è pronto per essere premuto
    Print(_B(MTTESTER::ClickStart(), 1)); // Se è stato premuto il pulsante di avvio e quanto tempo è stato necessario.
}

Questo Expert Advisor preme il pulsante Start ogni tre secondi, se non è Stop. Sono riuscito a premerlo - vero, altrimenti - falso.


Situazione standard.

Premuto Start - il calcolo è iniziato.

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

Questa azione richiede ~125 ms.


Non è raro.

Premere Avvia: viene avviato il calcolo istantaneo oppure il Tester segnala che non è possibile eseguire il calcolo (ad esempio, FromDate >= ToDate).

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

Questa azione richiede circa un secondo. La libreria emette un allarme, ma restituisce il valore vero: il pulsante è stato premuto.


Situazione rara.

L'avvio non è stato premuto. Questo problema può essere risolto solo riavviando il terminale.

Non ho registri di questa situazione. Ci vorranno <10 secondi per identificare una situazione del genere. Verrà visualizzato un avviso come questo.

problem with Start-button!

Restituisce false - il pulsante non è stato premuto.

 
Aggiornamento di MTTester.mqh.
 
fxsaber #:

È una situazione rara.

L'avvio non è stato premuto. Questo problema può essere risolto solo riavviando il terminale.

Un computer WinServer remoto effettuava continuamente centinaia di passaggi singoli senza alcun errore.


Non appena ho effettuato l'accesso (RDP) a questa macchina, il pulsante di avvio ha smesso di fare clic. Il rimedio, come sempre, è riavviare il terminale.

Sembra che questo comportamento abbia a che fare con accessi simili alla macchina. È possibile accedere tramite RDP decine di volte e tutto funziona bene. Ma alcuni accessi diventano fatali per il Tester.


Chi si imbatte nel bug dell'avvio, faccia attenzione alla relazione tra l'accesso alla macchina e il pulsante di avvio.


Coincidenza o no, WinServer si è offerto di controllare gli aggiornamenti durante l'accesso alla macchina.

 

Buona libreria.
È possibile specificare quale file *.set con le impostazioni dei parametri passare programmaticamente per il test?

Per impostazione predefinita vengono utilizzate solo le stesse impostazioni, il che non è molto comodo.

 
sergego18 #:

È possibile specificare quale file *.set con le impostazioni dei parametri passare programmaticamente per il test?

Esempio.
 
fxsaber #:
Esempio.

Grazie.
È meglio passare le impostazioni in una singola riga con le righe separate dal carattere \n.

o un array di righe come nell'esempio?

Ed è possibile modificare in

metodo statico Run della classe MTTester

bool statico Run( const string ExpertName = NULL,

const string Symb = NULL,

const ENUM_TIMEFRAMES period = PERIOD_CURRENT,

const datetime iBeginTime = 0,

const datetime iEndTime = 0 )

aggiungere una stringa di parametri (o un array di stringhe) che specifichi le impostazioni di *.set EA?

 
sergego18 #:

Grazie.
È meglio passare le impostazioni in una singola riga con le righe separate dal carattere \n?

o un array di righe come nell'esempio?

GetSettings è CTRL+C in Tester.

SetSettings è CTRL+V in Tester.

Vedere con quali dati funziona CTRL+C/V.


E se è possibile modificare in

metodo statico della classe MTTester Esegui

Non uso questo metodo. Rimane come storia.


L'esempio mostra tutti i metodi MTTESTER necessari.

 
sergego18 #:

È possibile specificare quale file *.set con le impostazioni dei parametri passare programmaticamente per il test?

Validate funziona con i file ini completi del Tester e con una versione ridotta - i file set per il Tester.

Se è necessario eseguire molti file ini/set, Validate lo fa subito. Utilizzo.

 
fxsaber #:

Validate funziona con i file ini di Tester completi e con una versione ridotta - set-files for Tester.

Se avete bisogno di eseguire molti file ini/set, Validate lo fa subito. Utilizzo.

Grazie.
Ho trovato una soluzione in questo commento in cui il file set viene caricato nel formato richiesto come array di stringhe.

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

Ho anche sostituito

typedef bool (*INITDEINIT)( void );

puntatore delle chiamate di callback all'inizializzazione e alla deinizializzazione di ogni esecuzione

all'interfaccia

interfaccia InitDeInit {

bool RunInit();

bool RunDeInit();

};

che è implementata nell'erede

di una classe simile alla struttura IMPOSTAZIONI

e quindi nel metodo RunInit().

Carico il file di impostazione dello strumento richiesto.

typedef bool (*INITDEINIT)( void ); - questo puntatore non consente di sapere quale strumento si sta inizializzando/deinizializzando, quindi è meglio utilizzare un puntatore all'interfaccia, poiché i puntatori ai metodi non sono ancora supportati da MQL.

Con questo approccio non è necessario modificare il metodo MTTester::Run.



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний