PLO - pagina 2

 
Interesting:

Infatti, con un approccio normale l'OOP implementato in MQL5 (insieme alle risorse del terminale stesso) darà un significativo aumento della velocità.

A quale velocità di funzionamento si riferisce, la velocità del programma o la velocità della sua scrittura?

 
Integer:

OOP non aumenta le prestazioni. Ha qualche vantaggio - per esempio, se c'è qualche funzione chiamata con alcuni parametri (per esempio, il calcolo dell'EMA), una variabile statica è usata nella funzione per memorizzare il precedente valore EMA. Poiché la funzione memorizza l'ultimo valore in base al quale verranno eseguiti i calcoli, non può essere chiamata con altri parametri (simbolo, timeframe, periodo di smoothing) quando la funzione viene chiamata successivamente, quindi se la funzione deve essere chiamata con parametri diversi, è necessario farne una copia con un nome diverso o utilizzare una variabile globale passata per riferimento invece di una statica. Questo è l'unico caso in cui è più conveniente usare l'oggetto - si carica un'istanza dell'oggetto, si impostano i suoi parametri e poi si chiama il metodo senza parametri. Se l'oggetto include metodi, la cui esecuzione non dipende da esecuzioni precedenti o in generale da qualsiasi parametro con cui l'oggetto viene caricato, non dà altro che consumo di risorse.

Lo fa, lo fa, lo fa davvero. Ma tutto dipende dall'esperienza, dall'immaginazione e dalla stortura delle mani del programmatore (in quest'ordine)... :)

E infatti anche se si suppone che OOP (con l'approccio più terribile ad esso) non aumenti il tempo di esecuzione, o lo aumenti in modo insignificante (anche se personalmente dubito che l'aumento di 10 volte possa essere considerato insignificante) sarà ancora più utile per gli sviluppatori di CAPIRE che tutti i possibili svantaggi di OOP.

Il fatto è che MQL5, se contiene OOP, contribuirà in qualche modo allo sviluppo di un approccio modulare (unitario) alla programmazione, che non si vede in MQL4 (tranne che per le librerie). Questo è dovuto al fatto che è conveniente mettere strutture, classi o gruppi di esse in file separati (moduli) e usarle quando necessario.

Inoltre, grazie all'astrazione, all'incapsulamento, all'ereditarietà e al polimorfismo, l'uso delle classi permetterà di fare il debug dei blocchi pronti (moduli) e di non pensare al loro contenuto per usarli nel proprio lavoro.

Inoltre, l'uso di OOP dovrebbe aumentare il livello e la convenienza dell'uso di DLL esterne e di altri software tuning nei sistemi di trading.

Combinato con l'uso di librerie, questo renderà la vita degli sviluppatori una dozzina di volte più facile e accelererà notevolmente lo sviluppo di EA abbastanza complessi.

 
Integer:

A quale velocità di funzionamento si riferisce, la velocità di esecuzione del programma o la velocità di scrittura?

Entrambi. I dettagli sulla velocità di sviluppo sono scritti sopra (naturalmente, tutto ha senso se hai un po' di esperienza nello sviluppo e nell'uso delle classi)...
 
Interesting:

Lo fa, lo fa, lo fa....

Chi te l'ha detto? Non è vero. Tutto il resto è corretto.

 
Integer:

Chi te l'ha detto? Non è vero. Tutto il resto è corretto.

Ripeto - Aumenta, aumenta, quanto aumenta. Ma tutto dipende dall'esperienza, dall'immaginazione e dalla stortura delle mani del programmatore (in quest'ordine)...

Una volta stavo confrontando la velocità di inizializzazione del mio EA, a parte alcuni dettagli minori, il codice del programma era lo stesso (in MQL5 veniva usata la libreria di migrazione). Ed è risultato che l'inizializzazione MQL5 era 2,5 volte più veloce in media.

Naturalmente, so che non è un indicatore, ma sono ancora fiducioso che la velocità di MQL5 sia 10 volte più veloce anche ora, usando il giusto approccio.

Potete discutere all'infinito, ma provate ad implementare OnTrade() oOnChartEvent e tutto diventerà chiaro. Ma oltre a queste cose ci sono molte altre "chicche"...

PS

Naturalmente, ci sono problemi di velocità con strategy tester e indicatori. Ma col tempo questi difetti saranno eliminati dagli sviluppatori del terminale, o dagli autori di Expert Advisors di trading.

Inoltre, MQ ha dichiarato più di una volta che la velocità massima di esecuzione del codice del programma non è ancora disponibile (per quanto ne so ancora)...

 
Aumenta... Aumenta... Non resta che cantarla al ritmo di un mantra con una campana in mano e vestiti con una tonaca. MQL5 è più veloce di MQL4, non perché supporta gli oggetti.
 
Integer:
Aumenta... aumenta... ...è meglio che lo canti in un mantra con una campana in mano e che si metta un vestito.

Integer:
MQL5 è più veloce di MQL4, non perché supporta gli oggetti.
Ma comunque, nella maggior parte dei casi, è più veloce. A mio parere, non è opportuno confrontare MQL5 con MQL4 (o qualsiasi altro linguaggio di programmazione) in termini di velocità di lavoro con gli oggetti.
 

Usando la funzione GetTickCount(), ho testato simili Expert Advisors con e senza OOP:

Test my_oop_ea ( con OOP )

RJ 0 Core 1 15:12:15 Tempo di prova = 115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 barre) generati entro 115203 ms (barre totali nella storia 9199)

RP 0 Core 1 15:12:15 Disconnesso


Test My_First_EA ( senza OOP )

RH 0 Core 1 15:18:54 Test Time = 90578

CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 ticks (3052 barre) generati entro 90578 ms (barre totali nella storia 9199)

OR 0 Core 1 15:18:54 Disconnesso


La differenza è piccola, ma non a favore di OOP. E in caso di ottimizzazione questa differenza viene moltiplicata per il numero di corse, se ho capito bene.

Ho tratto delle conclusioni per me stesso.

Ho anche confrontato il MACD Sample EA standard per MT5 (con OOP) e per MT4:

Macd campione MT5

FO 0 Core 1 18:03:21 Tempo di prova = 126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 barre) generati entro 126016 ms (barre totali nella storia 545615)


Macd campione MT4

18:12:52 2010.06.30 23:59 MACD Sample EURUSD,M1: Time Tests = 64406

I risultati sono sorprendenti - MT5 e MQL con OOP non sono solo mangiatori di risorse ma anche di tempo.

 

Quando si testano diverse piattaforme MT4 e MT5, non si possono trarre conclusioni specifiche sull'OOP. Le differenze nei risultati sono al 90% dovute alla diversa architettura del sistema.

Questo articolo è stato completato usando il metodo di cui sopra. Inoltre, l'ottimizzatore di codice in MQL5 è stato disabilitato per il momento - lo stiamo mettendo a punto. Quando è abilitato, i risultati miglioreranno immediatamente molte volte.

Ieri è stato pubblicato un articolo che confronta la velocità di MQL4 e MQL5 - vi consiglio di leggerlo:

È stato pubblicato MQL5 Analysis of Moving Averages Performance:

Da quando è stato creato il primo indicatore di media mobile semplice, sono apparsi molti indicatori diversi. Molti di loro si basano su un principio simile o utilizzano alcuni modi di elaborazione delle serie di prezzi nei loro calcoli. Spesso la questione della velocità di calcolo di tali indicatori e l'ottimalità degli algoritmi implementati in essi rimane senza risposta. Questo articolo descrive tutte le opzioni possibili per utilizzare le medie mobili e fa un'analisi comparativa di ciascuna di esse.

Autore: Sergey

 


Una funzione con un altro parametro è chiaramente più lenta. È davvero solo a causa del parametro?

File:
test.mq5  2 kb