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/26132constbool Init = EventSetTimer(3);
voidOnTimer()
{
if (MTTESTER::IsReady()) // Se il pulsante di avvio è pronto per essere premutoPrint(_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.
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.
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.
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний
Grazie per il vostro aiuto nei test! Aggiornato MTTester.mqh inviato.
Grazie mille per la libreria
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.
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).
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.
Restituisce false - il pulsante non è stato premuto.
È 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.
È possibile specificare quale file *.set con le impostazioni dei parametri passare programmaticamente per il test?
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?
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.
È 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.
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.