OnDeinit negli indicatori - pagina 5

 
mql5:
Cercherò di spiegare di nuovo (sulle mie dita):
  1. Il terminale si è avviato per un tempo X dopo l'ultimo avvio
  2. Iniziato il download della cronologia, che manca (il terminale è stato inattivo per X minuti)
  3. Chiamato OnCalculate per l'indicatore sulla storia disponibile prevtime = ultimo tempo storico conosciuto, dimensione del buffer dell'indicatore N barre
  4. Mentre la storia viene scaricata dal server, arriva un tick
  5. Chiamato OnCalculate dell'indicatore, dove Time[0] è un tempo di tick, l'indicatore lo memorizza come prevtime, la dimensione del buffer dell'indicatore è N+1 barre (tra N e N+1 barre c'è un vuoto nella storia)
  6. Dopo che la storia è stata scaricata, OnCalculate è chiamato di nuovo, ma questa volta non c'è nessun buco nella storia, ma prevtime ha la stessa data di Time[0] - nessuna nuova barra (rispettivamente, nessuna cancellazione dei buffer nell'indicatore), la dimensione del buffer delle barre N+X/Timeframe dell'indicatore e IndBuffer[0] non sono gli stessi del passo 5



Cosa c'entra il prevtime?

Sto chiedendo perché non funziona.

/////////////////////////////////////
void OnDeinit(const int reason)
{
 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);


}
 
eevviill:

Cosa ha a che fare questo con prevtime?

Sto chiedendo perché non funziona.

E come fai a sapere che non funziona? Come si controlla?

E perché inizializzare i buffer degli indicatori prima di scaricarli? È già scaricata, vero?

Ibuffer degli indicatori dovrebbero essere inizializzati quando tutti i valori degli indicatori sono completamente ricalcolati:

int OnCalculate(..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1>)
   {
      ArrayInitialize(...);
   }
   ...
}
 
eevviill:

Qui. Faccio un azzeramento del buffer per questo. Inite ha già detto che non si può fare.

Voglio disintegrare. Ma non funziona nemmeno lì. Perché?

Cosa c'entrano init() e deinit()? L'operazione è necessaria in tutt'altro luogo. Lo ripeterò di nuovo. Dopo il calcolo, la storia è stata caricata.

Ho fatto una versione funzionante.

File:
 
Scriptong:

Come si fa a sapere se non funziona? Come si controlla?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin:

Cosa c'entrano init(), deinit()? L'operazione è necessaria altrove. Ripeto. Dopo il calcolo la storia è stata caricata.

Ho fatto una versione funzionante.

Ho ancora capito bene la prima volta su vostra raccomandazione.

Mi sto chiedendo perché il deinit non funziona per azzerare gli array?

 
eevviill:
https://forum.mql4.com/ru/65066/page2#1015138

Hai dato un link al codice che funziona in OnCalculate. Ho chiesto come fai a sapere che l'inizializzazione in DeInit non funziona. Lasciatemi specificare, per sicurezza, che dopo OnDeinit() non funziona nulla del codice dell'indicatore (né OnInit(), né OnCalculate()). Pertanto, potete controllare l'azzeramento degli array solo in OnDeinit() stesso.

 
Scriptong:

Hai dato un link al codice che funziona in OnCalculate. Ho chiesto come fai a sapere che l'inizializzazione in DeInit non funziona. Lasciatemi specificare, per sicurezza, che dopo OnDeinit() non funziona nulla del codice dell'indicatore (né OnInit(), né OnCalculate()). Pertanto, potete controllare il fatto dell'azzeramento degli array solo in OnDeinit() stesso.

Ho fornito un link a

FunzionamentoAperto il grafico - attaccato l'indicatore M1 - terminale chiuso - aperto in un paio di minuti. Il risultato è sugli screenshot.

Questo è il modo in cui lo provo.

 
eevviill:

Ho ancora capito bene la prima volta su vostra raccomandazione.

Mi sto chiedendo perché deinit non funziona con l'azzeramento degli array?

O il deinit non funziona quando il terminale è chiuso?
 
eevviill:
O deinit non funziona quando il terminale è chiuso?
Lo fa, ma non ha senso cancellare i buffer degli indicatori - non vengono salvati.
 
mql5:
Funziona, ma non ha senso cancellare i buffer degli indicatori - non vengono salvati.

Perché?

Perché il valore del buffer 0 riempito viene salvato ma non azzerato?