自定义符号。误差、错误、问题、建议。 - 页 28

 

就在几天前,我在创建一个自定义符号 时遇到了这个错误。用手重新检查了很多东西。我还注意到一个非常奇怪的bug,在ArrayCopy之后,一些ticks得到了随机的值。因为在干净的机器上重复是相当痛苦的,我已经从铸模中生成了另一个合成的自定义的,最近对这里的报告的态度很特别,即完全无视,我还没有开始做报告。但通过对CustomTicksAdd 的一次调用就解决了这个问题。也就是说,所有的音符一开始都填在一个数组里,然后手动复制,再通过调用自定义符号来实现。这样,就不会出现错误了。试试吧。

P.S. 我应该补充的是,我在使用CopyTicks时遇到了各种奇怪的bug,我已经换成了CopyTicksRange。

 
fxsaber:

更仔细地看了一下代码。你在接收部分的时候,缺少刻度。当Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0 时,这种情况是可能的。

相应地,当你添加一个跳线时,标志可能不匹配。


我在这个测试中有意省略它,以保证没有重叠,因为问题的病因还不清楚,它可能是由重复的蜱虫引起的(通过与Andrey的类比,我决定用 "快速和肮脏 "的方法排除这种可能性)。

关于旗帜,请详细说明。符号的内容(包括标志)从未改变,我没有读到任何关于标志对符号序列的影响。至少,错误代码的 描述中没有说到旗语。

 
Stanislav Korotky:

关于旗帜,请详细说明。没有人改变ticks的内容(包括标志),我也没有看到任何关于标志对ticks序列的影响。至少错误代码的 描述中没有说什么标志。

至于旗帜,这是一个假设。前段时间,我遇到了一个问题,所以我在发送之前自己生成了外部标记的标志。


例如,通过后的第一个tick有一个不同的买入价,但没有关于它的标志。

 

不清楚为什么要使用这一行,如果在其他地方没有使用带有ms增量的变量_start。
而当函数退出时,它被销毁。
正如我所看到的,在任何地方都没有使用或记住时间转移。
,而你为什么要给这个作为输入变量的_start变量分配东西。
它将把这个值返回给while函数,在使用过程中出现了死锁。
所以,代码是相当混乱和不清楚的。或者我不理解这个结构))。

_start = array[size - 1].time_msc + 1;
 
Roman:

不清楚为什么这一行,如果变量_start的ms递增为1,就没有在其他地方使用。
而当函数退出时,它被销毁。
正如我所看到的,在任何地方都没有使用或记住时间转移。
,而你为什么要给这个作为输入变量的_start变量分配东西。
它将把这个值返回给while函数,在使用过程中出现了死锁。
所以,代码是相当混乱和不清楚的。或者,也许我不理解这种结构))。

这个变量引用被扔在一个来自调用代码的函数参数中 "到位",不断变化并在迭代中使用。

 
fxsaber:

关于旗帜--一个假说。有一次,他们出现了问题,所以对于第三方标记,我在发送前自己生成了标记。


例如,通过后的第一个tick有一个不同的买入价,但没有关于它的标志。

这个想法很清楚。但如果没有MQ的解释,这一切都将停留在我们的猜测层面(就对这个或那个错误的出现可能产生的影响而言)。

 
Stanislav Korotky:

这个变量引用--从调用代码中 "就地 "抛出一个函数参数,不断变化并在迭代中使用。

是的,我没有注意到这个参考,想为它提供,但它就在那里。
尽量明确地分配一个变量,以节省增加的时间。

 

新的谜团。2507版的CopyTicks出现问题,在旧版(尤其是2374版)上工作正常。

把它减少到应用程序中的一个简单测试脚本。它问的是自上一次投票以来的新刻度。

在第一次成功的循环传递后不久,脚本就开始向数组复制时间,时间比从参数中指定的慢,即从当前日期的开始。

有什么问题呢?

附加的文件:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

新的谜团。2507版的CopyTicks出现问题,在旧版(尤其是2374版)上工作正常。

把它减少到应用程序中的一个简单测试脚本。它问的是自上一次投票以来的新刻度。

在第一次成功的循环传递后不久,脚本就开始向数组复制时间,时间比从参数中指定的慢,即从当前日期的开始。

有什么问题呢?

我确认2509中的错误。

这个变体似乎并没有失败。

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
自定义符号 的模糊性。可以创建两个只有字母大小写不同的符号(例如,"xEURUSD "和 "XEURUSD"),但在 "重复 "中添加引号并不奏效--CustomRatesUpdate返回0,没有错误。我们需要允许区分大小写的名字(为了让这种字符完全发挥作用),或者不让这种 "类似 "的名字被创建。