Test del nuovo compilatore MQL5 per piattaforme x64 - calcoli da 2 a 10 volte più veloci! - pagina 2

 
Yury Kulikov:
Per esempio, le comunicazioni interterminali.

Beh, se la giri in questo modo, allora, naturalmente, la DLL è una caratteristica utile...

Ma personalmente, proprio per questo compito, ho deciso che non ho davvero bisogno di una DLL per questo. In questo momento sto pensando a un EA che prenda le quotazioni da una società di brokeraggio e invii segnali a un'altra, e che non ha nemmeno MetaTrader. (DucaCopi, a proposito, mi chiedo se MetaQuotes sarà d'accordo con questo venerabile broker?)

Stavo pensando nella direzione di DLL. Ma ha deciso che i file condivisi sono molto più sicuri e ragionevoli. Lasciate che MetaTrader scriva i segnali nel file. E lasciare che un'altra MetaTrader (o JForex o qualcun altro) li legga ed esegua.

 

A proposito, ho pensato ai riferimenti di array...

Renat, ti do un suggerimento:

Dato che abbiamo una Libreria Standard, non dovremmo aggiungere una variante della funzione OnCalculate() con il seguente prototipo:

intOnCalculate(constint rates_total,//dimensione della serie temporale di input
constint prev_calculated,// barre elaborate alla chiamata precedente
const CiTime* ptTime,// Tempo
const CiOpen* poOpen,// aprire
const CiHigh* phHigh,// Alto
const CiLow* plLow,// Basso
const CiClose* pcClose,// Chiudi
const CiTickVolume* ptvTickVolume,// Tick Volume
const CiRealVolume* prvRealVolume,// Volume reale
const CiSpread* psSpread// Spread
);

?

A mio parere, questo richiederebbe cambiamenti molto piccoli in MetaTrader, ma d'altra parte fornisce semplicemente dei puntatori agli array, che possono essere passati alle classi dei gestori senza copiare. E l'idea stessa della Libreria Standard è resa popolare.

 

Ho ottenuto i primi risultati della comparazione delle prestazioni del vecchio e del nuovo compilatore su un esempio di un grande progetto reale (~20.000 linee di codice sorgente).

Risultati del tempo di esecuzione del programma compilato con la vecchia versione del compilatore (4 esecuzioni):

2015.05.02 13:48:46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.443 sec. 116 MB RAM used.
2015.05.02 13:48:27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.427 sec. 116 MB RAM used.
2015.05.02 13:48:12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.287 sec. 116 MB RAM used.
2015.05.02 13:47:49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 8.751 sec. 116 MB RAM used.

Risultati del tempo di esecuzione per un programma compilato con la nuova versione del compilatore (4 esecuzioni):

2015.05.02 13:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.475 sec. 116 MB RAM used.
2015.05.02 13:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.616 sec. 116 MB RAM used.
2015.05.02 13:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.444 sec. 116 MB RAM used.
2015.05.02 13:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.147 sec. 116 MB RAM used.

*La seconda e la successiva esecuzione del programma sono state effettuate con cache riscaldata - come si vede la cache riscaldata aumenta la produttività del 15-30%.

Come potete vedere i risultati sono migliori nel nuovo compilatore: ci sono voluti ~6,4 secondi per analizzare oltre 20000 affari e ordini nella prima esecuzione e ~5,4 secondi nella seconda, cioè un guadagno di prestazioni del 15-20%.

Il miglioramento delle prestazioni avrebbe potuto essere maggiore, ma la maggior parte del tempo è occupata dalle chiamate di funzioni di sistema.

 

Il nuovo compilatore non ha rilevato errori nel progetto, per un totale di più di 20.000 linee di codice sorgente. Questo è un risultato eccellente, tenendo conto che questo progetto è stato creato per la vecchia versione del compilatore.

Tuttavia, il nuovo compilatore ha generato diversi messaggi di avvertimento relativi alla visualizzazione errata dei percorsi dei file (requisito di escape delle slash):

Questo è un requisito giusto, che può essere facilmente soddisfatto con alcune piccole modifiche.

Quindi, possiamo concludere che anche grandi progetti scritti in MQL5 sono pronti per il nuovo compilatore e passare ad esso non sarà un problema per gli sviluppatori professionisti.

 
Sergey Eremin:
...
Ottengo"errore di generazione del codice 1 1".

...

Ricevo anche questo errore.
 
Il guadagno principale è nella matematica e nei vostri calcoli.

Se il grosso del lavoro duro è nelle chiamate di sistema, l'accelerazione sarà piccola.
 
Renat Fatkhullin:
Il guadagno principale è sulla matematica e sui propri calcoli.

Se il grosso del lavoro duro è nelle chiamate di sistema, l'accelerazione sarà piccola.

È ancora buono, perché potete creare il vostro ambiente con chiamate di funzioni di sistema minime.

(copiando l'ambiente una volta nelle vostre classi e lavorando direttamente con esso).

 
George Merts:

Beh, se la giri in questo modo, allora, naturalmente, la DLL è una caratteristica utile...

Ma personalmente, proprio per questo compito, ho deciso che non ho davvero bisogno di una DLL per questo. In questo momento sto pensando a un EA che prenda le quotazioni da una società di brokeraggio e invii segnali a un'altra, e che non ha nemmeno MetaTrader. (DucaCopi, a proposito, mi chiedo se MetaQuotes sarà d'accordo con questo venerabile broker?)

Pensiero su dll. Ma ho deciso che è più sicuro e sensato usare file condivisi. Lasciate che MetaTrader scriva i segnali nel file. E un altro MetaTrader (o JForex, o qualcun altro) - lasciateli leggere ed eseguire.

C'è un'opzione con canali nominati, ma c'è bisogno di un server intermedio,

Ci sono esempi di come farlo sul forum.

 
Yury Kulikov:
Per esempio, le comunicazioni interterminali.

Alexandr Bryzgalov:

C'è un'opzione con canali nominati, ma avete bisogno di un server intermedio,

Ci sono esempi di come farlo sul forum.

Non c'è bisogno di canali nominativi! Stiamo aspettando che venga aggiunto il supporto SQL. Scambio di dati attraverso una tabella. SQL è un supporto incorporato per sistemi multi-threaded e ad alto carico.
 
Vasiliy Sokolov:

Non c'è bisogno di canali nominativi! In attesa di aggiungere il supporto SQL. Scambio di dati tramite una tabella. SQL è un supporto integrato per sistemi multi-threaded ad alto carico.
Stavo solo parlando di quello che abbiamo e se aggiungiamo sql possiamo parlare anche di questo )
Motivazione: