Test del nuovo compilatore MQL5 per piattaforme x64 - calcoli da 2 a 10 volte più veloci!
Ben fatto!
Qui ci sono altri test e discussioni precedenti:
Professionisti nel loro campo!
Grazie!
Inoltre - il prossimo rilascio entro il 20 maggio avrà molto probabilmente un debugger disponibile sui dati storici.
Lo mostreremo all'iFX Expo il 26-28 maggio.
- iFX EXPO
- www.ifxexpo.com
Renat Fatkhullin:
- Il nuovo compilatore MQL5 a 64 bit è da 2 a 10 volte più veloce dell'attuale compilatore MQL5.
Lo sviluppo del nuovo compilatore ha richiesto molto tempo, ma i guadagni sono stati sorprendenti. Ci sono alcuni problemi con l'ottimizzazione delle operazioni sulle stringhe, ma cercheremo anche di velocizzarle. - Il nuovo compilatore è molto vicino alla qualità e alla velocità del compilatore Visual Studio 2012 x64.
Non abbiamo ancora attivato tutti i metodi di ottimizzazione perché li stiamo ancora testando. Pertanto, i risultati continueranno a migliorare.
Inoltre, un debugger sui dati storici sarà molto probabilmente disponibile nella prossima release entro il 20 maggio.
Lo dimostreremo all'iFX Expo il 26-28 maggio.
Il nuovo compilatore si avvicina molto alla qualità e alla velocità del compilatore Visual Studio 2012 x64
Non abbiamo ancora attivato tutti i metodi di ottimizzazione perché li stiamo ancora testando. Ecco perché i risultati continueranno a migliorare.
Buone notizie! Ben fatto!
Renat Fatkhullin:
Potete eseguire più calcoli allo stesso tempo e pensare meno a passare alla DLL. Questo è particolarmente importante per coloro che fanno matematica pesante.
Sì, non riesco davvero a pensare a nessun altro compito in cui siano necessarie DLL esterne.
Inoltre - la prossima release entro il 20 maggio avrà molto probabilmente un debugger disponibile sui dati storici.
Questa è davvero la caratteristica più utile. Grazie mille, davvero.
Personalmente ho solo una domanda: i puntatori agli array. Per gli array privati il problema si risolve avvolgendo un array in una classe.
Ma per gli array passati nella funzione OnCalculate() devo copiare i dati nei buffer interni ogni volta, e solo allora passare i puntatori negli oggetti analyzer e nei gestori. Una volta ho provato a passare i puntatori usando memcpy, ma in qualche modo la velocità era quasi la stessa, e secondo me, tali "trucchi" non dovrebbero essere applicati.
Forse la possibilità di usare il tipo di riferimento sarebbe più accettabile. In generale, il compito è quello di accedere agli elementi dell'array senza copiarli.
Sì, non riesco a pensare a nessun altro compito in cui siano necessarie DLL esterne.
Si è scoperto che l'assegnazione del parametro di input di deviazione al campo di deviazione dell'istanza della struttura MqlTradeRequest porta all'errore di generazione del codice.
Esempio ipotetico (tutto il resto è stato rimosso):
sinput ulong deviation = 100; int OnInit() { MqlTradeRequest request = { 0 }; request.deviation = deviation; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- }Ottengo"errore di generazione del codice 1 1".
Se si assegna solo "100":
int OnInit() { MqlTradeRequest request = { 0 }; request.deviation = 100; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- }
...allora la compilazione andrà avanti senza errori. Nota, ho un processore AMD Athlon II X4 645, 3.1 GHz. Forse è importante (proprio questa settimana MQL4 con servicedesk ha catturato alcuni bug su AMD).
Il mio compilatore non si lamenta di nient'altro.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Come abbiamo promesso in precedenza, stiamo rilasciando un nuovo compilatore MQL5 ottimizzato per la versione a 64 bit di MetaTrader 5.
Abbiamo mantenuto la piena compatibilità del codice generato sia per le versioni a 32 bit del terminale che per le vecchie versioni dei terminali.
È già possibile aggiornare a MetaTrader 5 build 1108 con le sue nuove funzionalità sul nostro server MetaQuotes-Demo. Per abilitare il nuovo compilatore ottimizzante, aggiungete la chiave Optimize=1 a [Experts] in metaeditor.ini:
Per testare le prestazioni dei compilatori MQL4, MQL5 e C++, abbiamo usato i test standard dei compilatori. Tutti i file sorgente sono allegati insieme al foglio di calcolo Excel, così tutti possono ricontrollare.
Per ora diamo un'occhiata ai risultati del test nel seguente ambiente:
Per vedere il grafico dettagliato, cliccate su di esso.
Quali sono le conclusioni:
MQL5 è più veloce di MQL4 da decine di percentuali fino a diverse volte. La ragione è nell'ambiente di esecuzione e nei 32 bit. MetaTrader 5 ha un runtime molto più efficiente e in costante sviluppo.
Lo sviluppo del nuovo compilatore ha richiesto molto tempo, ma i guadagni sono stati sorprendenti. Ci sono alcuni problemi con l'ottimizzazione delle operazioni sulle stringhe, ma cercheremo anche di velocizzarle.
Non abbiamo ancora attivato tutti i metodi di ottimizzazione perché li stiamo ancora testando. Quindi i risultati continueranno a migliorare.
Cosa dà ai commercianti?
La possibilità di fare più calcoli nella stessa quantità di tempo e meno pensare di passare a una DLL. Questo è particolarmente importante per coloro che fanno la matematica pesante.