OnDeinit negli indicatori - pagina 2

 
eevviill:

No, non è così. Spengo il terminale normalmente.

Se Deinit è messo in Init, non funziona nemmeno.

Solo la funzione di cancellazione dell'oggetto personalizzato ha aiutato.

Beh, se non si cancella, chissà cosa hai fatto lì :)

 
keekkenen:

Beh, se non lo rimuove, chissà cosa gli hai fatto :)

Ha senso. Ma se elimino semplicemente l'indicatore dal grafico, le zone vengono cancellate. Quando spengo il terminale, non lo sono. Se uso la funzione in init che cancella le zone (è la stessa funzione in deinit).

Ho capito che deinit funziona per tutti. E quando dovrebbe scattare quando si chiude o si apre il terminale?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

  for(int i=ObjectsTotal()-1;i>=0;i--)

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill:

Ha senso. Ma se semplicemente rimuovo l'indicatore dal grafico, le zone vengono rimosse. Non quando il terminale è spento. Solo se metto la mia funzione per cancellare le zone nell'init (stessa funzione nel deinit).

Ho capito che deinit funziona per tutti. Ma quando dovrebbe funzionare quando il terminale è chiuso o aperto?

Sì, funziona quando il terminale è chiuso...

forse hai una sorta di logica che va avanti da molto tempo?

nel senso che al momento dello spegnimento l'indicatore calcola in modo imprevisto qualcosa e il terminale si aspetta che tutto vada storto e/o si interrompa, che OnDeinit non funzioni?

Penso che la strada per l'helpdesk...

 
keekkenen:

sì, quando si chiude il terminale funziona...

forse hai una sorta di logica di gioco lunga?

nel senso che al momento dello spegnimento l'indicatore esegue qualche calcolo strano e il terminale se lo aspetta tutto storto e/o interrompe, che OnDeinit non funziona ?

Penso che la strada per l'helpdesk...

Se funziona per te, allora va bene. Darò un'occhiata al mio.
 

Non è cambiato nulla ed è stato aggiunto altro.

Indicatore del buffer. Funzionamento Aperto il grafico-attaccato l'indicatore M1-chiuso il terminale-aperto in un paio di minuti. Il risultato è negli screenshot.

E questo nonostante il fatto che ho anche scritto nel codice

//////////////////////////////////////////////////////////////////
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],
                const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
    //new bar
if (Time[0] != prevtime) 
{
 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);


prevtime = Time[0];
}

 

Sviluppatori, avete intenzione di risolvere il problema?

Ecco un indicatore per voi. Prova quello che ho fatto nel post sopra.

Aperto il grafico - attaccato l'indicatore M1 - chiuso il terminale - riaperto dopo un paio di minuti.

File:
 
eevviill:

Sviluppatori, avete intenzione di risolvere il problema?

Ecco un indicatore per voi. Prova quello che ho fatto nel post sopra.

Aperto il grafico - attaccato l'indicatore M1 - chiuso il terminale - riaperto dopo un paio di minuti.

La situazione del tuo indicatore è stata risolta.

Il fatto è che l'indicatore è calcolato non solo sull'arrivo dei tick, ma anche sulla prima estrazione e sull'arrivo della storia mancante.

1. Arriva un nuovo tick - l'indicatore viene calcolato.

2. Arriva la cronologia mancante, che riempie il buco tra i dati dell'ultimo avvio del terminale e l'ultimo tick. L'indicatore è calcolato. Ma allo stesso tempo non c'è una nuova condizione del bar!

Per risolvere questo problema è necessario controllare il numero di barre. Circa come questo

   if(Time[0]!=prevtime || Bars!=prevbars)
     {
      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);

      prevtime=Time[0];
      prevbars=Bars;
     }
 
stringo:

La situazione del tuo indicatore è stata risolta.

Ecco il punto - l'indicatore è calcolato non solo sull'arrivo dei tick, ma anche sulla prima estrazione e sull'arrivo della storia mancante.

1. Arriva un nuovo tick - l'indicatore viene calcolato.

2. Arriva la cronologia mancante, che riempie il buco tra i dati dell'ultimo avvio del terminale e l'ultimo tick. L'indicatore è calcolato. Ma allo stesso tempo non c'è una nuova condizione del bar!

Per risolvere questo problema è necessario controllare il numero di barre. Come questo

Grazie.

Ma non è solo nel mio indicatore. Ho pensato che voi dalla vostra parte risolverete questo problema.

Per esempio quando si chiude il terminale Deinit in tutti i programmi da eseguire.

 
eevviill:

Grazie.

Ma non è solo nel mio indicatore. Pensavo che avreste risolto questo problema dalla vostra parte.

Per esempio, quando si chiude il terminale, deinit in tutti i programmi.

In realtà deinit in tutti i programmi viene chiamato quando il terminale viene chiuso.

C'è anche un codice speciale per il motivo del deinit. RAGIONE_CHIUSA