Esecuzione del tuo EA su Idle-CPU, RannForex-Server, 6 grafici con diversi simboli. Quando sono tornato al mio computer ho visto molti di questi.
2020.10.3013:50:21.852 Test9 (GBPUSD,H1) SymbolInfoTick max bad time: 2.008 ms; avr bad time: 2.008 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:22.142 Test9 (EURUSD,H1) GetBid max bad time: 1.125 ms; avr bad time: 1.125 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:23.072 Test9 (USDCHF,H1) SymbolInfoTick max bad time: 2.245 ms; avr bad time: 2.245 ms; bad iterations: 1 total iterations: 100000002020.10.3013:50:23.288 Test9 (USDCAD,H1) GetBid max bad time: 1.298 ms; avr bad time: 1.182 ms; bad iterations: 2 total iterations: 100000002020.10.3013:50:23.297 Test9 (AUDCAD,H1) GetBid max bad time: 0.977 ms; avr bad time: 0 ms; bad iterations: 0 total iterations: 100000002020.10.3013:50:24.393 Test9 (EURUSD,H1) SymbolInfoTick max bad time: 3.400 ms; avr bad time: 2.862 ms; bad iterations: 2 total iterations: 10000000
Ho una pessima condizione di tempo come questa.
if(end>1000)
{
avr_time+=end;
counter++;
}
SZZ Ho allegato il codice per obiettività da parte dei membri del forum.
Esecuzione del tuo EA su Idle-CPU, RannForex-Server, 6 grafici con diversi simboli. Quando sono tornato al mio computer ho visto molto di questo.
Se ho capito bene, in questo test ci sono 6 EA in loop che girano su 4 core della CPU, e ognuno cerca di caricare un core al 100%. Cioè questo è sicuramente uno stress test, molto lontano dalle condizioni operative normali.
In queste condizioni 1 o 2 espulsioni di 1-2ms per 10 milioni di interrogazioni è un risultato eccellente.
E ancora una volta, lasciate che vi ricordi: maggiore è il carico, più si testa l'efficienza del task scheduler del sistema operativo, non il terminale. Non fatevi ingannare.
Se ho capito bene, in questo test ci sono 6 EA in loop che girano su 4 core della CPU, e ognuno sta cercando di caricare un core al 100%. Cioè questo è sicuramente uno stress test, molto lontano dalle condizioni operative normali.
Questa EA è uno stress test? Te lo chiedo perché sta misurando
#include <fxsaber\BenchMark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279void GetMarketWatch( MqlTick &Ticks[] )
{
for (int i = ArrayResize(Ticks, Size2) - 1; i >= 0; i--)
_B(SymbolInfoTick(Symbols[i], Ticks[i]), 100);
}
Questo è un bug abbastanza tipico. L'attuale implementazione di ArrayPrint stampa le stringhe attraverso chiamate consecutive a diversi Prints. Dovreste prima formare una grande stringa con tutti i dati e poi stamparla attraverso una sola stampa.
19 ms e 48 ms per l'esecuzione di SymbolInfoTick. C'erano diverse decine di casi in cui la durata era di centinaia di microsecondi. Ma non li ho citati.
A quanto pare, per riprodurlo, abbiamo bisogno di eseguire consiglieri di combattimento per 24 ore, e poi solo guardare. A mio parere, non è realistico capire cosa dia inizio a tali ritardi.
Ho guardato il codice di Test9 all'inizio della pagina. Perché 10 milioni di volte senza alcuno Sleep per richiedere i tick di un simbolo? Cosa ha a che fare questo test con il trading reale?
Penso che il test dovrebbe assomigliare a questo: richiediamo il tick di ogni simbolo nella revisione del mercato. Mettiamo in pausa Sleep(1) e così via. Rielabora leggermente il tuo codice:
intOnInit()
{
string Symbols[];
int TotalSymbol= SymbolsTotal(true);
ArrayResize(Symbols,TotalSymbol);
for(int i=0;i<TotalSymbol;i++)
Symbols[i]= SymbolName(i, true);
MqlTick Tick;
//---double temp=0;
ulong start,end,max_time=0,avr_time=0,counter=0;
int count=1 e4;
for(int i=0; !IsStopped() && (i<count); i++)
{
Sleep(1);
for(int j=0;j<TotalSymbol;j++)
{
start=GetMicrosecondCount();
SymbolInfoTick(Symbols[j], Tick);
// temp++;
end=GetMicrosecondCount()-start;
//---if(end>max_time)
max_time=end;
if(end>1000)
{
avr_time+=end;
counter++;
}
}
}
Comment("SymbolInfoTick max bad time: ",DoubleToString(max_time/1000.0,3)," ms; avr bad time: ",counter ? DoubleToString(avr_time/1000.0/counter,3):"0"," ms; bad iterations: ",counter," total iterations: ",count);
Print("SymbolInfoTick max bad time: ",DoubleToString(max_time/1000.0,3)," ms; avr bad time: ",counter ? DoubleToString(avr_time/1000.0/counter,3):"0"," ms; bad iterations: ",counter," total iterations: ",count);
returnINIT_FAILED;
}
Prova 55 simboli nella panoramica.
SymbolInfoTick max bad time: 0.212 ms; avr bad time: 0 ms; bad iterations: 0 total iterations: 10000
Anton:
Esecuzione del tuo EA su Idle-CPU, RannForex-Server, 6 grafici con diversi simboli. Quando sono tornato al mio computer ho visto molti di questi.
Ho una pessima condizione di tempo come questa.
SZZ Ho allegato il codice per obiettività da parte dei membri del forum.
Esecuzione del tuo EA su Idle-CPU, RannForex-Server, 6 grafici con diversi simboli. Quando sono tornato al mio computer ho visto molto di questo.
Se ho capito bene, in questo test ci sono 6 EA in loop che girano su 4 core della CPU, e ognuno cerca di caricare un core al 100%. Cioè questo è sicuramente uno stress test, molto lontano dalle condizioni operative normali.
In queste condizioni 1 o 2 espulsioni di 1-2ms per 10 milioni di interrogazioni è un risultato eccellente.
E ancora una volta, lasciate che vi ricordi: maggiore è il carico, più si testa l'efficienza del task scheduler del sistema operativo, non il terminale. Non fatevi ingannare.
Ho una domanda sulla rilevanza dei tick dati da SymbolInfoTick.
Situazione:
1. Facciamo TimeCurretn(); otteniamo il tempo 18:00:00
2. Eseguire SymbolInfoTick su un simbolo senza etichetta. Abbiamo un segno di spunta con il tempo 17:58:00.
3. Dormire(1)
4. Aggiunge un SymbolInfoTick per il simbolo non a sinistra. Otteniamo un segno di spunta con l'ora 17:59:00.
Cioè, nel quarto elemento abbiamo un nuovo tick, che è un minuto diverso da TimeCurretn().
Vede un problema in questa situazione?
Come entrare in questa situazione più raramente?
Test EA.
Non ho Alertite. Risultato (l'ha eseguito su sei grafici).
C'è un problema. È difficile dire quanto sia grave.
Se ho capito bene, in questo test ci sono 6 EA in loop che girano su 4 core della CPU, e ognuno sta cercando di caricare un core al 100%. Cioè questo è sicuramente uno stress test, molto lontano dalle condizioni operative normali.
Questa EA è uno stress test? Te lo chiedo perché sta misurando
sta dando un mare di avvisi.
C'è un bug nell'output del log seriale di ArrayPrint.
È chiaro che si tratta di un errore, poiché questo è il codice sorgente.
Forum sul trading, sistemi di trading automatico e test di strategia
MT5 e la velocità in azione
fxsaber, 2020.10.30 15:04
Ho innescato Alert ogni secondo molte volte.
19 ms e 48 ms per l'esecuzione di SymbolInfoTick. C'erano diverse decine di casi in cui la durata era di centinaia di microsecondi. Ma non li ho citati.
A quanto pare, per riprodurlo, abbiamo bisogno di eseguire consiglieri di combattimento per 24 ore, e poi solo guardare. A mio parere, non è realistico capire cosa dia inizio a tali ritardi.
Ho guardato il codice di Test9 all'inizio della pagina. Perché 10 milioni di volte senza alcuno Sleep per richiedere i tick di un simbolo? Cosa ha a che fare questo test con il trading reale?
Penso che il test dovrebbe assomigliare a questo: richiediamo il tick di ogni simbolo nella revisione del mercato. Mettiamo in pausa Sleep(1) e così via. Rielabora leggermente il tuo codice:
Prova 55 simboli nella panoramica.
Ora testiamo temp++ invece di SymbolInfoTick;
Ho guardato il codice di Test9 all'inizio della pagina. Perché 10 milioni di volte senza alcuno Sleep per richiedere le zecche di un personaggio?
Niente affatto. Leggete il ramo per i dettagli.
Non a parità di condizioni. Leggete il thread per i dettagli.
Non siete confusi dal fatto che anche il tempo massimo di esecuzione di temp++ richiede decine di microsecondi, con questa tecnica di misurazione?