指示器被破坏 - 页 3

 
AnkaSoftware:

JIC,请注意这个问题在32位平台上不会发生。我在先前的一个帖子中提供了一些代码。

你有两台(或更多)独立的机器,它们接收的数据不一定完全相同。例如,64位系统可能在一个繁忙的VPS节点上,该节点偶尔会失去流量和/或连接,例如,因为物理节点是在处理器使用或带宽的极端情况下运行。(还有许多其他可能的解释;这只是其中之一)。

在你明白为什么当M1柱状图出现空隙时,不管是什么紫线的绘制都会停止,那么我就会把其他一切都当作巧合。

最后,我要回到我的开场白:没有理由64位的Windows会导致任何像你所描述的那样的问题。很多人在这个论坛上提出报告,说MT4在X、Y、Z平台上不能正常工作,最后才发现是他们的代码出了问题。你要么是在一个成熟的软件中发现了几年来第一个真正意义上的MQL4错误,这个软件被数百万人使用,要么就是你的代码有问题。从目前的证据来看,绝大多数的可能性是--例如,你分别报告说问题发生在16小时后或3-4小时后--问题是由数据的偶尔波动引起的,而你没有正确地加以处理。
 

AnkaSoftware:

a) 指标的破坏只发生在Windows 64位平台上

d) 代码使用如下

声明

<代码

#property indicator_chart_window



  1. 在Vista/Win7上不要安装在\Program Files*中
  2. void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
    double a = (endlevel - startlevel) / (start - end);
    double y;
    int bar;
    for(int x = 0; x <= start - end; x++) {
    y = a * x;
    bar = start - x;
    serie[bar] = startlevel + y;
    }
    }
    不知道你在这里想做什么。首先,你计算了很多数值(开始...结束),但只存储了一个(serie[bar]),我的编码是。
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
附上样本指标,它可以重现这个问题。在64位Windows平台上,将指标附在M1图表上,并让它运行4个小时以上。
附加的文件:
 
AnkaSoftware:
附上样本指标,它可以重现这个问题。在64位Windows平台上,将指标附在M1图表上,并让它运行4个多小时。
对不起,我没有耐心把一台干净的64位机器分配给它,然后等待4个多小时。

然而,如果这个指标真的再现了这个问题,那么我必须同意,这很有趣。我无法立即看出任何内部问题可能隐藏在哪里。(假设像以前一样,你已经明确排除了问题发生与最近MT4和经纪商之间连接的突发事件之间的关联性。你提到了你对CNS的信任;你还没有确认MT4日志中没有提到连接问题,而连接问题又可能导致回填交易记录)。

如果你想追究MT4的问题,那么它似乎最有可能与通过参考传递指标数组有关。MQL4中的数组有一些奇怪的属性,比如说总是静态的,我想可能是有一个奇怪的潜在问题,那就是通过引用来传递特殊的指标缓冲区数组,这只在Win64上引发了问题。尽管在这种情况下,为什么操作系统会产生差异,这仍然是一个完全的谜。

我会尝试改变DrawMoveEx(),这样它就不再需要对指标数组的引用,而是有单独的函数,如DrawMoveEx_Down1()、DrawMoveEx_Up1()等,它们只是将缓冲区作为全局变量来处理。如果这有什么不同,那么,恭喜你,你几乎肯定发现了一个MT4的错误。可能是今天的第二个错误
 
AnkaSoftware:
附上样本指标,它可以重现这个问题。在64位Windows平台上,将指标附在M1图表上,让它运行4小时以上。
在Windows 7 Ultimate 64位上运行了5个多小时,没有问题。
 
RaptorUK:
在Windows 7 Ultimate 64位上运行了5个多小时,没有问题。

JIC a) 根据你的建议,修改了代码,删除了 传递的引用,但没有解决这个问题。修改后的代码附在后面。

b) 你所说的缺失条形图,很可能是由于没有交易条件,因此经纪人没有发送条形图。IMHO,在失去连接的情况下,一旦连接恢复,缺失的条形图就可以得到。如果你看到我的示例代码,不存在对条形连续的依赖性。

Raptor, 谢谢你的测试。也许你需要加入进来才能看到这个错误。我能够在Windows Server 2008 R2 Enterprise上重现这个问题。所以可能是操作系统的问题。有什么想法吗,从哪里可以得到一个特定平台的MT4推荐补丁列表。

.

附加的文件:
 
AnkaSoftware:

有什么想法吗,从哪里可以得到一个特定平台的MT4推荐补丁列表。

没有这样的东西存在。只有一个版本的MT4可以在所有版本的Windows上运行,没有特别的理由需要多于一个版本。没有特定操作系统的版本或补丁。
 
AnkaSoftware:
附上样本指标,它可以重现这个问题。在64位Windows平台上,将指标附加到M1图表上,让它运行4个多小时。
据我所知,它仍然运行正常 ......我怎样才能再现这个错误?
 
RaptorUK:
就我所知,仍然运行正常 ......我怎样才能重现这个错误?
你不需要做任何事情。除了放大图表,看看是否发生了错误。
 
AnkaSoftware:
你不需要做任何事情。除了放大图表,看看是否发生了错误之外。

如果我寻找的是似乎与图表栏断开的线(根据你的第一个帖子),那么我就没有得到任何问题。

原因: