测试 "CopyTicks"。 - 页 43

 
fxsaber:
当CopyTicksRange正确地返回所有请求的ticks,但LastError == ERR_HISTORY_TIMEOUT(4403)时,面临着错误。


这不是一个错误,是一个特点。有时,CopyTicks也是如此。我还没有搞清楚如何使用这个 "东西"。

在CopyTicksRange函数的描述中。

ERR_HISTORY_TIMEOUT – время ожидание синхронизации тиков вышло, функция отдала всё что было.

当然,我希望开发者能解释一下,当用CopyTicks函数收到一个tick时,这个错误意味着什么。如何处理这个错误。ps:我在一个指标中调用它

 

请告知需要提供哪些数据才能尽快解决这个问题?

void OnStart()
{
  MqlTick Ticks[];

  Print(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:29' * 1000, (ulong)D'2020.04.11' * 1000)); // 8192
  Print(_LastError); // 4407

  ResetLastError();

  MqlTick Ticks2[];

  Print(CopyTicksRange(_Symbol, Ticks2, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:30' * 1000)); // 131066
  Print(_LastError); // 0
}


Tiki没有复制,给出了一个错误。

恒定

价值

描述

误差_history_small_buffer

4407

接收阵列太小,无法容纳所有请求的数据


有了这样的惊喜,就不可能正常工作了!


通过GUI(CTRL+U),可以毫无问题地获取刻度线。

搜索字符串:Oshibka 007。
 
fxsaber:

请告知需要提供哪些数据才能尽快解决这个问题?

Tiki没有复制,给出了一个错误。

恒定

价值

描述

误差_history_small_buffer

4407

接收阵列太小,无法容纳所有请求的数据

以各种方式在本地测试--到目前为止没有回放。需要更多细节。

1.什么版本的终端?

2.你在使用什么服务器?

3.脚本是在哪个角色上调用的?

4.如果不是用COPY_TICKS_INFO而是用COPY_TICKS_ALL来调用,那么错误ERR_HISTORY_SMALL_BUFFER也会被设置?

谢谢你!

 
Anton:

以各种方式在本地测试--到目前为止没有回放。需要细节。

1.什么版本的终端?

2.你在使用什么服务器?

3.脚本是在哪个角色上调用的?

4.如果你没有用COPY_TICKS_INFO而是用COPY_TICKS_ALL调用它,是否也会出现ERR_HISTORY_SMALL_BUFFER错误?

谢谢你!

  1. 2380.
  2. 任何服务器 - 见第3点。
  3. 自定义符号
  4. 标志不会改变行为。

ZS 在拖车上是定制的。从json创建符号,导入ticks,在这个符号图上运行脚本。请写出是否转载。

附加的文件:
EURUSD.zip  896 kb
 
fxsaber:

请写出是否播放。

是的,它在2380上回放。

非常感谢您!梳理一下。

 
fxsaber:

  1. 2380.
  2. 任何服务器--见第3点。
  3. 自定义符号。
  4. 标志不会改变行为。

ZY 拖车是定制的。从json创建符号,导入ticks,在这个符号的图表上运行脚本。请写出它是否复制了。


再次感谢。

是的,在2380年,这个问题被意外地引入,然后很快被修复。但它成功地进入了Build 2380。

不幸的是,从那时起,新版本的MetaQuotes-Demo还没有全部修复。

你可以回滚到以前的任何版本,或者等待MetaQuotes-Demo的下一个版本。
 
Anton:
你可以回滚到以前的任何版本,或者等待MetaQuotes-Demo的下一个版本。

谢谢,目前,以前的建设是真实的。2380已经做了很多...

 

MT5最新发布的版本为2361。附上一个自定义的符号。 从json创建一个符号,导入ticks,在这个符号的图表上运行EA。

EA

void OnTick()
{
  MqlTick Tick={0};
  if(SymbolInfoTick(_Symbol,Tick))
  {
    MqlTick OldTicks[];
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
    Print(GetLastError());
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
    Print(GetLastError());
  }
  ExpertRemove();
}

参数

[Tester]
Expert=test.ex5
Symbol=AUDNZD.RannForex
Period=M1
Optimization=0
Model=4
FromDate=2020.04.08
ToDate=2020.04.09
ForwardMode=0
Deposit=10000000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0

1.净额结算账户。

1.1.在给定的日期下,输出类似于真实:2000 0 2000 0。

1.2.当日期改为07.04.2020-08.04.2020时,输出变得很奇怪:-1 4004 1 0。

首先,为什么在第一种情况下会出现错误?第二,为什么第二种情况只需要1个勾?勾选请求的日期没有改变。

2.对冲账户。

2.1.通过给定的日期,输出变得很奇怪:2000 0 1 0。

为什么第二种情况只需要1个勾?勾选请求的日期没有改变。

2.2.当日期变为07.04.2020-08.04.2020时,输出将停止奇怪,但相同的是:2000 0 1 0。


因此问题:为什么固定参数的CopyTicks不仅取决于测试日期,还取决于账户类型?或者我不明白什么,我做错了什么?

这使得它很难工作,如果可能的话,请纠正。你是否设法重现了它?你还需要从我这里得到什么东西才能重现吗?谢谢你。

附加的文件:
AUDNZD.zip  2448 kb
 
traveller00:

因此,问题是:为什么固定参数的CopyTicks不仅取决于测试日期,而且还取决于账户类型?还是我误解了什么,做错了什么?

对账户类型的依赖--你可以大致想象一下原因。我不会说这是正确的。交换符号与最后的历史 - 开发人员需要考虑好,一旦有了,如何处理它们的对冲,等等。

我自己在Tester中没有使用CopyTicks。最初的24小时并不重要。如果你真的需要明确的交易信号,那么就不要在第一天进行交易。

 
traveller00:

MT5最新发布的版本为2361。附上一个自定义符号。 从json中创建一个符号,导入ticks,在这个符号的图表上运行EA。

EA

参数

1.净额结算账户。

1.1.在给定的日期下,输出类似于真实:2000 0 2000 0。

1.2.当日期改为07.04.2020-08.04.2020时,输出变得很奇怪:-1 4004 1 0。

首先,为什么在第一种情况下会出现错误?第二,为什么第二种情况只需要1个勾?勾选请求的日期没有改变。

2.对冲账户。

2.1.通过给定的日期,输出变得很奇怪:2000 0 1 0。

为什么第二种情况只需要1个勾?勾选请求的日期没有改变。

2.2.当日期变为07.04.2020-08.04.2020时,输出将停止奇怪,但相同的:2000 0 1 0。


因此问题:为什么固定参数的CopyTicks不仅取决于测试日期,还取决于账户类型?或者我不明白什么,我做错了什么?

这使得它很难工作,如果可能的话,请纠正。你是否设法重现了它?你还需要从我这里得到什么东西才能重现吗? 谢谢你。

第一次运行。看了一下测试人员的日志。

2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol to be synchronized
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol synchronized, 3720 bytes of symbol info received
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 23 Kb of history data to synchronize in 0:00:00.009
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 567 Kb of tick data to synchronize in 0:00:00.031
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.08 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   -1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   4004
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   0
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 10:53:10.573 Core 01 removed itself within OnTick

测试员只对4月8日这一天的蜱虫进行了同步测试。也就是说,在4月8日之前没有蜱虫。

开始时,我们得到了错误4004(没有足够的内存来满足所要求的刻度)。这是一个无效的信息,我们会调查的。这似乎是因为带有默认参数的请求是在现有刻度线的边界上。

接下来的查询很正确地给你打了1个勾。因为从2020.04.06 00:00:00到现在的测试者,当第一个刻度到达时,只有一个现有的刻度。

让我们稍微调整一下EA

void OnTick()
  {
   MqlTick Tick= {0};
   if(SymbolInfoTick(_Symbol,Tick))
     {
      MqlTick OldTicks[];
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
      if(GetLastError()!=0)
         return;
      Print(GetLastError());
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
      Print(GetLastError());
     }
   ExpertRemove();
  }

我们看到,从第二只虱子开始,虱子已经开始被捡起来了。在这两种情况下,它都是2点。

2020.04.21 11:14:13.256 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:11   -1
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   ExpertRemove() function called

也就是说,事实证明,在tick边界的请求错误的假设是正确的。

让我们把开始日期改为4月7日。

2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3486 bars and contains 1429 bars from 2020.04.06 00:05 to 2020.04.06 23:59
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.07 00:00 to 2020.04.09 00:00 started
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   -1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   4004
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   0
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   ExpertRemove() function called
2020.04.21 11:18:17.775 Core 01 removed itself within OnTick

所有这些都是一样的,除了蜱虫已经同步了2天的事实--测试者数据库包含4月7日和8日的蜱虫。

我们将开始日期推迟到4月8日。而我们看到的是预期的结果

2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 47 bytes of history data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 54 bytes of tick data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 11:20:51.257 Core 01 removed itself within OnTick

因为在测试器中,有比最开始运行时更多的蜱虫。而且,这与套期保值和净值化没有关系。