新的MetaTrader 4客户终端387和MetaTrader 4数据中心构建387 - 页 3

 
AlexSTAL:

你的问题到底是什么?过去和现在都一样......每次勾选时不需要重新计算....


我的情况和顺子一样--所有指标都有优化。而且,整个缓冲区并不是在每个刻度 上都重新计算的。如果在每一个刻度上都要强制重新初始化,他们将不得不重写所有的指标。这不是一个问题吗?顺便说一下,重复的声音。

我也不担心自己。恰好,有大量的人使用这些指标。但他们会有真正的问题。

在这里,例如,http://ruforum.mt5.com/showthread.php?t=374。

有大量的链接可供选择。

 
AlexSTAL:

我读了他的解释....

你自己在实践中测试过吗?

你的问题到底是什么?过去是这样,现在也是这样......每次勾选时不需要重新计算....

我的指标缓冲器的填充是按变化条件来进行的。如果有变化,就填补,如果没有,就不要填补。它在387上不起作用。

我去掉了这个条件,它就成功了。当它没有工作时,我看到缓冲区被填上了默认值(初始化)。

也许你没有这样看待它?没有注意到或者对你的指标来说不是很关键?

你应该等待Metaquotes的解释。

 

这是该指标的一部分。

// Если произошёл первый пуск индикатора или предыдущим блоком разрешена развёртка или изменились параметры окна.
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:

如果你没有从私人信息中删除通信,看,那里我已经举出了优化的例子。你当时写道,对你来说,这很清楚。

我删除了这些信件,但我完全明白,没有这些信件,什么是优化......

用最少的代码清楚地说明你所害怕的东西,但在现实中没有再现......

这是一个完全无意义的对话...我的所有指标都没有要求我在每一个刻度 上重新初始化缓冲区...

这就是为什么我试图了解我们正在谈论的内容....。


对Zhunko说:我以后会试着理解它的。

 

这里改变了测试指标中的几行(我发帖是为了找到这个错误)...

缓冲区在任何时间都不会被重新计算!

完全没有变化

附加的文件:
 
AlexSTAL:

这里改变了测试指标中的几行(我发帖是为了找到这个错误)...

缓冲区在任何时间都不会被重新计算!

完全没有变化

看了一下代码。没有虱子。这就是为什么它不会改变。需要从图表更新中获得刻度线。
 
Zhunko:
看了一下代码。没有虱子。这就是为什么它不会改变。你需要一个来自图表更新的刻度。
什么是 "来自图表刷新的刻度"?人为触发的还是什么? 通过API?
 

这里是有最后一个勾选信息的那个。

没有缓冲区被更新

数字2147483647是新条上的缓冲值。

附加的文件:
 
AlexSTAL:
什么是 "来自图表更新的刻度"?它是人为触发的还是什么? 由API触发的?

是的,这是我们条件的唯一区别。

最好不要在指标中刷新,而是在一个循环的脚本中刷新。

 
Zhunko:

是的,这就是我们条件的唯一不同。

在第6页想明白了......

现在非常有趣的是,念是在哪里引起的人工抽搐?

原因: