Nuevo terminal de cliente de MetaTrader 4 387 y centro de datos de MetaTrader 4 build 387 - página 3

 
AlexSTAL:

¿Cuál es exactamente su problema? Es lo mismo que era y sigue siendo... no hay recálculo en cada tick....


Me pasa lo mismo que a Junko, todos los indicadores tienen optimización. Y no se recalcula todo el buffer en cada tic. Si hay una reinicialización forzada en cada tick, tendrán que reescribir todos los indicadores. ¿No es un problema? Repetidas veces, por cierto.

Y no estoy preocupado por mí mismo. En efecto, un gran número de personas utilizan estos indicadores. Pero van a tener verdaderos problemas.

Aquí, por ejemplo, http://ruforum.mt5.com/showthread.php?t=374.

Hay muchos enlaces para elegir.

 
AlexSTAL:

Leí su explicación....

¿Lo has probado tú mismo en la práctica?

¿Cuál es exactamente su problema? Es igual que antes, y es igual que ahora... no hay recálculo en cada tick....

Mi llenado de la memoria intermedia del indicador fue por condición de cambio. Si hay un cambio, llénalo, si no hay cambio, no lo llenes. No funcionó en la 387.

He eliminado la condición y ha funcionado. Cuando no funcionó, vi que el buffer se llenó con valores por defecto (inicializados).

¿Quizá no lo has visto así? ¿No se ha dado cuenta o no es crítico para su indicador?

Debe esperar las explicaciones de Metaquotes.

 

Esto es parte del 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:

Si no has borrado la correspondencia de los mensajes privados, mira, allí di ejemplos de optimización. Usted escribió entonces, que está claro para usted.

He borrado la correspondencia, pero entiendo perfectamente lo que es la optimización sin ella...

Exponga claramente con un mínimo de código lo que teme, pero que no ha reproducido en la realidad...

Esta es una conversación completamente inane... Ninguno de mis indicadores me pide que reinicie los buffers en cada tick...

Por eso estoy tratando de entender de qué estamos hablando....


a Zhunko: Trataré de entenderlo más tarde

 

Aquí se han cambiado un par de líneas en el indicador de prueba (que publiqué para encontrar el error)...

No se recalculan los búferes en ningún momento.

Nada ha cambiado en absoluto

Archivos adjuntos:
 
AlexSTAL:

Aquí se han cambiado un par de líneas en el indicador de prueba (que publiqué para encontrar el error)...

No se recalculan los búferes en ningún momento.

Nada ha cambiado en absoluto

He mirado el código. No hay garrapatas. Por eso no cambia. Los ticks son necesarios desde la actualización del gráfico.
 
Zhunko:
He mirado el código. No hay garrapatas. Por eso no cambia. Necesitas un tick de una actualización del gráfico.
¿Qué es un "tick de actualización del gráfico"? ¿Activado artificialmente o qué? ¿Por una API?
 

Este es el que tiene el último mensaje de tic:

No se actualiza ninguna memoria intermedia

El número 2147483647 es el valor del buffer en la nueva barra.

Archivos adjuntos:
 
AlexSTAL:
¿Qué es un "tick de actualización del gráfico"? ¿Se activa artificialmente o por medio de una API?

Sí. Esta es la única diferencia en nuestras condiciones.

Es mejor actualizar no en un indicador, sino en un script en bucle.

 
Zhunko:

Sí. Esa es la única diferencia en nuestras condiciones.

Lo descubrí en la página 6...

Ahora bien, muy interesante, ¿dónde provoca el nen el tic artificial?