指标中的OnDeinit - 页 5

 
mql5:
我将尝试再次解释(用手指)。
  1. 终端在上次启动后的X时间内启动了
  2. 启动历史记录下载,该记录缺失(终端闲置了X分钟)。
  3. 在可用的历史记录上为指标调用OnCalculate,prevtime = 最后已知的历史时间,指标缓冲区大小为N条。
  4. 在从服务器下载历史记录时,会出现一个勾。
  5. 调用指标的OnCalculate,其中Time[0]是一个tick时间,指标将其记为prevtime,指标的缓冲区大小为N+1条(在N和N+1条之间有一个历史间隙)。
  6. 历史记录下载完毕后,再次调用OnCalculate,但这次历史记录中没有洞,但prevtime的日期与Time[0]相同--没有新的bar(分别是没有清除指标中的缓冲区),指标N+X/Timeframe bars的缓冲区大小和IndBuffer[0]与步骤5中不相同



前期时间与此有什么关系?

我是在问为什么它不工作。

/////////////////////////////////////
void OnDeinit(const int reason)
{
 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);


}
 
eevviill:

这与prevtime有什么关系?

我问的是为什么它不起作用。

那你怎么知道它不起作用呢?你如何检查?

还有,为什么在卸载之前要初始化指标缓冲区?它已经被卸下了,不是吗?

指标缓冲区应 在所有指标值完全重新计算后进行初始化

int OnCalculate(..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1>)
   {
      ArrayInitialize(...);
   }
   ...
}
 
eevviill:

在这里。我为此做了一个缓冲器归零。Inite已经说过你不能这样做。

我想退出。但它在那里也不起作用。为什么?

init()和deinit()有什么关系?手术需要在相当不同的地方进行。我将再次重复这一点。计算之后,历史加载

我做了一个工作版本。

附加的文件:
 
Scriptong:

你怎么知道它是否不工作?你如何检查?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin:

init()、deinit()有什么关系?其他地方也需要这项行动。我再重复一遍。计算后,历史被加载。

制作了一个工作版本。

在你的建议下,我第一次还是做对了。

我想知道为什么deinit对数组的归零不起作用?

 
eevviill:
https://forum.mql4.com/ru/65066/page2#1015138

你给了一个在OnCalculate 中工作的代码链接。我问的是你怎么知道DeInit中的初始化不起作用。让我说明一下,以防万一,在OnDeinit()之后,指标代码中的任何内容都不会起作用(OnInit()和OnCalculate()都不会。)因此,你可以只在OnDeinit()本身检查数组的归零情况。

 
Scriptong:

你给了一个在OnCalculate中工作的代码链接。我问的是你怎么知道DeInit中的初始化不起作用。让我说明一下,以防万一,在OnDeinit()之后,指标代码中的任何内容都不会起作用(OnInit()和OnCalculate()都不会。)因此,你只能在OnDeinit()本身中检查数组归零的事实。

我已经提供了一个链接到

操作打开图表-连接 M1指示器-关闭终端-在几分钟内打开。结果是在截图上。

这就是我的测试方法。

 
eevviill:

在你的建议下,我第一次还是做对了。

我想知道为什么deinit在数组归零时不工作?

或者当终端关闭 时,deinit不起作用?
 
eevviill:
还是当终端关闭时,deinit不起作用?
它确实如此,但清除指标缓冲区 没有意义--它们没有被保存。
 
mql5:
它是有效的,但清除指标缓冲区是没有意义的--它们没有被保存。

为什么?

为什么缓冲区0的值被填充保存但没有归零?