[解决]当从不同工作时间段的指标中调用/创建指标时,指标不能正确实例化。 - 页 2

 
Alain Verleyen:

你在重复 "实例化失败",但这并不准确。指标在所有情况下都被实例化了。

问题是数据不能同步提供,你必须处理它。这不是一个MT5的错误,而是一个功能。

我建议停止讨论,等待SD的答复。

也许我没有正确地说明,无论有多少个循环和等待,你都无法访问指标数据(不同的TF),直到(*编辑)OnCalculate()的第一次传递之后

我完全愿意接受我可能是错的,这就是为什么我有10美元的赏金,如果你能证明不是这样。请......证明我错了。我需要一个解决这个愚蠢错误的方法,对不起,我是说 "功能"。

 
nicholishen:

也许我没有正确地阐明,无论有多少个循环和等待,你都无法访问指标数据(不同的TF),直到(*编辑)OnCalculate()的第一次传递之后

我完全愿意接受我可能是错的,这就是为什么我有10美元的赏金,如果你能证明不是这样。请......证明我错了。我需要一个解决这个愚蠢错误的方法,对不起,我是说 "功能"。

为什么你在第一次 "通过 "时就需要它?如果需要的数据不可用,那就等到它们可用的时候,就是这样。
 
Alain Verleyen:
为什么你在第一次 "通过 "时就需要它?如果所需的数据不可用,那就等到它们可用的时候,就是这样。

因为我正在开发一个指标,该指标需要访问不同时间段的同一指标(同一符号)的数据。 由于它要在第二个tick之后才会处理,这意味着该指标将不能 离线工作,只有在第二个tick到来时才能工作。

为什么我们要因为这个错误而妥协呢?有什么好处让你如此愤怒地捍卫它?

 
nicholishen:

因为我正在开发一个指标,该指标需要访问不同时间段的同一指标(同一符号)的数据。 由于它要在第二个tick之后才会处理,这意味着该指标将不能 离线工作,只有在第二个tick到来时才能工作。

为什么我们要因为这个错误而妥协呢?有什么好处让你如此愤怒地捍卫它呢?

???

我没有为任何东西辩护,当然也没有 "愤怒地"。请保持冷静。

 
Alain Verleyen:

???

我没有为任何东西辩护,当然也没有 "愤怒地"。请保持冷静。

关于交易、自动交易系统和测试交易策略的论坛

[MQL5 BUG]当从不同工作时间段的指标中调用/创建指标时,指标不能正确实例化。

Alain Verleyen, 2017.01.31 12:46

好吧你不相信我,那是你的权利,但你错了

我只能建议你写信给ServiceDesk,并请在这里报告他们的答复。


好吧。

我发布这个工作,是为了防止有人有兴趣来做这个工作。

https://www.mql5.com/en/job/57516

 
nicholishen:

这意味着,如果数据可以立即提供给脚本或EA,那么它同样可以提供给指标(因为这不是一个数据可用性问题)。指标只是在OnCalculate()的第二次传递(也就是第一个tick)之前未能实例化。

你对 "可用性 "这个词的理解过于简单。虽然一些数据可以存在于终端内存中,但终端本身可能包含一些同步逻辑,在检查一个(可能是另一个)时间框架的基础数据时,阻止任何 时间段的更新。或者他们可以阻止来自一个指标的数据请求,直到它完成自己的创建(请记住,指标是由所谓的手柄管理的,而专家和脚本则不是),这对我来说是合乎逻辑的。这些只是我的猜测,我是从MQ开发者的角度做出的。你可以直接通过服务台问他们。

由于第3点的原因,你的工作不可能完成。

3.必须在初始化时访问缓冲区

这只是违背了终端的架构和文档

你不能在指标数据创建后立即引用它,因为计算指标值需要一些时间。

也请阅读CopyBuffer 函数。

注意

当向指标请求数据时, 如果请求的时间序列尚未建立或需要从服务器下载,该函数将立即返回-1,但下载/建立的过程将被启动。

当从专家顾问或脚本请求数据时,如果终端本地没有这些数据,将开始从服务器下载,或者如果可以从本地历史建立数据但还没有准备好,将开始建立所需的时间序列。该函数将返回在超时到期时将准备好的数据量

因此,专家和脚本是同步处理的,直到预定义的超时,但指标是异步的。

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
至于你的具体任务,它可以很容易地以其他方式完成。你不是第一个在指标上 建立一个指标 并希望它能离线工作的人。使用一个计时器。
 
Stanislav Korotky:
至于你的具体任务,它可以很容易地以其他方式完成。你不是第一个在指标上建立一个指标并希望它能离线工作的人。使用一个计时器。
试过了。不起作用。
 
nicholishen:
试过了。不起作用。
发表更具体的问题,并附上示例代码。这可能是错误的。这个方法对我有用。
 
Stanislav Korotky:
发表更具体的问题,并附上示例代码。这可能是错误的。这个方法对我有用。
我不明白我怎么能比我已经说得更具体......

无论多少计时器或循环都不能克服这样一个事实:在Oncalculate至少返回一次之后,指标才会实例化。递归也不起作用。