MetaTrader 5帮助算法交易, 交易机器人真实与生成的分时

真实与生成的分时

智能交易系统在测试和优化时需要用到分时数据, 因为它们使用分时数据来进行操作。测试可以执行于券商提供的真实分时, 或者由策略测试器基于分钟数据生成的分时。

真实分时 #

基于真实分时测试和优化更接近可能的真实条件。替代基于分钟数据 生成的 分时, 也可使用由券商累积的真实分时。这些分时来自交易所和流动性提供商。

当测试于真实分时, 在一分钟柱线内点差也许会变化, 而在相应的柱线内, 生成的分时数据在一分钟内使用固定点差。

如果市场深度显示一个品种, 则构筑的柱线会根据最后执行交易的价格 (Last)。OnTick 事件在所有分时上触发, 无论最后价格缺失与否。

请注意交易操作总是依据供给价和采购价执行, 即使图表是由最后价格构筑的。例如, 如果一款智能交易系统工作于柱线的开盘价时接收到最后价格信号, 它会以其它价格执行一笔交易 (根据方向它是供给价或者采购价)。如果使用 "每笔分时" 模式, 柱线由供给价构筑, 而交易的执行则以供给价或采购价之一执行。采购价的计算是由供给价 + 相应分钟柱线的固定点差。

如果一个品种的历史分钟柱线没有分时数据, 测试器以 "每笔分时" 模式生成分时数据。当券商的分时数据不足时, 这样可以令 EA 在确定周期进行测试。如果一个品种的历史没有分钟柱线, 而相应的分时数据存在时, 这些分时被忽略。分钟数据被认为更可靠。

分时数据相比于分钟数据尺寸更大。在首次测试时, 下载它也许要花费很长时间。下载的分时数据按照月份被存储于 \bases\[trade server name]\ticks\[symbol name]\ 的 TKC 文件里。

分时生成 #

策略测试器基于高速缓存里的整数格式的一分钟记录生成分时数据。意即, 测试器从平台拷贝所需的历史数据并将它们转换为整数格式以便加速计算。

策略测试器提供若干 分时生成模式。最精准的 "每笔分时" 模式描述如下。

不同成交量的柱线生成分时的过程也不同:

分时成交量 = 1

分时成交量等于一的柱线则不生成分时数据, 只有柱线收盘价的一笔分时将会写入:

分时成交量等于一

分时成交量 = 2

有两笔分时的柱线也不会生成分时。第一笔分时写入开盘价, 而第二笔分时写入收盘价:

分时成交量等于二

分时成交量 >= 3

对于 3 个或更多分时的柱线, 根据它们的数量有不同的分时生成纲要。

柱线处理纲要

三笔或更多分时的柱线可以有四种不同纲要:

处理选项

图片

价格在单一方向移动, 并返回到开盘价位。因此一根柱线只有最高价和最低价。

多头蜡烛条

空头蜡烛条

价格在单一方向移动并返回, 突破开盘价位。在这种情况下柱线也只有最高价, 或只有最低价, 但开盘价和收盘价不相等。

多头蜡烛条

空头蜡烛条

价格在单一方向移动, 但返回时未触及开盘价位。

多头蜡烛条

空头蜡烛条

价格只在单一方向上移动了几个点。在此情况下柱线没有最高价或最低价。

多头蜡烛条

空头蜡烛条

为三笔或更多分时的柱线生成分时

分时的生成基于参考点。这些点的数量不能超过分时的成交量, 且不能大于 11 (不考虑开盘价那一点)。

参考点划分为三部分: 这些用于形成开盘影线, 蜡烛条实体 (最高价和最低价之间的部分), 以及收盘影线。

蜡烛条

根据分时数量, 参考点的分布有以下可能变化:

参考点数量

开盘影线

蜡烛条实体

收盘影线

11

3

5

3

10

2

6

2

9

2

5

2

8

2

4

2

7

2

3

2

6

1

4

1

5

1

3

1

4

1

2

1

3

1

1

1

  • 如果蜡烛条没有任何影线, 影线点会包含在蜡烛条实体里面。
  • 蜡烛条实体会以奇数个参考点生成。如果实体有偶数个点, 如果影线已经有两个点, 多余的一点会并入到影线。否则多余的一点会被忽略。

理想分布 (3-5-3)

参考点的计算如同从开盘价的点数量。理想的点分布 (3-5-3) 计算如下:

多头蜡烛条

点计算

图片

  • 打开
  • 3/4*(开盘价 - 最低价)
  • 1/2*(开盘价 - 最低价)
  • 最低价
  • (最高价 - 最低价)/3
  • (最高价 - 最低价)*3 - 1
  • 2/3*(最高价 - 最低价)
  • 2/3*(最高价 - 最低价) - 1
  • 最高价
  • 3/4*(最高价 - 收盘价)
  • 1/2*(最高价 - 收盘价)
  • 收盘价

多头蜡烛条

空头蜡烛条

点计算

图片

  • 打开
  • 3/4*(开盘价 - 最高价H)
  • 1/2*(开盘价 - 最高价)
  • 最高价
  • (最低价 - 最高价)/3
  • (最低价 - 最高价)/3 + 1
  • 2/3*(最低价 - 最高价)
  • 2/3(最低价 - 最高价) + 1
  • 最低价
  • 3/4*(最低价 - 收盘价)
  • 1/2*(最低价 - 收盘价)
  • 收盘价

空头蜡烛条

十字星蜡烛条

如果蜡烛条是一个十字星 (收盘价 = 开盘价), 之前的蜡烛条将被分析。如果以前的蜡烛条上涨, 则这次看作下跌, 反之亦然。

十字星蜡烛条

绘制三点影线

如果影线是由三个参考点生成, 且影线尺寸的 3/4 和 1/2 之处的整数相等 (当开盘价和最低价不同, 或开盘价和最高价不超过 2 个点时就会发生, 即, 价格步长向前、向后都一样), 则影线如下生成:

多头蜡烛条

点计算

图片

  • 打开
  • 开盘价 - 1
  • 打开
  • 最低价

多头蜡烛条

空头蜡烛条

点计算

图片

  • 打开
  • 开盘价 + 1
  • 打开
  • 最高价

空头蜡烛条

一根收盘影线同样方式生成。

绘制两点影线

如果影线基于两个参考点生成, 则生成如下进行:

多头蜡烛条

点计算

图片

  • 打开
  • 开盘价 + 1
  • 最低价

多头蜡烛条

空头蜡烛条

点计算

图片

  • 打开
  • 开盘价 - 1
  • 最高价

空头蜡烛条

一根收盘影线同样方式生成。

绘制蜡烛条实体

蜡烛条实体由波浪周期产生。如果 Prev = 最低价 (之前价格是最低价格), 使用以下周期:

  • N1 = Prev + Step
  • N2 = Prev + Step - 1
  • Prev = N2

如果 Prev = 最高价 (之前价格是最高价格), 使用以下周期:

  • N1 = Prev - Step
  • N2 = Prev - Step + 1
  • Prev = N2

此处:

N1 和 N2 是一个周期的参考点;
Prev 是之前价格;
Step 是步长大小。步长计算如下: (最高价 - 最低价 - 1)/(周期数量) + 1;
周期数量计算为 (实体内的参考点数量 + 1)/2。

蜡烛条实体

过渡分时

在参考点之间的过渡分时根据以下规则生成:

  • 如果分时数量大于参考点之间的点数, 一个 "锯齿" 生成 (初始值 +/- 1)。
  • 如果参考点之间的点数足够大时, 生成线性分时序列。

分时生成模式 #

分时生成模式可以在 策略测试器设置 窗口里选择。以下选项可用:

每笔分时

在此模式里, 生成所有分时 ― OHLC 和过渡分时。此类分时生成过程如上所述。

1 分钟 OHLC

在此模式里, 仅生成 1 分钟柱线的 OHLC 分时。如果一根蜡烛条的分时数量大于 4, 则仅有四个价格 (开盘价, 最高价, 最低价和收盘价) 生成。如果分时成交量少于 4, 则上述蜡烛条形成规则被应用。

选择此模式并不意味着测试或优化将在 M1 时间帧内进行。例如, 如果您在 "1 分钟 OHLC" 模式里 选择 H1 时间帧, 每根 1 分钟柱线都会生成开盘价, 最高价, 最低价和收盘价。在此情况下, 智能交易系统的 OnTick() 事件在一分钟里执行四次 ― 在一分钟柱线的开盘, 收盘, 最高和最低, 尽管测试是在 H1 进行。

事实上, OHLC 价格存在于历史数据。因此, 在测试过程中只产生开盘价, 最高价, 最低价和收盘价到达的时间, 而价格值是从历史里获取。

仅用开盘价

在此模式, 将会生成测试所选时间帧的柱线 OHLC 价格。智能交易系统函数 OnTick() 仅在柱线开始时执行 (位于开盘价)。由于这个特点, 停止级别和挂单可能会在指定位置不同的地方触发 (尤其在更高时间帧里测试时)。但是, 这可以让您快速运行智能交易系统的评估测试。

例外的是时间帧 W1 和 MN1, 柱线会每天生成一次, 而不是分别每周一次或每月一次。

在 "仅用开盘价" 模式里有一些限制:

  • 随机延迟交易模式 不可使用;
  • 测试的智能交易系统不能访问低于测试/优化时间帧的 时间帧 数据。例如, 如果您在 H1 时间帧运行测试/优化, 您可以访问 H2, H3, H4 等时间帧数据, 但 M30, M20, M10 等等则不行。另外, 可被访问更高时间帧必须是测试时间帧的倍数。例如, 如果您在 M20 测试, 您不能访问 M30, 但可以访问 H1。这些限制是有联系的, 不能获取较低时间帧, 或者与测试/优化时间帧非倍数时间帧的数据。
  • 访问其它时间帧数据的限制也适用于其它品种, 这些数据由智能交易系统使用。在这种情况下, 对于每个品种的限制取决于测试/优化过程中访问的首个时间帧。假设, EURUSD H1 测试期间, 智能交易系统访问 GBPUSD M20 的数据。在此情况下, 智能交易系统可以使用 EURUSD H1, H2, 等等的数据, 以及 GBPUSD M20, H1, H2 等等。

生成每笔分时模式是最准确的, 但最慢。为了快捷, 但略粗糙的测试/优化, 使用 "仅用开盘价" 模式。

数学计算 #

此模式可让您使用策略测试器进行数学计算。它不需要, 所以无需加载有关品种的历史数据, 且它无需生成分时。在测试智能交易系统里, 只有 OnInit(), OnTester() 和 OnDeinit() 顺序调用。

在此模式, 使用自定义 优化准则。所有在 测试设置 里的字段变得无效, 除了优化模式和智能交易系统的选择。

数学计算对于数学函数极值的计算十分有用, 其值应该从 OnTester() 返回。优化的目的是找到函数的最高值。带有大量输入参数组合的数学函数, 建议使用 "遗传算法"。这可以显著加快搜索速度。