Cambiare il TF è un problema - pagina 3

 
Vasyl Nosal:

Ho un'idea. Scriverò più tardi.

l'idea è morta.

Chiederò agli sviluppatori di fare qualcosa come il sistema HistoryUpdated() per controllare se tutta la storia è stata aggiornata o no.

Una variante ottimale. Mantenere aggiornata la cronologia di tutti i tempi. Recentemente un indicatore simile è apparso in CodeBase
 
Slawa:

Gli sviluppatori non vi aiuteranno perché non lo faranno.

Già detto: se la differenza tra rates_total e prev_calculated è maggiore di 1, allora è historyUpdated

è maggiore di 0, non di 1.

И? Questo risolve il problema?

O non è un problema per voi ricalcolare l'intera storia su ogni nuova barra?

 
Vasyl Nosal:

è maggiore di 0, non di 1.

И? Questo risolve il problema?

O non è un problema per voi ricalcolare l'intera storia su ogni nuova barra?

Vi è stato detto correttamente. Maggiore di 1. Quando appare una nuova barra, la differenza è 1.

E questo risolve completamente il problema.

Un indicatore normale impiega pochissimo tempo per ricalcolare completamente. Meno di un secondo.

 
Victor Nikolaev:

Vi è stato detto correttamente. Più di 1. Quando appare una nuova barra, la differenza è 1.

E questo risolve completamente il problema.

Un indicatore normale impiega pochissimo tempo per ricalcolare completamente. Meno di un secondo.

Funziona solo se i buffer sono azzerati.

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{
 
Vasyl Nosal:

Funziona solo se si azzerano i buffer.

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{

Mi scusi, ma mi permetta di chiedere:

  • perché avete bisogno di assegnare rates_total e prev_calculated a variabili separate create su ogni tick qui?
  • Nell'espressione dell'operatore condizionale if() e nel ciclo for() per ricalcolare la differenza di queste variabili?
  • perché non introdurre semplicemente una variabile per la differenza tra rates_total e prev_calculated, per esempio limit?
L'implementazione può essere diversa a seconda del compito. Le sfumature possono essere diverse. Perché non vedi come viene attuato da altri, a seconda delle diverse condizioni? Compreso, e con l'aiuto del priming per capire, decidere, formare opzioni accettabili per se stessi, a seconda dei compiti?
 
Vasyl Nosal:

P.S. Aggiungerò altro a questo:

La tua idea sull'azzeramento (counted=0) nel blocco dell'operatore condizionale if(){} mi sembra chiara.

Nel caso in cui vi fosse più chiaro cosa intendo brevemente sopra, ecco un estratto della Documentazione, dalla sezione ... Basi del linguaggio / Funzioni / Funzioni di gestione degli eventi:

... Se dall'ultima chiamata di OnCalculate() i dati dei prezzi sono stati cambiati (è stata pompata una storia più profonda o sono stati riempiti i vuoti della storia), allora il valore del parametro di input prev_calculated sarà impostato a zero dal terminale stesso.

 
Vasyl Nosal:

Funziona solo se si azzerano i buffer.

Non c'è bisogno di resettare nulla.

int OnCalculate(...)
{
   // индекс последнего посчитанного на прошлом вызове бара
   // с которого начинаем расчёт
   int nStartBar = rates_total - MathMax(prev_calculated, 1);

   for(int i = nStartBar; i >= 0; i--)
   {
       // рассчитываем индикатор на всех непосчитанных барах
   }
}

Se si azzera prev_caclulated, l'indicatore ricalcola completamente. E questo è corretto - non si sa cosa sia cambiato esattamente nella storia. Forse, qualche buco è stato caricato, forse le borchie sono state pulite da qualche parte. È obbligatorio ricalcolare completamente. In tutti gli altri casi, solo un'ultima barra sarà ricalcolata (quando appareuna nuova barra, le ultime due).

 
Dina Paches:

Mi scusi, ma mi permetta di chiedere:

  • Perché avete bisogno di assegnare i valori di rates_total e prev_calculated a variabili separate su ogni tick?
  • Nell'istruzione condizionale if() e nel ciclo for(), ricalcolate la differenza di queste variabili?
  • perché non inserire semplicemente una variabile per la differenza tra rates_total e prev_calculated, ad esempio il limite?
L'implementazione può essere diversa a seconda del compito. Le sfumature possono essere diverse. Perché non vedi come viene attuato da altri, a seconda delle diverse condizioni? Compreso, e con l'aiuto del priming per capire, decidere, formare varianti accettabili per se stessi, a seconda dei compiti?

Grazie. Buon punto.

Non lo è. È così che si può ricalcolare l'intera storia se c'è una lacuna.

 
Dina Paches:

P.S. Aggiungerò altro a questo:

La tua idea sull'azzeramento (counted=0) nel blocco dell'operatore condizionale if(){} mi sembra chiara.

Nel caso in cui vi fosse più chiaro cosa intendo brevemente sopra, ecco un estratto della Documentazione, dalla sezione ... Basi del linguaggio / Funzioni / Funzioni di gestione degli eventi:

... Se dall'ultima chiamata di OnCalculate() i dati dei prezzi sono stati cambiati (è stata pompata una storia più profonda o sono stati riempiti i vuoti della storia), allora il valore del parametro di input prev_calculated sarà impostato a zero dal terminale stesso.

Non lo farà. È 0 poi non 0 poi 0 di nuovo (quando si carica la storia un paio di volte).
 
Sergei Vladimirov:

Non c'è bisogno di resettare nulla.

Se si azzera prev_caclulated, l'indicatore ricalcola completamente. E questo è corretto - non si sa cosa sia cambiato esattamente nella storia. Forse, qualche buco è stato caricato, forse le borchie sono state pulite da qualche parte. È obbligatorio ricalcolare completamente. In tutti gli altri casi, solo un'ultima barra sarà ricalcolata (quando appareuna nuova barra, le ultime due).

No. Senza azzeramento sarà quello che mostrano gli screenshot.
Motivazione: