测试器如何下载历史数据
加载历史数据、准备测试以及调整测试开始日期
我们的 策略测试器 能够创建高度逼真的市场模拟。为了实现这一点,它会为所选交易品种预加载足够的历史数据。
在运行任何测试之前,平台都会同步历史数据:
- 从交易服务器,所选交易品种的 M1 柱形和报价数据被下载到终端。首次启动测试器时,终端会下载该交易品种的完整可用历史记录。
- 从终端,历史记录以压缩形式复制到测试代理。然后,代理在本地生成报价或使用实际的报价数据(如果可用)。
- 在多币种测试中,当策略首次访问新交易品种或时间框架时,测试会暂停,同时下载缺失的数据。系统还下载了额外的数据缓冲区,以便指标可以从第一个柱形上计算出值。
最低历史数据要求
为了确保计算稳定性,测试器始终加载 “启动前历史缓冲区”:
- D1 及以下 ―― 从上一日历年开始。这提供了至少一年的历史记录。例如:如果测试开始日期是 2023 年 3 月 1 日,则终端将从 2022 年 1 月 1 日起下载终端数据。这相当于测试开始前14个月。
- W1 ―― 至少 100 个每周柱形(约 2 年)。
- MN1 ―― 至少 100 个月的柱形(约 8 年)。
如果可用的历史记录不够,测试器会自动将实际开始日期向前推迟到满足要求的最近点。
在这种情况下,测试开始的时间将晚于用户指定的日期。测试器日志将显示相关信息,例如:
开始时间更改为 2024.03.15 00:00,以便在开始时提供数据
|
这不是一个错误,而是一种确保正确计算的内置机制。
对于多货币测试,每当策略访问新交易品种或时间框架时,测试程序就会暂停以加载额外的历史记录。这还包括下载用于指标计算和保证金重新计算的额外缓冲区。
策略测试器集中存储每个交易品种的历史记录,可供所有本地代理使用。示例(EURUSD):
\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<trading_server_name>\history\EURUSD
|
报价历史记录的存储方式类似于:
\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<trading_server_name>\ticks\EURUSD
|
如何减少或避免测试开始日期的偏移
使用较短的时间框架。
测试人员需要选定时间框架内至少有 100 个柱形才能开始建模。
这确保了稳定的指标计算和正确的初始化。
- 如果在 D1 上运行测试,则至少需要 100 个每日柱形(约 5 个月)。
- 在 H1 或 M15 上,只需要 100 个小时或 15 分钟的柱形。即使历史记录有限,这些数据量几乎总是可用的。
- 因此,当历史数据不足时,较低时间框架内的开始日期偏移比较高时间框架内的开始日期偏移要小。
然而,EA 交易必须在选定的时间框架内正确运行。如果策略最初是为 D1 设计的,那么在 M15 或 H1 上测试时,您必须确保它正确同步其计算并且不会过于频繁地开始重新计算信号。
|
按时间框架和潜在测试开始偏移划分的最低历史记录
测试时间框架
|
加载的最小数据
|
可能的开始偏移
|
M1
|
≥100 个柱形(约 1 小时 40 分钟)
|
几乎没有
|
M15
|
>100 个柱形(约 25 小时)
|
很小
|
H1
|
≥100 个柱形(约 4 天)
|
很小
|
D1
|
≥100 个柱形(约 5 个月)
|
可能长达 5 个月
|
W1
|
≥100 周(约 2 年)
|
可能长达 2 年
|
MN1
|
≥100个月(约 8 年)
|
可能长达 8 年(如果历史有限)
|
如何解读该表格
- 在 D1 上,测试器将始终将开始日期向前移动,直到至少有 100 个每日柱形可用。
- 在 H1 或 M15 上,只需要几天的数据,这些数据通常都可以获得,因此测试开始的时间更接近所选日期。
- 在更高的时间框架内(W1 和 MN1),偏移可能非常大,因为需要多年的历史记录。
附加测试器功能
- 报价生成模式:
- 每次报价 ―― 报价均由 M1 柱形生成,提供最大程度的真实感。这是最耗费资源和时间的测试模式。
- 1 分钟 OHLC ―― 速度更快但不太真实。报价序列仅根据 M1 OHLC 价格构建。生成的控制点数量显著减少,从而缩短了测试时间。OnTick() 函数在所有 OHLC 点处触发。
- 仅开盘价 ―― 仅使用选定时间框架内的开盘价。速度非常快但准确性较低,在多币种测试中需要谨慎。OnTick() 仅在每根柱形的开头以其开盘价调用。因此,止损水平和挂单可能不会在精确价格下触发(特别是在较高的时间框架内)。然而,这种模式最适合快速初步的 EA 交易测试。这是最快但最不准确的测试类型。
- 每次报价都基于真实报价 ―― 最大准确度。测试器不使用生成的报价序列,而是使用经纪商提供的报价数据。M1 柱形也用于真实分时报价模式。这些柱形用于验证和纠正分时报价历史。这也可以防止测试器和实时终端图表之间的差异。
- 时间模拟:
- TimeLocal()、TimeTradeServer() 和 TimeGMT() 在测试期间返回相同的值。
- OnTimer 和 Sleep:
- 测试期间支持这些函数。计时器会减慢模拟速度,而 Sleep() 会模拟暂停(但无限循环会导致错误)。
代理缓存和重用
- 历史数据以压缩形式存储,如果测试区间和设置保持不变,则可以重复使用。
- 本地代理进程在测试结束后保持活动状态约 5 分钟,从而能够更快地启动后续测试。