程序库: OnTickMulti - 页 2

 

fxsaber #:

double OnTester()

{return AccountInfoDouble(ACCOUNT_BALANCE); }

这一行是干什么用的?

 
lynxntech #:

这一行是干什么用的?

是为了返回所需余额的数值。

 

你们有没有检查过,在你们的解决方案中,这些 tick 的时间是否同步?

在常规测试中,如果请求不同字符的时标,它们之间会存在1个时标的延迟。为了验证这一点,我制作了每分钟更新一次时标的自定义代码。

 
Rorschach #:

你们有没有检查过,在你们的解决方案中,这些定时器的时间是否同步?

一切运行正常。在标准测试工具中也正常。如果不正常,请展示一下。

 
fxsaber #:
在标准测试器中是正确的。如果不是,请展示一下。

我根据欧元和英镑的分钟K线创建了自定义 tick(为了方便)

欧元那边的显示是正确的,英镑那边则提前了一个点(请查看时间和价格)

附加的文件:
1.mq5  3 kb
 
Rorschach #:

创建了基于欧元和英镑分钟K线的自定义K线图(以便于查看)

欧元盘的 tick 显示正确,英镑盘的 tick 显示提前了一个(请查看时间和价格)

时间相同的报价并非同时到达,而是依次到达。如果时间较晚的EURUSD报价先到达,那么此时还不知道时间相同的GBPUSD报价(即第二个到达的报价)的具体情况。 因此,在第一个EURUSD报价到达时,第二个GBPUSD报价根本不存在,只有前一个GBPUSD报价的数据。
 
fxsaber #:
时间相同的报价不会同时到达。它们都是依次到达的。如果时间较早的欧元兑美元(EURUSD)报价先到达,那么此时对于时间相同、将随后到达的英镑兑美元(GBPUSD)报价,我们尚无任何信息。 因此,在第一个EURUSD报价到达时,第二个GBPUSD报价根本不存在,只有GBPUSD的上一条报价数据。

在模拟器中,这是个缺陷,因为套利交易需要数据同步。

而且不仅限于套利。如果系统基于交易品种之间的相关性,就会出现“预见未来”的情况

 
Rorschach #:

在测试器中,这是个缺点,因为套利交易需要同步进行。

而且不仅限于套利交易。如果系统基于交易工具之间的相关性,就会出现预测未来的情况

针对此类情况,测试器中提供了可配置的执行延迟功能。
 
fxsaber #:
针对此类情况,测试器中提供了可配置的执行延迟。
我的实现比较复杂。我在Inite中使用自定义测试器读取输入并将其写入数组,然后在测试器的OnTick中读取这些输入,并进行同步
 
Rorschach #:

在测试工具中,这算是一个缺点,因为套利交易需要同步进行。

而且不仅限于套利交易。如果系统基于交易工具之间的相关性,就会出现对未来的预测

并不存在“预见未来”的情况,因为如果时间点X存在多个符号的报价更新,那么当其中一个金融工具发生首个事件时,其余符号(其事件仍处于队列中)显示的将是前一个报价更新,而非下一个报价更新 (如示例中所示,00:04发生在00:05之前,而非之后)。

要实现同步,需要在代码中通过算法来保证,例如在 OnTick 处理程序中,在发起交易之前,先查询所有相关符号的 tick 时间。 但原则上,如果套利操作基于 tick(而非 K 线或分钟),那么很难想象能实现可靠的同步,因为某些标的的 tick 数据实际上可能缺失数秒之久。