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

 
Alexander Laur:
Può descrivere il compito. Cosa dovrebbe fare lo script con tutte le barre? Penso che tu stia cercando di risolvere il problema a testa alta. È difficile dare consigli senza vedere il problema da risolvere.

Ho lo script, ecco il ToRhttps://www.mql5.com/p/21/234411 , ma ci sono difficoltà nel funzionamento a causa della mancanza di memoria.... o piuttosto si esaurisce dopo una breve esecuzione dello script.

 
Alexander Laur:
La pagina è vietata. Che tu abbia uno script va bene, ma non risolve il problema. Cosa fa lo script?
Lo script analizza la posizione dell'indicatore rispetto al prezzo. Ci sono molti criteri - lo scopo è quello di trovare le impostazioni ottimali per l'indicatore, in cui l'indicatore è una zona di supporto o resistenza. Lo script permette di collegare qualsiasi indicatore simile alla media mobile ed eseguire l'enumerazione dei parametri.
 
Alexander Laur:

Renat ha già risposto che c'è solo un modo: trasferire il calcolo di un indicatore in uno script.

Lo capisco, ma rende il lavoro più complicato e aumenta notevolmente i miei costi. Rende lo strumento (script) non versatile.

Alexander Laur:

Potete anche fare del masochismo e rompere la gamma di parametri calcolati in sottogruppi. Ed esegui lo script cambiando i parametri in ogni sottogruppo. È una perdita di tempo, lo so, ma cosa possiamo fare?

Ora penso che la soluzione potrebbe essere quella di automatizzare il processo di aprire un grafico con lo script, calcolare alcuni indicatori su di esso, chiudere il grafico con lo script e aprirne uno nuovo - questo permetterà di cancellare la memoria?

Alexander Laur:

La seconda opzione è passare al 5. Cioè dovremmo cercare i parametri ottimali sul 5° indicatore e poi sostituire i parametri ottimali nel 4° indicatore. Nella 5, è possibile gestire il carico e lo scarico degli indicatori. Ma le operazioni di carico/scarico sono abbastanza intense in termini di risorse.

Penso che sia meglio avere operazioni costose che non averle, e capisco che si può usare più memoria in 5, ma ho bisogno di indicatori che sono stati scritti per 4, perché faccio trading su 4...

I miei calcoli si basano sul primo e non so come convertire l'indicatore in 5, ma è possibile rendere gli indicatori compatibili tra loro, almeno dopo la compilazione...

 
Alexander Laur:

Il comando per aggiungere un indicatore al grafico non è stato trovato. Eliminando il grafico, libererete ovviamente della memoria. Ma quando si chiude il grafico, tutti gli indicatori sul grafico saranno chiusi.

C'è un comando per aprire nuovi grafici, ma non c'è un comando per allegare l'indicatore al grafico appena aperto. Ecco perché la vera automazione non funzionerà nemmeno in questo caso.

Che dire di iCustom, lo usiamo per chiamare l'indicatore - equivale ad aggiungere un grafico - infatti, non metto il grafico sul grafico.
 
Alexander Laur:

Lachiamata di un indicatore tramite iCustom() non aggiunge un grafico al grafico.

Se non metti il grafico sul grafico, allora quale grafico ucciderai per liberare memoria?

Non perdere tempo, fidati di Renate.

Forse mi sbaglio. Ripetiamo ancora una volta:

1. C'è uno script che chiama la funzione dell'indicatore iCustom e salva i buffer del grafico in memoria.

2. La chiamata della funzione iCustom è multipla - come risultato la RAM viene riempita e l'indicatore restituisce degli zeri.

Il terminale deve essere in grado di lavorare con la memoria, giusto? Cancellare la cache, per come la vedo io, è possibile se i dati non sono necessari, e non lo sono se il grafico con i dati viene rimosso.

4. Cancella il grafico e libera la RAM per ulteriori calcoli al punto 1.

Dove mi sbaglio?


P.S. Da quanto ho capito, i dati sono tutti legati al grafico su cui viene fatto il calcolo - non importa quali quotazioni vengono usate per esso.

 
-Aleks-:

Forse mi sbaglio. Ripetiamo ancora una volta:

1. C'è uno script che chiama la funzione indicatore iCustom e memorizza i buffer grafici nella memoria.

2. La funzione iCustom viene chiamata più volte - come risultato la RAM viene riempita e l'indicatore restituisce degli zeri.

Il terminale deve essere in grado di lavorare con la memoria, giusto? Cancellare la cache, per come la vedo io, è possibile se i dati non sono necessari, e non lo sono se il grafico con i dati viene rimosso.

4. Cancella il grafico e libera la RAM per ulteriori calcoli al punto 1.

Dove mi sbaglio?


P.S. Da quanto ho capito, i dati sono legati al grafico su cui viene eseguito il calcolo - non importa quali quotazioni vengono utilizzate per questo.

Al punto 3.

Il terminale memorizza la cache delle serie temporali e degli indicatori costruiti su di esse per un certo tempo dopo la chiusura, al fine di non ricalcolare tutto in una volta alla prossima chiamata.

 
Andrey Khatimlianskii:

Al punto 3.

Il terminale memorizza la cache delle serie temporali e degli indicatori basati su di esse per un certo tempo dopo la chiusura, in modo da non dover ricalcolare tutto in una volta quando si accede di nuovo.

Ma cos'è "un po'" di tempo? Forse ci sono altri criteri/metodi di rilascio delle risorse (cancellazione della cache dalla memoria)?
 
-Aleks-:
Ma cos'è "un po'" di tempo? Forse ci sono altri criteri/metodi per rilasciare le risorse (rimuovere la cache dalla memoria)?

No, Renat ha già risposto.

In MT5 la cache viene cancellata se l'Expert Advisor che usa gli indicatori come risorse viene scaricato. Cioè, puoi caricare un grafico con un Expert Advisor, leggerne una parte e chiudere il grafico. Ma non è comunque molto veloce.

Non lo so in MT4.

 
Andrey Khatimlianskii:

No, Renat ha già risposto.

In MT5 la cache viene cancellata se l'Expert Advisor che usa gli indicatori come risorse viene scaricato. Cioè, puoi caricare un grafico con un Expert Advisor, leggerne una parte e chiudere il grafico. Ma non è comunque molto veloce.

Non lo so in MT4.

La memoria viene rilasciata dopo l'operazione dello script. Quindi, la memoria per il calcolo dei dati ottenuti dall'indicatore viene rilasciata, ma non riguarda i buffer del grafico, giusto?

E se traduciamo i dati non attraverso il buffer grafico, ma altrimenti - attraverso le variabili globali, per esempio (non so se un buffer può essere creato lì), allora l'effetto della scarsità di memoria può essere superato?

 
Ecco un esperimento.
1. aprire il grafico e "task manager" - memoria utilizzata 215692 kb
2. Applico l'indicatore - memoria occupata 219612 kb (aumento 3920 kb)
3. Rimozione dell'indicatore - memoria utilizzata 217984 kb (rilasciata 1628 kb)
E i restanti 2292kb di memoria non liberata, se ho capito bene, sono andati nella cache?
Il buffer non sta occupando troppi dati - storia da febbraio 2013 sul Sentry.