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

 
nicholishen:

...

我想特别感谢你的帮助......如果不是你的居高临下,我不知道我在哪里能找到继续努力的动力!/s

我在这里看到过几十个像你这样的人。他们知道所有的东西都比别人好,他们不听,他们把自己的错误推给别人(其他用户,版主,经纪人,平台,Metaquotes,操作系统,或其他...)。

看来你在这里没有学到任何东西。这不是一个错误,这是开发人员对其平台的构想。我理解你为什么说这是一个bug,我几年前就发现了MT5和它的工作原理。如果你考虑到这一点并接受它,你会更快地看到问题所在:你的方法和你的理解。

但不是,你仍然继续说这是一个 "错误 "或 "重大缺陷",这实在是太可笑了。MT5架构使用异步函数 行为,使这个平台比MT4快得多,当然,处理起来并不容易。Metaquotes在这方面的主要错误是不完整的、不可理解的或缺乏的文件。

当你不明白的时候,你应该听其他的(比如Stanislav和我),当然不能侮辱那些试图帮助你的人。

 
Alain Verleyen:

我在这里看到过几十个像你这样的人。他们知道所有的东西都比别人好,他们不听,他们把自己的错误推给其他人(其他用户,版主,经纪人,平台,Metaquotes,操作系统,或其他...)。

看来你在这里没有学到任何东西。这不是一个错误,这是开发人员对其平台的构想。我理解你为什么说这是一个bug,我几年前就发现了MT5和它的工作原理。如果你考虑到这一点并接受它,你会更快地看到问题所在:你的方法和你的理解。

但不是,你仍然继续说这是一个 "错误 "或 "重大缺陷",这实在是太可笑了。MT5架构使用异步函数 行为,使这个平台比MT4快得多,当然,处理起来并不容易。Metaquotes在这方面的主要错误是不完整的、不可理解的或缺乏的文件。

当你不明白的时候,你应该听其他的(比如Stanislav和我),当然不能侮辱那些试图帮助你的人。

在一个单线程上运行所有的指标,除了设置一个定时器之外,没有一个递归调用下一个迭代的方法,这是一个缺陷。你想说说速度吗?我没有把处理放回队列中,而是花了一个额外的毫秒来解决这个问题。也许这不是世界末日,但还是需要一个解决方法。我非常感谢那些帮助我理解这个变通方法的人,以及为什么在平台的限制下有必要这样做。然而,我仍在努力理解,除了居高临下的态度,你还为讨论带来了什么。
 
nicholishen:
在一个单线程上运行所有的指标,除了设置定时器外,没有递归调用下一个迭代的方法,这是一个缺陷。你想说说速度吗?我没有把处理放回队列中,而是花了一个额外的ms来解决这个问题。也许这不是世界末日,但还是需要一个解决方法。我非常感谢那些帮助我理解这个变通方法的人,以及为什么在平台的限制下有必要这样做。然而,我仍在努力理解,除了居高临下的态度,你还为讨论带来了什么。

我发现你非常激进。从一开始,我只是想向你解释发生了什么,从我多年使用MT5的经验来看。我不是居高临下,我有技术,也做过实验,我应该得到尊重(和每个人一样)。这只是从第14号帖子中,我看到你想让它在没有新刻度线的情况下工作,但在同一帖子中,我感到被你的 "狂热 "一词所攻击,所以我放弃了。

无论如何,这个话题已经结束了,感谢你促使我学习新的东西

 

我为这个问题抓耳挠腮了好久。

对于其他遇到这个问题的人来说,似乎有一个简单的解决方法。

添加一个模块级变量(RunOnce)来确定我们何时第一次运行OnCalculate。在第一次运行时,返回0并设置变量为真,以防止进一步的中断。


bool RunOnce = false;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


这对我来说非常有效,我希望它也能帮助你。

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
谢谢你提供的解决方案