Implementazioni alternative di funzioni/approcci standard - pagina 2

 
Renat Fatkhullin:

Nel 2016, la maggior parte dei compilatori C++ sono arrivati agli stessi livelli di ottimizzazione.

MSVC fa dubitare dei miglioramenti ad ogni aggiornamento, e Intel C++ come compilatore si è fuso - non si è ancora ripreso dal suo "errore interno" su grandi progetti.

Un altro dei nostri miglioramenti nel compilatore nella build 1400 è che è più veloce nel compilare progetti complessi.

Se non fosse stato per questo dialogo, probabilmente non ne avremmo saputo nulla. Sarebbero apprezzate maggiori informazioni sul grande lavoro che state facendo.
 
fxsaber:

In tema. Dovete creare delle alternative alle funzioni standard, perché a volte vi danno l'output sbagliato. Ecco un esempio di alternativa SymbolInfoTick

Potete chiamare SymbolInfoTick su ogni evento NewTick nel tester e sommare il campo volume per conoscere il fatturato delle azioni. Ma no, non si può! Devo rendere molto più logico MySymbolInfoDouble.

Benvenuto nella programmazione, dove tu sei il creatore!

Ti diamo lo strumento più completo, dove puoi fare tutto quello che vuoi.

 
Renat Fatkhullin:

Puoi ottimizzare tutto ciò che ti circonda.

È un processo senza fine. Ma il 99% delle volte non è economicamente conveniente.

Qui non stiamo parlando di ottimizzazione, ma di portare la vecchia funzione alle nuove realtà. Certo, avreste potuto non scrivere affatto NormalizeDouble. E la gente avrebbe fatto la propria variante. Ma l'hai creato per risparmiare tempo. Ora non è stato sufficiente. E sarebbe bene riparare la vecchia bicicletta per soddisfare gli stessi strumenti di stock.
 
fxsaber:
Non si tratta di ottimizzare, ma di portare la vecchia funzione alla nuova realtà. È chiaro che avreste potuto non scrivere affatto NormalizeDouble. E la gente avrebbe fatto la propria variante. Ma l'hai creato per risparmiare tempo. Ora non è stato sufficiente. E sarebbe bene riparare la vecchia bicicletta per soddisfare gli stessi strumenti di stock.
Grazie, controlleremo e vedremo se possiamo cambiare la libreria.
 

A proposito, non molto tempo fa @iliyas ha suggerito di inserire molte funzioni di sistema in fase di compilazione come codice sorgente MQL5, in modo che potessero prendere parte all'inlining e alla massima ottimizzazione.

All'inizio non ho apprezzato l'idea, ma ora vedo che sarebbe geniale. Lo fa lo stesso MSVC.

 
Renat Fatkhullin:
Grazie, controlleremo e vedremo se possiamo cambiare la libreria.

Avete frainteso. Non le librerie, ma NormalizeDouble. Per aggiungere un sovraccarico.

double NormalizeDouble( double Value, double TickSize );

Per normalizzare prezzi e lotti quando TickSize = 25, VolumeStep = 0.5

Per esempio, la normalizzazione sarebbe così

NormalizeDouble(Price, 0.00001) // Нормализация до пятого знака
NormalizeDouble(Price, 10.0) // Нормализация цены для RTS-9.16
NormalizeDouble(Price, 25.0) // Нормализация цены для MIX-9.16
 
Renat Fatkhullin:

A proposito, non molto tempo fa @iliyas ha suggerito di inserire molte funzioni di sistema in fase di compilazione come codici sorgente MQL5, in modo che potessero partecipare all'inlining e massimizzare l'ottimizzazione.

Non ho apprezzato subito l'idea, ma ora vedo che sarebbe fantastico. Lo fa lo stesso MSVC.

Si scopre che #import ex5 è il male dell'ottimizzazione.

Fate attenzione alle caratteristiche del preprocessore

Forum sul trading, sistemi di trading automatico e test di strategia

Come posso passare attraverso l'enumerazione in modo sequenziale?

Alexey Navoykov, 2016.09.01 23:20

Ho già implementato il principio di cui sopra in MQL5, perché le macro hanno un numero fisso di argomenti e il numero di argomenti è limitato a 8. Quindi ho solo 3 valori per enum.

Per quanto riguarda l'aspetto teorico, è probabilmente più veloce creare una funzione interna per l'analisi degli enum. Gli sviluppatori hanno già promesso di creare qualcosa.


Come si scopre, si possono creare costruzioni molto astute e facili da usare.

 
fxsaber:

Avete frainteso. Non le librerie, ma NormalizeDouble. Per aggiungere un sovraccarico.

Per normalizzare prezzi e lotti quando TickSize = 25, VolumeStep = 0.5

Per esempio, la normalizzazione sarebbe così

Non si può sovraccaricare in questo modo. Stesse firme di funzioni.

Ma l'idea è chiara - la funzione di normalizzazione che tiene conto della granulazione delle zecche.

 
Renat Fatkhullin:

Non si può sovraccaricare in questo modo. Stesse firme di funzioni.

Non sembra esserci un problema. In una variante, il secondo parametro è int (era), nell'altra è double (apparirà).

Ma l'idea è chiara - la funzione di normalizzazione che tiene conto della granulazione delle zecche.

Esattamente!
 

fxsaber

C'è un errore nel tuo codice

Motivazione: