指示器被破坏 - 页 6 123456 新评论 Rashid Umarov 2011.10.13 04:58 #51 Rosh: 好吧,我等着 20多个小时后,指标正常工作。我不知道该怎么说。 AnkaSoftware 2011.10.13 13:40 #52 Rosh,放大/缩小,向左/右滚动。你在哪个平台上测试64/32位? JC 2011.10.13 16:39 #53 AnkaSoftware:Rosh,放大/缩小,向左/右滚动。你在哪个平台上测试64/32位? 我可以在32位上复制这个一般问题。操作系统似乎与此有关的唯一方法是,为什么你的64位系统似乎在其条形历史的开始或中间定期获得 新数据,而你的32位系统(和RaptorUK的64位系统)却没有。不管怎么说,你似乎打算把你的指标给其他人,而改变条形历史是你在现实生活中肯定会遇到的问题,如果只是因为你的用户遭受经纪商断开连接,导致重新连接时缺少的条形被插入到历史中间。 正如我已经试图解释的那样,这个 "错误 "是在你的代码中还是在MT4中,是有争议的。在MT4中对指标的行为有一个预期,而你的指标并没有这样的行为。例如,当你用MetaEditor创建一个新指标时,它会为你插入一行 "int counted_bars=IndicatorCounted();"。你把这句话去掉,忽略了 IndicatorCounted()。 我可以用下面这个指标来复制一般的问题,这个指标在第一次启动时只是在最后10个柱状高点之间画一条线。 #property indicator_chart_window #property indicator_color1 Red #property indicator_buffers 1 double indicatorvalues[]; void init() { SetIndexBuffer(0, indicatorvalues); } void start() { static bool IsFirstCall = true; if (IsFirstCall) { IsFirstCall = false; for (int i = 0; i < 10; i++) { indicatorvalues[i] = High[i]; } } } 然后你可以通过以下方式复制同样的问题。 * 打开一个任何符号的图表 * 将该指标添加到图表中 * 关闭 "图表自动滚动"(只是为了使下面的步骤更容易;而不是因为它对这个问题有任何影响)。 * 按 "主页",进入图表的起始位置 * 按Page Up键,强制下载额外的数据。(注意:除非这时有一些额外的数据被添加到图表中,否则没有问题。) * 按 "结束 "键,进入图表的最后一页。现在高点之间的红线将不在原位。它将在时间上被向后移动。 [所有这些只是充实了RaptorUK已经确定的内容。] AnkaSoftware 2011.10.14 04:36 #54 好的,你能否确认,在这种缺失条形图/损坏指标的情况下,IndicatorCounted()将返回一个-V的数字?让我尝试 重新初始化指标阵列,并重新绘制回视条的移动。 JC 2011.10.14 05:15 #55 AnkaSoftware: 好的,你能否确认,在这种缺失条形图/损坏指标的情况下,IndicatorCounted()将返回一个-V的数字? 不,正如我在第5页已经说过的,你也可以自己测试一下,当使用上述方法在历史开始时添加新条形图时,MT4会将IndicatorCounted()重置为零。这将导致一个正常的指标重新绘制其所有的历史值,因为它通常会使用Bars和IndicatorCounted()之间的差异来确定哪些条是 "脏 "的,需要更新。如果IndicatorCounted()为零,那么指标就会重新计算每个历史条数,即因为Bars - 0 = Bars。 IndicatorCounted()的文档(https://docs.mql4.com/customind/IndicatorCounted) 提供了一个这样做的例子,还有一些替代版本,如https://www.mql5.com/en/forum/132447,其目的是非常微弱地提高性能,因为https://docs.mql4.com/customind/IndicatorCounted 的标准代码不必要地重新计算一个 "干净 "的条形。 AnkaSoftware 2011.10.20 06:15 #56 增加IndicatorCounted()检查并在IndicatorCounted()返回值为0时重新初始化指标,解决了插入历史或额外条形图 时引起的指标移动问题。 然而,还有一个指标损坏的问题,这似乎不是由插入历史条形图引起的。为了再现这个问题,你需要运行10小时以上,直到至少两次重新初始化指标,即IndicatorCounted()返回0(指标启动后)。 附加的文件: corruptionxtest.mq4 6 kb 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好吧,我等着
20多个小时后,指标正常工作。我不知道该怎么说。
Rosh,放大/缩小,向左/右滚动。你在哪个平台上测试64/32位?
Rosh,放大/缩小,向左/右滚动。你在哪个平台上测试64/32位?
我可以在32位上复制这个一般问题。操作系统似乎与此有关的唯一方法是,为什么你的64位系统似乎在其条形历史的开始或中间定期获得 新数据,而你的32位系统(和RaptorUK的64位系统)却没有。不管怎么说,你似乎打算把你的指标给其他人,而改变条形历史是你在现实生活中肯定会遇到的问题,如果只是因为你的用户遭受经纪商断开连接,导致重新连接时缺少的条形被插入到历史中间。
正如我已经试图解释的那样,这个 "错误 "是在你的代码中还是在MT4中,是有争议的。在MT4中对指标的行为有一个预期,而你的指标并没有这样的行为。例如,当你用MetaEditor创建一个新指标时,它会为你插入一行 "int counted_bars=IndicatorCounted();"。你把这句话去掉,忽略了 IndicatorCounted()。
我可以用下面这个指标来复制一般的问题,这个指标在第一次启动时只是在最后10个柱状高点之间画一条线。
然后你可以通过以下方式复制同样的问题。
* 打开一个任何符号的图表
* 将该指标添加到图表中
* 关闭 "图表自动滚动"(只是为了使下面的步骤更容易;而不是因为它对这个问题有任何影响)。
* 按 "主页",进入图表的起始位置
* 按Page Up键,强制下载额外的数据。(注意:除非这时有一些额外的数据被添加到图表中,否则没有问题。)
* 按 "结束 "键,进入图表的最后一页。现在高点之间的红线将不在原位。它将在时间上被向后移动。
[所有这些只是充实了RaptorUK已经确定的内容。]
好的,你能否确认,在这种缺失条形图/损坏指标的情况下,IndicatorCounted()将返回一个-V的数字?让我尝试 重新初始化指标阵列,并重新绘制回视条的移动。
好的,你能否确认,在这种缺失条形图/损坏指标的情况下,IndicatorCounted()将返回一个-V的数字?
IndicatorCounted()的文档(https://docs.mql4.com/customind/IndicatorCounted) 提供了一个这样做的例子,还有一些替代版本,如https://www.mql5.com/en/forum/132447,其目的是非常微弱地提高性能,因为https://docs.mql4.com/customind/IndicatorCounted 的标准代码不必要地重新计算一个 "干净 "的条形。
增加IndicatorCounted()检查并在IndicatorCounted()返回值为0时重新初始化指标,解决了插入历史或额外条形图 时引起的指标移动问题。
然而,还有一个指标损坏的问题,这似乎不是由插入历史条形图引起的。为了再现这个问题,你需要运行10小时以上,直到至少两次重新初始化指标,即IndicatorCounted()返回0(指标启动后)。