Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1468

 

Non riesco a capire cosa significhino rates_total e prev_calculated.

La documentazione dice: Il primo parametro rates_total contiene il numero di barre a disposizione dell'indicatore per il calcolo e corrisponde al numero di barre disponibili sul grafico.

Ad esempio MA5, media di 5 barre, impostata per visualizzare 100 barre. L'indicatore calcolerà dalla 104a alla 100a barra e inizierà a tracciare la linea dalla 100a barra. Quindi rates_total=5, o 100, o 104?

 
Novichokkk numero di barre disponibili all'indicatore per il calcolo e corrisponde al numero di barre disponibili sul grafico.

Ad esempio MA5, media di 5 barre, impostata per visualizzare 100 barre. L'indicatore calcolerà dalla 104a alla 100a barra e inizierà a tracciare la linea dalla 100a barra. Quindi rates_total=5, o 100, o 104?

Tassi_totali è il numero di barre del grafico disponibili per il calcolo. In altre parole, è Bars().

prev_calculated è il numero di barre calcolate dall'indicatore alla precedente chiamata a OnCalculate(). È necessario per organizzare i calcoli economici.

Se prev_calculated è uguale a rates_total, significa che non è stato calcolato ancora nulla e che è necessario inizializzare i buffer dell'indicatore ed eseguire un calcolo completo dell'intera storia.

In generale, si può utilizzare la seguente struttura:

//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }
 
Artyom Trishkin #:

rates_total è il numero di barre del grafico disponibili per il calcolo. In altre parole, è Bars().

prev_calculated è il numero di barre che l'indicatore ha calcolato nella precedente chiamata a OnCalculate(). È necessario organizzare i calcoli economici.

Se prev_calculated è uguale a rates_total, significa che non è stato calcolato ancora nulla e che è necessario inizializzare i buffer dell'indicatore ed eseguire un calcolo completo dell'intera storia.

In generale, si può utilizzare la seguente struttura:

Perché non scrivere invece di rates_total - Bars()?

int limit=Bars()-prev_calculated;

Mi scuso, ovviamente, per essere stato un pigro. Sto cercando nella documentazione, in diversi libri su MKL5. Non tutte le sfumature sono spiegate. Neanche nei libri. Separatamente, il linguaggio dei libri è chiaro. Come le costruzioni sono assemblate-capite, cosa da dove e per cosa.... Mi sto appassionando. Un sacco di controlli e doppi controlli. Ho aperto un semplice codice mashki, e ci sono così tante righe. E sembrava che tutto quello che bisognava fare era scaricare un array (o accedervi), calcolare per un valore da tale e quale indice nell'array a tale e quale, e passare attraverso una finestra scorrevole con questi calcoli sull'array indicando per indici da dove a dove. Sì per visualizzare la riga sullo schermo. No.
 
Novichokkk #:

Perché non scrivere Bars() invece di rates_total ?

Mi scuso, ovviamente, per essere stato un pigro. Sto cercando nella documentazione, in diversi libri su MKL5. Non tutte le sfumature sono spiegate. Anche nei libri. Separatamente, il linguaggio nei libri è chiaro. Come le costruzioni sono assemblate-capite, cosa da dove e per cosa.... Mi sto appassionando. Un sacco di controlli e doppi controlli. Ho aperto un semplice codice mashki, e ci sono così tante righe. E sembrava che tutto quello che bisognava fare era scaricare un array (o accedervi), calcolare per un valore da tale e quale indice nell'array a tale e quale, e passare attraverso una finestra scorrevole con questi calcoli sull'array indicando per indici da dove a dove. Sì per visualizzare la riga sullo schermo. E no.

È possibile utilizzare anche una costruzione di questo tipo. Ma perché? Quando ci sono già delle variabili predefinite nei parametri del gestore...

Bars() dovrebbe essere utilizzato quando è veramente necessario, ovvero quando si ottiene il numero di barre disponibili in base a un altro simbolo/timestamp.

 
Artyom Trishkin #:

Anche voi potete utilizzare questo design. Ma perché? Quando ci sono già variabili predefinite nei parametri del gestore...

Bars() dovrebbe essere utilizzato quando è veramente necessario, ovvero quando si ottiene il numero di barre disponibili per un altro simbolo o timeframe.

Artyom, a volte chiunque si stanca e commette errori. Non considerarla una critica, ma rates_total - Bars() sarà sempre zero...

In generale, è molto difficile spiegare a questo personaggio. Una vittima degli USE...

 
Alexey Viktorov #:

Artyom, a volte tutti si stancano e commettono errori. Non considerarla una critica, ma rates_total - Bars() sarà sempre zero...

In generale, è molto difficile spiegare questo personaggio. Una vittima degli USE...

Sì, hai ragione. Non pensavo che qualcuno decidesse di calcolare in questo modo. Ho visto Bars nel calcolo con la coda dell'occhio e ho pensato che fosse al posto di rates_total.

Succede, grazie.

 
Artyom Trishkin #:
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }

Capisco che volevate aiutare la persona, ma a quanto pare per errore l'avete solo confusa.

L'errore di calcolo economico in questo caso è un po' diverso.

for(int i=limit;i<rates_total;i++)
 
Aleksandr Slavskii #:

Capisco che volevate aiutare la persona, ma a quanto pare per errore l'avete solo confusa.

L'errore di calcolo economico in questo caso è un po' diverso.

Secondo lei cosa ho scritto di sbagliato? Giustificatelo, per favore.

Qual è il limite e da dove viene il ciclo nel mio e nel tuo esempio.

 
Novichokkk #:

Perché non scrivere Bars() invece di rates_total ?

In sostanza rates_total e Bars() sono la stessa cosa, solo cheBars() è una funzione, quindi la sua chiamata costerà di più in termini di tempo di esecuzione rispetto alla lettura del valore della variabile rates_total.

 
Artyom Trishkin #:

Cosa pensi che abbia scritto di sbagliato? Giustificatelo, per favore.

Qual è il limite e da dove viene il loop nel mio e nel tuo esempio.

Oops))))))

Non ho visto bene

if(limit>1)

Non ho visto affatto quello che hai scritto.

Mi scuso.