OnDeinit negli indicatori - pagina 4

 
eevviill:
OK. Anche Deinit non fa l'azzeramento.

Non hai ancora risposto alla domanda, cosa intendi per azzerare i buffer?

Il terminale client non azzera il contenuto dei buffer degli indicatori. L'azzeramento deve essere fornito dal programmatore.

I buffer vengono cancellati automaticamente quando l 'indicatore viene scaricato

 
stringo:

Non hai ancora risposto alla domanda, cosa intendi per azzerare i buffer?

Il terminale client non azzera il contenuto dei buffer degli indicatori. L'azzeramento deve essere fornito dal programmatore.

I buffer vengono cancellati automaticamente quando si carica un indicatore

 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);
Non funziona né ininit né deinit.
 
eevviill:
Non funziona né in init né in deinit.
Perché ne avete bisogno in deinit? E perché un array di indicatori dinamici dovrebbe essere inizializzato?
 
eevviill:
Questo non funziona né in init né in deinit.

Ancora una volta.

Dovreste inizializzare l'array solo prima del ricalcolo totale. E questo solo se si riempie l'array selettivamente e non elemento per elemento

 
stringo:

Un'altra volta.

Avete solo bisogno di inizializzare l'array prima del ricalcolo totale. E questo solo se si riempie l'array selettivamente, non un elemento dopo l'altro

eevviill:
Questo non funziona né in init né in deinit.

Perché ne avete bisogno in deinit? E perché un array di indicatori dinamici dovrebbe essere inizializzato?

Avete letto il problema?

 
evillive:
Perché ne abbiamo bisogno in deinit? E perché inizializzare l'array dinamico dell'indicatore?

Perché da qualche parte bisogna farlo. Inite dice che non si può.

Perché viene contato solo 0 bar. Dopo aver chiuso il terminale e averlo riaperto dopo un paio di candele viene calcolata la barra 0 + un'altra barra con un offset per il tempo in cui il terminale è stato chiuso.

 
stringo:

Un'altra volta.

Avete solo bisogno di inizializzare l'array prima del ricalcolo totale. E questo solo se si riempie l'array selettivamente e non in una riga elemento per elemento

Bello. Riempio solo l'elemento 0.

Se non capite il problema, posso descriverlo di nuovo.

 
eevviill:

Perché da qualche parte bisogna farlo. Inite dice che non si può.

Perché viene contato solo 0 bar. Dopo aver chiuso il terminale e averlo aperto dopo un paio di candele si scopre che 0 barra è contata + un'altra con uno spostamento dal momento in cui il terminale è stato chiuso.

In realtà la barra zero è stata calcolata correttamente, ma poi è stata caricata la storia. Ed è stata calcolata una nuova barra zero.
 
Vinin:
In realtà la barra zero è stata calcolata correttamente, ma poi la storia è stata caricata. Ed è stata calcolata una nuova barra zero.

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é?

 
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. Chiama OnCalculate per la 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 è di 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
Motivazione: