Novo MetaTrader 4 Terminal de Clientes 387 e MetaTrader 4 Data Center construído 387 - página 3

 
AlexSTAL:

Qual é exatamente o seu problema? É o mesmo que era e ainda é... nenhum recálculo em cada tick....


Eu tenho o mesmo que a Junko - todos os indicadores têm otimização. E todo o buffer não é recalculado em cada tick. Se houver reinicialização forçada a cada tique, eles terão que reescrever todos os indicadores. Isso não é um problema? A propósito, repetidamente expressado.

E eu não estou preocupado comigo mesmo. Acontece que um grande número de pessoas usa esses indicadores. Mas eles vão ter problemas reais.

Aqui, por exemplo, http://ruforum.mt5.com/showthread.php?t=374.

Há muitos links para escolher.

 
AlexSTAL:

Eu li sua explicação....

Você mesmo já o testou na prática?

Qual é exatamente o seu problema? É o mesmo que era, e é o mesmo que é agora... nenhum recálculo em cada tick....

Meu preenchimento de buffer indicador foi por condição de mudança. Se houver uma mudança, preencha, se não houver mudança, não a preencha. Não funcionou no 387.

Eu removi a condição e funcionou. Quando não funcionou, vi que o buffer estava cheio de valores padrão (inicializados).

Talvez você não tenha visto as coisas dessa maneira? Não notou ou não é crítico para seu indicador?

Você deve esperar por explicações de Metaquotes.

 

Isto é parte do indicador:

// Если произошёл первый пуск индикатора или предыдущим блоком разрешена развёртка или изменились параметры окна.
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 você não apagou a correspondência da mensagem privada, veja, lá citei exemplos de otimização. Você escreveu então, que é claro para você.

Eu apaguei a correspondência, mas entendo perfeitamente o que é otimização sem ela...

Diga claramente com um mínimo de código o que você teme, mas não reproduziu na realidade...

Esta é uma conversa completamente inana... Nenhum dos meus indicadores me pede para reinicializar os amortecedores em cada carrapato.

É por isso que estou tentando entender do que estamos falando....


a Zhunko: tentarei entender isso mais tarde

 

Aqui foram trocadas algumas linhas no indicador de teste (que afixei para encontrar o erro).

Nenhum amortecedor é recalculado em nenhum carrapato!

Nada mudou em absoluto

Arquivos anexados:
 
AlexSTAL:

Aqui foram trocadas algumas linhas no indicador de teste (que afixei para encontrar o erro).

Nenhum amortecedor é recalculado em nenhum carrapato!

Nada mudou em absoluto

Veja o código. Não há carrapatos. É por isso que não muda. Os carrapatos são necessários a partir da atualização do gráfico.
 
Zhunko:
Veja o código. Não há carrapatos. É por isso que não muda. Você precisa de um tick de uma atualização do gráfico.
O que é um "tick from chart refresh"? Acionado artificialmente ou o quê? Por um API?
 

Aqui está o que tem a última mensagem de tique:

Nenhum amortecedor é atualizado

O número 2147483647 é o valor de tampão na nova barra.

Arquivos anexados:
 
AlexSTAL:
O que é um "tick from chart update"? É acionado artificialmente ou o quê? por um API?

Sim. Esta é a única diferença em nossas condições.

É melhor refrescar não em um indicador, mas em um roteiro em loop.

 
Zhunko:

Sim. Essa é a única diferença em nossas condições.

Descobrimos isso na página 6...

Agora muito interessante, onde o nen causa o tique artificial?