Nuovo MetaTrader 4 Client Terminal 387 e MetaTrader 4 Data Center build 387 - pagina 3

 
AlexSTAL:

Qual è esattamente il suo problema? È lo stesso che era ed è tuttora... nessun ricalcolo su ogni tick....


Ho lo stesso di Junko - tutti gli indicatori hanno un'ottimizzazione. E l'intero buffer non viene ricalcolato ad ogni tick. Se ci sarà una reinizializzazione forzata ad ogni tick, dovranno riscrivere tutti gli indicatori. Non è un problema? Ripetutamente espresso, tra l'altro.

E non sono preoccupato per me stesso. Si dà il caso che un gran numero di persone usi questi indicatori. Ma avranno problemi reali.

Qui, per esempio, http://ruforum.mt5.com/showthread.php?t=374.

Ci sono molti link tra cui scegliere.

 
AlexSTAL:

Ho letto la sua spiegazione....

L'avete provato voi stessi nella pratica?

Qual è esattamente il suo problema? È lo stesso di prima, ed è lo stesso di adesso... nessun ricalcolo su ogni tick....

Il mio indicatore di riempimento del buffer era per condizione di cambiamento. Se c'è un cambiamento, riempilo, se non c'è nessun cambiamento, non riempirlo. Non ha funzionato sulla 387.

Ho rimosso la condizione e ha funzionato. Quando non ha funzionato, ho visto che il buffer è stato riempito con valori predefiniti (inizializzati).

Forse non l'hai vista in questo modo? Non l'hai notato o non è fondamentale per il tuo indicatore?

Dovreste aspettare le spiegazioni di Metaquotes.

 

Questo fa parte dell'indicatore:

// Если произошёл первый пуск индикатора или предыдущим блоком разрешена развёртка или изменились параметры окна.
if (gl_nCounterTeak == 1 || st_bRecalculation == true || st_nWBarsPerChart != tmp_nBarsPerChart || st_nWFirstVisiblBar != tmp_nFirstVisiblBar)
 {// Закрепляем значок вызова свойств индикатора.
  st_nWBeginSearch = st_nWFirstVisiblBar - st_nWBarsPerChart;
  if (st_nWBeginSearch < -1) // Если справа есть свободное пространство, закрепляем значок вызова свойств индикатора.
   {
    GetClientRect(gl_hWindow, st_aiRect); // Расчёт размеров окна.
    gl_adBufIndicator2[0] = 0.35 * (gl_dMaxPositionMark - gl_dMinPositionMark) + gl_dMinPositionMark;
    SetIndexShift(1, - st_nWBeginSearch - 0.5 * ((36 * st_nWBarsPerChart) / st_aiRect[2] - 1));
    SetIndexDrawBegin(1, 0);
   }
  // Устанавливаем развёртку.
  if (st_nWBeginSearch <= 0) st_nWBeginSearch = 0;
  for (i = st_nWFirstVisiblBar; i >= st_nWBeginSearch; i--)
   {// Очищаем буфер от лишних значков для вызова окна свойств индикатора.
    if (i > 0) gl_adBufIndicator2[i] = EMPTY_VALUE;
    // Закрепление вертикальной развёртки графика с помощью индикаторного буфера.
    if (i % 2 == 0) gl_adBufIndicator1[i] = gl_dMaxPositionMark; // Для фиксации верхней координаты дополнительного окна.
    else gl_adBufIndicator1[i] = gl_dMinPositionMark;            // Для фиксации нижней координаты дополнительного окна.
   }
  // Расчёт и создание горизонтальных линий разметки. Создаём один раз и отслеживаем через заданный уровень при увеличениях максимальных уровней.
  // Установка вертикальной развёртки, расчёт и создание горизонтальных линий разметки.
  if ((gl_dMaxPositionMark - gl_dMinPositionMark) != tmp_dDifferPosMark)
   {
    MakingHorizontalSectoring(AutoStep, Color_LNH, Color_LN0, gl_dMaxPositionMark, gl_dMinPositionMark, Step_LNH, 15, Style_LNH, Width_LNH, st_nWindow, gl_sFullNameObject);
   }
 }
 
nen:

Se non hai cancellato la corrispondenza dal messaggio privato, guarda, lì ti ho dato alcuni esempi di ottimizzazione. Lei ha scritto allora che le è chiaro.

Ho cancellato la corrispondenza, ma capisco perfettamente cos'è l'ottimizzazione senza di essa...

Dichiarate chiaramente con un minimo di codice ciò che temete, ma che non avete riprodotto nella realtà...

Questa è una conversazione completamente inane... Nessuno dei miei indicatori mi chiede di reinizializzare i buffer ad ogni tick...

Ecco perché sto cercando di capire di cosa stiamo parlando....


a Zhunko: cercherò di capirlo più tardi

 

Ecco cambiato un paio di linee nell'indicatore di prova (che ho postato per trovare l'errore)...

Nessun buffer viene ricalcolato su nessun tick!

Non è cambiato assolutamente nulla

 
AlexSTAL:

Ecco cambiato un paio di linee nell'indicatore di prova (che ho postato per trovare l'errore)...

Nessun buffer viene ricalcolato su nessun tick!

Non è cambiato assolutamente nulla

Ha guardato il codice. Non ci sono zecche. Ecco perché non cambia. I tick sono necessari per l'aggiornamento del grafico.
 
Zhunko:
Ha guardato il codice. Non ci sono zecche. Ecco perché non cambia. Hai bisogno di un tick da un aggiornamento del grafico.
Cos'è un "tick from chart refresh"? Attivato artificialmente o cosa? Da un'API?
 

Ecco quello con l'ultimo messaggio di spunta:

Nessun buffer viene aggiornato

Il numero 2147483647 è il valore del buffer della nuova barra.

 
AlexSTAL:
Cos'è un "tick da aggiornamento grafico"? È attivato artificialmente o cosa? da un'API?

Sì. Questa è l'unica differenza nelle nostre condizioni.

È meglio aggiornare non in un indicatore, ma in uno script in loop.

 
Zhunko:

Sì, questa è l'unica differenza nelle nostre condizioni.

L'ho capito a pagina 6...

Ora molto interessante, dove il nen causa il tic artificiale?