Teoria dell'accelerazione EA quando si usa un indicatore personalizzato (funzione - iCustom) - pagina 2

 
komposter:

E se l'indicatore è 5-buffer, allora la prima chiamata di iCustom calcolerà tutti i buffer, le chiamate successive e le richieste per altri buffer leggeranno solo le informazioni pronte (fino alla comparsa di nuovi dati per il calcolo).

Cioè, se l'indicatore è stato chiamato almeno una volta, ha ricevuto le informazioni non solo sul buffer richiesto, ma su tutti i buffer inclusi nell'indicatore? Oppure, significa che il calcolo di altri buffer si troverà in memoria e non ci sarà nessun ricalcolo a causa di questo - i dati saranno presi dalla RAM, se non è stato chiamato esplicitamente prima (il programma (EA) non ha allocato la memoria esplicitamente per la memorizzazione dei dati dell'indicatore). Ho letto prima che ogni volta che l'indicatore viene chiamato, viene ricalcolato - non è così?

komposter:

Se avete un indicatore molto pesante, pensate al vostro sistema di cache, in modo che alla prima chiamata i dati siano calcolati e scritti nel file, e alla prossima chiamata siano solo letti. L'ho fatto in questo modo, è molto più veloce.

Ma nel 95% dei casi non c'è bisogno di tutto questo, il tester è abbastanza veloce così com'è, e in 5 si può anche collegare il cloud.

Buona fortuna!

La lettura da un disco rigido sarebbe più veloce, o hai fatto un disco virtuale in memoria con i dati calcolati dell'indicatore?

Beh, sto solo sognando i cinque, per ora realizzo solo idee personalizzate sui quattro.

Grazie per avermi augurato buona fortuna!

 
komposter:

Se avete un indicatore davvero pesante, ideate il vostro sistema di cache, in modo che alla prima esecuzione i dati siano calcolati e scritti nel file, e nelle esecuzioni successive siano solo letti. L'ho fatto in questo modo, è molto più veloce.

Ma nel 95% dei casi non c'è bisogno di tutto questo, il tester è abbastanza veloce così com'è, e in 5 si può anche collegare il cloud.

Buona fortuna!

Non sto parlando di un indicatore, ma di un Expert Advisor, ma l'argomento è vicino. Il mio scalper conta parecchio, tutti i tipi di filtri, le conversioni. Ho memorizzato il mio modello in Matlab e prima ho calcolato tutta la matematica e l'ho inserita in un file .mat, e poi ho usato quei dati per eseguire una strategia. Ora ho voglia di fare lo stesso con MQL4 Strategy Tester, perché l'ottimizzazione è semplicemente irreale.
 
-Aleks-:

Cioè, se l'indicatore viene chiamato almeno una volta dal programma, ha ricevuto informazioni non solo sul buffer richiesto, ma anche su tutti quelli inclusi nell'indicatore? Oppure, significa che il calcolo di altri buffer si troverà in memoria e non ci sarà nessun ricalcolo a causa di esso - i dati saranno presi dalla RAM, se non è stato chiamato esplicitamente prima (il programma (Expert Advisor) non ha allocato la memoria esplicitamente per la memorizzazione dei dati dell'indicatore). Ho letto prima che ogni volta che l'indicatore viene chiamato, viene ricalcolato - non è così?

L'indicatore non può calcolare solo un buffer, considera tutto ciò che ha dentro in qualsiasi chiamata. A meno che non si possa limitare il calcolo con dei parametri, ma questo è un altro problema.

Il ricalcolo avviene ad ogni chiamata, ma di solito viene ricalcolata solo la 0a barra. E se un EA è scritto in modo intelligente, queste chiamate non si verificano ad ogni tick.

-Aleks-:

La lettura da un disco rigido sarebbe più veloce o avete creato un disco virtuale nella memoria con i dati calcolati dell'indicatore?

Leggo da un disco normale, ma non i valori dell'indicatore su ogni barra, ma la stringa "tempo;segnale"; tali dati sono molto meno necessari.

È improbabile che ci sia una soluzione universale per qualsiasi indicatore, si dovrebbe fare affidamento sul problema globale.

-Aleks-:

Ho solo sognato il cinque indicatore, ho realizzato le mie idee solo sul quattro indicatore.

L'unica differenza è nella parte di trading e nel lavoro con le serie temporali (inclusi gli indicatori).

E la nuvola è una cosa davvero potente.

 
VDev:
Non sto parlando dell'indicatore ma dell'Expert Advisor, ma l'argomento è vicino. Ho uno scalper che calcola parecchio, tutti i tipi di filtri e trasformazioni. Ho memorizzato il modello in Matlab e prima ho calcolato tutta la matematica e l'ho inserita in un file .mat e poi ho usato quei dati per eseguire una strategia. Ora ho voglia di fare lo stesso con MQL4 Strategy Tester, perché l'ottimizzazione è semplicemente irreale.

Non ha quasi senso avere una cache per un indicatore separato, sono anche partito dai dati necessari all'EA.

Grosso modo, i segnali pronti sono stati registrati, e poi sono stati solo letti ed eseguiti ingressi e supporto di posizione.

 
komposter:

L'indicatore non può calcolare solo un buffer, calcola tutto quello che c'è dentro ad ogni chiamata. A meno che il calcolo non possa essere limitato dai parametri, ma questo è un altro argomento.

Il ricalcolo avviene ad ogni chiamata, ma di solito viene ricalcolata solo la 0a barra. E se un EA è scritto in modo intelligente, allora queste chiamate non si verificano ad ogni tick.

Quindi risulta che se ci rivolgiamo a un indicatore con molti buffer e riceviamo informazioni su tutti loro da uno di essi, allora sarà più veloce ed economico in termini di memoria che calcolare tante volte quante sono le informazioni dei suoi diversi buffer necessarie per questo indicatore?


Eppure, forse qualcuno potrebbe fare un esperimento, perché l'idea mi tiene occupato! O la ricerca sull'innovazione è interessante solo a pagamento?

 
OnCalculate() dell'indicatore viene chiamato solo la prima volta che iCustom() viene chiamato ad un nuovo prezzo. Le chiamate successive a iCustom() ricevono solo dati senza avviare OnCalculate(). Diciamo che il prezzo cambia, la prossima chiamata iCustom()inizia onCalculate(), le prossime chiamate ricevono solo dati e così via, fino a quando il prezzo cambia, ecc. (testato sperimentalmente in questo momento).
 
-Aleks-:

Così alla fine si scopre che se si indirizza un indicatore con molti buffer e si ottengono informazioni da uno di essi su tutti, sarà più veloce e più economico in memoria che calcolare quante volte questo indicatore ha bisogno di informazioni dai suoi diversi buffer?

1 indicatore per 5 buffer o 5 indicatori per 1 buffer è circa lo stesso.
Se avete bisogno di informazioni solo da 2 buffer, sarà più redditizio chiamare 2 indicatori con 1 buffer che un indicatore con 5 buffer. Ma non più redditizio di un indicatore con 2 buffer.


-Aleks-:

Eppure, forse qualcuno potrebbe fare un esperimento, perché l'idea mi tiene occupato! O la ricerca sull'innovazione è interessante solo a pagamento?

komposter:

Questo approccio ridurrà il consumo di memoria dell'indicatore (approssimativamente un multiplo della differenza nel numero di buffer prima e dopo), ma aumenterà il carico sul processore (e "assemblaggio" e "decomposizione" devono essere fatti costantemente).

Se non avete limiti di memoria (il che è improbabile con i volumi attuali), non farà altro che rallentare.

 

Mi sento come se fossi stato frainteso! :)

Ma capisco che molto probabilmente sono io che non capisco.

Supponiamo di chiamare l'indicatore personalizzato nel codice - dobbiamo specificare il buffer di questo indicatore e poi, seguendo il codice, chiamiamo nuovamente l'indicatore personalizzato con lo stesso nome della prima volta ma con un buffer diverso.

Domanda: l'indicatore sarà calcolato due volte o solo una volta?

 
-Aleks-:

...

Domanda: l'indicatore sarà calcolato due volte o solo una volta?

Una volta.
 
Integer:
Una volta sola.
Quindi un guazzabuglio di indicatori giusti funzionerà più velocemente che usare gli indicatori individualmente - quindi ci saranno meno richieste di informazioni sulle quotazioni?