测试 "CopyTicks"。 - 页 39

 
 
fxsaber:

它们不应该是缓慢的,不应该依赖交易服务器。

交付速度:终端在缓存中存储了每个符号的4096个最后刻度,以便快速访问(对于具有运行统计的符号--65536个刻度),对该数据的请求更快当请求缓存之外的当前交易时段的点数时,CopyTicks()会访问已经存储在终端内存中的点数,这些请求需要更多的时间来执行。最慢的是对其他日子的ticks请求,因为在这种情况下,数据是从磁盘上读取的。

如果终端是在同一个磁盘上,你是对的。

你是否进行了几次测试?你是否经常在某个服务器上遇到延迟?以防在测试的时候,磁盘正忙于其他操作...

 
Alexey Kozitsyn:

如果终端是在同一个驱动器上,你是对的。

你是否进行了多次测试?延迟是在某个特定的服务器上不断发生的吗?以防在测试时,驱动器正忙于其他操作...

它是100%可重复的。终端是一样的。

 

如何在OnDeinit指标中获得ticks?我想获得蜱虫,这些蜱虫已经存在于tkc-files中,而且几乎是即时给出的。但如何确定哪些蜱虫是存在的,哪些是不存在的?

在CopyTicks简单性的所有表面吸引力的背后,实际上隐藏着一些陷阱,由于功能有限,为了这个外在的吸引力,这些陷阱是不可能避免的。

 
fxsaber:

如何在OnDeinit指标中获得ticks?我想获得蜱虫,这些蜱虫已经存在于tkc-files中,而且几乎是即时给出的。但如何确定哪些蜱虫是存在的,哪些是不存在的?

在CopyTicks简单性的所有表面吸引力的背后,实际上隐藏着一些陷阱,由于功能有限,为了这个外在的吸引力,这些陷阱是不可能避免的。

为什么我们要在OnDeinit()中获得刻度线?
 
Alexey Kozitsyn:
为什么要在OnDeinit()中获取ticks?

你需要创建一个自定义符号,并将已经存在于kc文件中 的所有转换后的tick历史(从某一日期开始)写入其中。虱子,不在机器上,没有什么意思。因此,在这项任务中,指标不应该放慢速度。然而,CopyTicks不允许以这样的方式接收ticks。

 
试图在OnInit中获得另一个符号的ticks
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


结果

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


也就是说,在别人的角色上,一开始就没有打勾数据。而在数据库中,随着OnTick的出现,刻度线就会产生。它是这样设计的吗?还是应该为外星角色提供刻度,以及为主要测试符号提供刻度?

 
文件中的这句话是什么意思?

Примечание

CopyTicksRange()函数被设计用来请求从一个严格指定的范围内的ticks,例如,在历史上的某一天。而 CopyTicks()允许 指定起始日期,例如--获得从月初到当前时刻的所有刻度

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicks只对包含在市场评论中的字符起作用。而在自定义符号出现之前,这始终是合乎逻辑的。

自定义符号有一个巨大的应用领域,在市场观察中远非总是需要这些符号。然而,通过CopyTicks从它们中获取一些蜱虫历史 有时是必要的。

因此,如果在Market Watch中没有选择自定义的符号,请禁用自定义符号的CopyTicks错误返回。

 
对于自定义字符,要想知道总的点数,你必须使用CopyTicksRange(Symb, Ticks)(加上这个)并注意数组的大小。但这是非常浪费的!