
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
La schermata mostra le statistiche per la stringa di chiamata e non la funzione SymbolInfoTick.
In totale, la stringa data è stata misurata 210 volte, una volta "fermata" esattamente sulla stringa, prima della chiamata SymbolInfoTick o subito dopo, e 209 volte come stringa di ritorno da SymbolInfoTick
Scusa, ma non è chiaro.
Il riassunto del profiler dice:
SymbolInfoTick () CPU totale: 209 (0,83%)
Il codice stesso dice:
SymbolInfoTick () CPU totale: 210 (2,57%)
SymbolInfoTick () si verifica solo UNA volta nel codice. Quali siano questi diversi valori non è affatto chiaro. OK, 209 vs 210, hai detto che è perché ha "fermato" uno su quella linea (non ha senso per me, ma immagino che non abbia molta importanza).
E la %?
0 2021.07.10 11: 52: 19.032 MQL5 Profiler Misure totali 25039, 0/0 errori, 99 MB di memoria stack analizzata (92872/1073741824)
Quindi 209 (0,83%) significa 100% = 25039. OK
Ma 210 (2,57%) significa 100% = 8171?!? Cos'è 8171 per la CPU totale?
Che dire di questo ( post #1 )?
Come potete vedere, SymbolInfoTick () è mostrato come la parte più difficile del codice. Il che non è corretto. Questo è lo stesso codice come nei post seguenti (che mostra SymbolInfoTick con Total CPU = 209 (0,83%), che è corretto), la differenza è che ho commentato la linea dove SymbolInfoTick () era Total CPU = 1. Il tempo totale di esecuzione (secondo i dati storici) non è cambiato con questo leggero cambiamento, ma i risultati del profiler erano diversi.
Posso fornire il codice in privato se volete controllare.
Mi dispiace, ma non è chiaro.
Il riassunto del profiler dice:
SymbolInfoTick () CPU totale: 209 (0,83%)
Il codice stesso dice:
SymbolInfoTick () CPU totale: 210 (2,57%)
SymbolInfoTick () si verifica solo UNA volta nel codice. Quali siano questi diversi valori non è affatto chiaro. OK, 209 vs 210, hai detto che è perché ha "fermato" uno su quella linea (non ha senso per me, ma immagino che non abbia molta importanza).
E la %?
0 2021.07.10 11: 52: 19.032 MQL5 Profiler Misure totali 25039, 0/0 errori, 99 MB di memoria stack analizzata (92872/1073741824)
Quindi 209 (0,83%) significa 100% = 25039. OK
Ma 210 (2,57%) significa 100% = 8171?!? Cos'è 8171 per la CPU totale?
State confrontando le statistiche per "linea di codice" e per "funzione"
C'è una linea di codice
Un totale di 210 volte questa stringa è stata inclusa nelle statistiche:
C'è una funzione SymbolInfoTick, questa funzione ha colpito le statistiche 209 volte.
La funzione è chiamata solo da questa linea di codice, forse è per questo che ti sei confuso con i contatori
Per quanto riguarda i numeri:
non lo è, i numeri sono solo simili: 209 / 0,83 * 100 = 25180
Ma 210 (2,57%) significa 100% = 8171?!? Cos'è 8171 per la CPU totale?
Corretto, su 25039 misurazioni, 8171 di esse provengono dalla linea di codice con la chiamata SymbolInfoTick
Alain Verleyen:
Backtest in esecuzione a:
2021.07.10 08:00: 37.101 Core 01 EURUSD, H1: 230861 ticks, 998 barre generate. Il test è passato in 0: 03: 09.367 (compresa la pre-elaborazione dei tick 0: 00: 00.515).
Ho aggiunto del codice per misurare il tempo di esecuzione di SymbolInfoTick () usando GetMicrosecondCount ().
Risultato:
2021.07.10 08:00: 37.101 Core 01 2021.05.30 23:59:59 Totale = 1209572 Eseguito = 836973 in 661874 microsecondi
Così, SymbolInfoTick () ha preso un totale di 661 millisecondi sui dati storici in 3 minuti e 9 secondi. Tuttavia, il profiler mostra che utilizza il 74,71% delle misure. Non capisco quanto questo sia accurato o utile.
Sia chiaro, i test non riguardano solo l'esecuzione del codice MQL + il profiler, catturando le statistiche, rallenta un po' l'esecuzione.
Detto questo, nel rapporto, il 74,71% è una cifra relativa al codice MQL, non ai test in generale
Ciao @Ilyas!
Grazie. Controllerò di nuovo con le vostre risposte e vi terrò informati.
Per quanto riguarda i numeri:
non lo è, i numeri sono solo simili: 209 / 0,83 * 100 = 25180
Corretto, su 25039 misurazioni, 8171 di esse provengono dalla linea di codice con la chiamata SymbolInfoTick
Ho sbagliato i numeri.
Infatti, 209 è lo 0,83469% di 25039, che è stato arrotondato allo 0,83
8171 campioni sono stati presi sulla linea con SymbolInfoTick chiamato 210 volte, cioè il 2,57%.
Ho sbagliato i numeri.
Infatti, 209 è lo 0,83469% di 25039 arrotondato allo 0,83
8171 esecuzioni erano su un ramo dell'esecuzione del programma in cui la linea che chiama SymbolInfoTick è stata eseguita 210 volte, cioè il 2,57%.
Esecuzione da OnTimer (), quindi non è del tutto chiaro perché è 8171? Quando OnTimer () Total CPU mostra 29683.
Si prega di fornire il codice, controllerò due volte il funzionamento dei contatori
Si prega di fornire il codice, controllerò due volte il funzionamento dei contatori
Ilyas, aiutami a capire anche questo.
1. Perché una chiamata di funzione vuota può richiedere il 34,5% della CPU di Self? Allo stesso tempo, la chiamata della funzione che la segue, i cui interni occupano il 38,16% della CPU totale, non appare affatto nel rapporto?
Codice di funzione:
2. Questo esempio mostra il secondo problema: la linea con TimeCurrent() impiega un tempo irragionevolmente lungo non solo all'interno della funzione ma nel programma in generale:
Prima di commentare il corpo di CheckTimeSeries(), il carico principale era sulla sua linea TimeCurrent().
È davvero una funzione così pesante? Con cosa sostituirlo? O come renderlo economico (caching all'interno di un ciclo di esecuzione del programma)?
Ovunque posso, risparmio i calcoli diluendoli (una volta per barra, una volta ogni X secondi, una volta ogni Y ms, ecc.) Ma si scopre che il controllo stesso, se per fare i calcoli, è abbastanza intensivo in termini di risorse.
Grazie per l'aiuto.