Errori, bug, domande - pagina 2879
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
L'ho rielaborato un po
(è meglio non usare una macro in questo modo ;)
L'ho rielaborato un po
(quindi è meglio non usare macro ;)
Quando faccio i test, confondo il codice il più possibile per evitare che l'ottimizzatore butti fuori dei cicli vuoti
avete
// for(int i = 0; i < 5; i++) sum += u.param[i];
L'ottimizzazione dell'esecuzione MQL può terminare il primo ciclo in anticipo, poiché i valori calcolati non vengono utilizzati, quindi qualcosa dovrebbe essere fatto dopo lo SpeedTest() con i risultati - questo ciclo
Ho controllato con il ciclo commentato, non l'ho buttato via, ma nell'altro test potrei andare in crash
La macro è una questione di gusto, l'ho provata molte volte e funziona, non vedo il senso di scrivere la stessa cosa a mano
UPD: trovato dove ho letto come funzionano i compilatori moderni ora, abbastanza informativo
https://habr.com/ru/post/431688/
https://habr.com/ru/post/47878/
il codice dà il valore iRSI di handles e tps sempre solo 10, ma i prezzi e il grafico cambiano, anche.
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
costruire 2652
il codice dà il valore iRSI di handles e tps sempre solo 10, ma i prezzi e il grafico cambiano, anche.
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
costruire 2652
Hai la maniglia dell'indicatore, è il 10
Poi, è necessario ottenere i valori sulla barra di destra
Leggete la guida, o cercate le risposte sul forum - sono molte
Hai la maniglia dell'indicatore, è il 10
Poi, è necessario ottenere i valori sulla barra di destra
Leggete la guida, o cercate le risposte sul forum - ce ne sono molte
Capito. Studierò i buffer. È strano, avevo la sensazione che tutto dovesse funzionare così com'è, forse l'ho confuso con mql4.
La cosa strana è che l'ho cercato su Google e non sono riuscito a trovarlo in mql5 per ottenere i dati dell'indicatore.
Aha, secondo il tuo esempio come ho capito il valore dell'indicatore RSI è alla fine in una variabile della seguente forma
controllato:
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : : loops=10000000000 ms=10862287
la differenza non è significativa, è altamente probabile che se cambiamo i test nell'ordine opposto, i risultati saranno opposti
non critico
non è affatto giusto includere rand() nel test poiché questa funzione consuma molte più risorse degli altri comandi.
Penso che questo sarebbe un test più corretto:
Risultato:
Per fortuna, alla fine l'ho messo sul cavallo sbagliato. I sindacati sono un po' più veloci. Sono più convenienti per lavorare e il codice è più leggibile.
è difficilmente corretto includere rand() nel test, poiché questa funzione è un ordine di grandezza più dispendioso in termini di risorse degli altri comandi.
per niente critico
Il tempo di esecuzione di rand() è costante, molto probabilmente è una comune funzione C++, cercate su google "rand c++ source code"
dovete inizializzarlo, ma se lo inizializzate con delle costanti potreste incontrare un'ottimizzazione
in generale, non capisco l'antipatia di rand()
un'opzione è quella di inizializzare con qualcosa come questo:
sarebbe veloce.
ha eseguito il tuo script, imho non corretto.
Il tempo principale è il caricamento del codice nella cache e poi nel processore
e aggiungere la discrezione del timer del sistema
otteniamo... quasi un numero casuale.
è necessario testarlo a lungo, circa 100500 volte, imho
È improbabile che sia corretto includere rand() nel test, poiché questa funzione consuma un ordine di grandezza più risorse degli altri comandi.
Penso che questo sarebbe un test più corretto:
Risultato:
Per fortuna, alla fine ho scommesso sul cavallo sbagliato. I sindacati sono un po' più veloci. Sono più convenienti per lavorare e il codice è più leggibile.
Una volta per una volta, e a distanza della prima vittoria, (come il primo metodo ha rimosso la linea di conversione da breve a qualcosa)
per niente critico
Il tempo di esecuzione di rand() è costante, molto probabilmente è una comune funzione C++, cercate su google "rand c++ source code"
dovete inizializzarlo, ma se lo inizializzate con delle costanti potreste incontrare un'ottimizzazione
in generale, non capisco l'antipatia di rand()
come variante da inizializzare con qualcosa del genere:
sarà veloceIl punto è che si dovrebbe misurare esattamente ciò che è necessario misurare, senza roba estranea.
Il punto era di misurare esattamente ciò che è richiesto, senza extra
no
Se ci sono frammenti di codice ripetuti, si otterranno test di ottimizzazione!
Che differenza fa la durata di esecuzione di rand()?
lasciare che venga eseguito 2/3 del tempo di test, la cosa principale è che il tempo di rand() sia costante
Il vostro codice MQL userà le funzioni MQL del sistema, giusto? - che senso ha testare un codice perfetto?