Init()和DeInit()执行顺序 - 页 5

 
Nikolai Semko:


我确实理解这一点。我问的是操作顺序的逻辑问题。而在这里,我们却错过了。有时OnDeinit先被执行(按照外行人的逻辑应该如此),有时OnInit先被执行。

我的理解是,答案在于"在一段时间内(很短的时间),指标的两个副本都是平行存在的 " 这句话。但这并没有使问题变得更加清晰。

OnInit函数 必须在程序中首先执行。

你能举个例子吗,当OnInit->OnDeinit序列不总是被执行时?

 
Andrey Dik:

OnInit函数 应该是在程序中首先执行的。

你能举个例子吗,当OnInit->OnDeinit不总是被执行时?


你可以用主题ERROR.mq5 的作者的一个例子,他在开头就给出了这个 例子。切换TF,看看在专家标签中会发生什么。

 
Nikolai Semko:


你可以使用他在开头给出的ERROR.mq5 的例子

我将在白天使用它。而你个人已经使用了它?
 
Andrey Dik:
我将在今天的过程中进行尝试。你亲自使用过吗?

当然,我是在9个月前使用的。你可以阅读我在这个主题的第8号 评论。
 
Stanislav Korotky:

呃,不,没那么简单。指标位于另一个实体内,即图表/图表,并从属于它(我知道它们之间复杂的一对多关系,但这并不改变观点)。一个图表有自己的生命周期,其中包括某种内部的init和deinit事件,这是指标生命周期的边界。换句话说,一个指标不能超过其图表的寿命。图表的deinit必须等待所有指标的deinit或deinit的timeout。只有这样,新的时间框架的图表初始化才能开始,并从中调用附加指标的初始化。

图表与指标是一样的。指标可以 "活过 "它们的图表。

在一个指标/顾问的OnInit之前,全局对象的构造器被执行。在OnDeinit之后 - 破坏者。因此,你可以从任何指标中删除OnInit和OnDeinit。

唯一的问题是你对指标的想法与现实不匹配。也许,这种行为对于一些无法写出解决方案的自由职业者来说是至关重要的。

我欢迎开发商在这个问题上向前迈出一步。但这里有两种完全可以理解的观点在碰撞,有他们自己的逻辑,应该是这样的。他们中的任何一个都不比另一个更有缺陷。只是有人认为这样做是对的,有人认为那样做是对的。

 

想象一下,如果 改变TF之前,终端等待旧TF的所有指标的卸载,然后才建立和初始化新的TF,那么图表会有多慢。

在什么情况下,除了直接使用图形对象的工作(名称中没有TF的名称),DeInit - Init序列很重要?

 
Andrey Khatimlianskii:

想象一下,如果 改变TF之前,终端等待旧TF的所有指标的卸载,然后才建立和初始化新的TF,那么图表会有多慢。

在什么情况下,除了直接使用图形对象的工作(名称中没有TF的名称),DeInit - Init序列是重要的?


+
 

再一次。当你在图表中改变时间框架或符号时,将创建一个新的指标副本。一个新的

由于同样的原因,指标的计算部分住在历史缓存中。对于每个时间框架都有自己的条形缓存。当你改变时间框架时,例如EURUSD,M1和EURUSD,H1,缓存中的指标M1被发送事件Deinit,原因是3(图表变化),一段时间后这个指标将被卸载。如果这个指标突然没有时间用原因3处理Deinit,它将用原因1(图表关闭)被取消初始化。如果H1缓存在那一刻不存在,那么它将被创建。之后, 指标副本被加载到H1缓存中,并向其发送初始事件。指标的新副本不知道关于前一个副本的任何情况,而这个副本即将死亡。新副本指标的所有变量都是干净的,它们是新诞生的。

如果在单个符号内有时间框架的变化,原则上初始化/去初始化的顺序是可以预测的。下载最新的Build 1580 - 我们在那里纠正了一些事情,现在删除指标是在最后一回合进行的,所以应该不会有过早的脱机现象。但是,如果你改变了符号,你就会得到纯线程间的竞赛,而且你不能明确地预测初始化-去初始化的顺序。由于不同的字符在不同的线程中被处理

因此,为话题的启动提供一个提示。重点关注脱初始化的原因。如果是3,那么你就不需要将颜色方案返回给图表了

 
在改变TF时,是否可以等待所有Deinit,然后启动指标并在其中执行Init?
 
Andrey Khatimlianskii:

想象一下,如果 改变TF之前,终端等待旧TF的所有指标的卸载,然后才建立和初始化新的TF,那么图表会有多慢。

在什么情况下,除了与图形对象的直接工作(名称中没有TF的名字),DeInit - Init序列是重要的?


为什么他们会很慢?除非指标写错了。对于一个写得很好的指标,DeInit需要相当短的时间。此外,TF切换并不是那么频繁的操作。在一些特别严重的情况下(对于 "错误的 "指标),你可以在改变TFs时等待一两秒钟。

因此,关于在TF切换过程中的制动的说法是比较可疑的。此外,当我们切换到尚未建成的TF时,我们也会遇到相当实际的时间延迟。也没有人哭诉航站楼的刹车问题。

原因: