分类
技术
难度
进阶
适用场景
回测EA 评估

Tick 数据

Tick 数据(逐笔数据)是一个品种上每一次单独价格变动的完整记录——每一笔都带有时间戳,并携带它自己的买价与卖价;MT5 在「基于真实 tick 的每个 tick」模型中回放的正是这份记录,而不是在 K 线之间编造一条路径。

亦称:tick 历史, 真实 tick 数据

更新于 · 审阅于

一句话讲清

K 线数据每根蜡烛只保留四个价格:开盘价、最高价、最低价、收盘价。Tick 数据保留它们之间的一切——每一次价格变动,按顺序排列,并带着那一刻实际存在的点差。两者的差别只有在一笔交易于 K 线内部开仓又平仓时才决定什么,而那里恰恰是大多数 EA 营销所居住的地方。

为什么重要

回测只能用你递给它的价格去交易。K 线数据递给测试器每根蜡烛四个价格,并让它自行编造之间的路线,于是任何在 K 线内部进出的策略,回答的都是一条没有人记录过的路径。Tick 数据把这份编造换成了记录。而我们自己跑出来的运行还添上了一个令人不安的第二条发现:你从哪里取 tick,对结果的推动远大于把编造的 tick 换成记录下来的 tick。

  • 它确定了 K 线内部事件发生的顺序。如果真实的路线先碰到止损再碰到目标,那么把顺序反过来编造的路线,会让这笔交易的正负号翻转。
  • 它携带着每一刻实际存在的点差。在本站一次 USD/JPY 真实 tick 运行中,tick 文件里装着 227 个介于 10 到 350 点之间的不同点差值,没有任何单一的固定数字能代表这个范围。
  • 它要求终端里真的有库存。本站公开的十一次真实 tick 运行,全都需要一个由导入存档建立的自定义品种;本目录中没有任何一个经纪商原生品种抵达过真实 tick 模型。
  • 它并不是最大的那根杠杆。在模型固定的情况下换掉数据来源,让我们其中一次运行的盈利因子从 1.35 变成 1.13;随后把同一个来源从生成 tick 升级为真实 tick,又让它移动了 0.02。

用它验证策略

用在哪里

  • 策略测试器 → Settings → Modelling,在那里「基于真实 tick 的每个 tick」(Every tick based on real ticks,Model 4)回放记录下来的路径,而单纯的「每个 tick」(Every tick,Model 0)则从 M1 K 线里生成一条。
  • View → Symbols(Ctrl+U)→ Ticks 选项卡,在测试器能碰到它之前,你在这里按日期区间请求某个品种的 tick 历史。
  • 用导入的 tick 存档建立一个自定义品种——本目录中每一次真实 tick 运行的数据都是这么来的。
  • 把定稿的策略在第二个 tick 来源上重跑一遍,弄清这个结果属于规则还是属于数据。

可靠的结果长什么样

  • 商品页在同一口气里点明 tick 来源与测试器模型,于是读者可以复现这次运行,而不是只能相信它。
  • tick 历史真正覆盖了整个区间。本站公开的每一次运行都从 2019-01-01 开始(只有一次例外),并且跑在能回溯到那么早的来源之上。
  • 买价与卖价都在导入中存活下来,于是测试器按记录下来的点差成交,而不是拿一个顶替的常数。
  • 第二个来源复现了这个结果——而当它复现不了时,商品页会说明是哪一个失败了。

警示信号

  • 「真实 tick 数据」却不点名供应商。供应商恰恰是这项主张中决定结果的那一半。
  • 把一个历史质量百分比当作真实 tick 的证据挥舞。本目录中一次 Model 0 运行打印出的就是 100%。
  • 测试区间的开始时间早于来源的 tick,这会悄悄把早期年份交还给插值。
  • 在 tick 数据之上又配置了固定点差。在 Model 4 上测试器反正会忽略这个字段,所以这项设置骗作者比骗读者更狠。

回测与实盘的差异

  • tick 数据钉住的是价格路径,它不碰成交。延迟、重新报价、部分成交以及经纪商自身的政策,全都仍然坐在测试器之外。
  • 记录下来的点差属于记录它的那一方。另一家经纪商在同一时刻的报价可能有实质差异,尤其是在主要交易时段之外。
  • 滑点从来不会进入这个文件。测试器按记录下来的价格成交;一笔实盘订单会晚到一点点,并拿走那时摆在那里的东西。
  • 可以预期剩下的差距关乎成交而不是价格——这个差距比 K 线数据留下的要窄得多,也可预测得多。

推荐的验证方法

  1. 1先按整个区间请求该品种的 tick 历史,然后读 Ticks 选项卡,确认它返回的范围确实覆盖了这个区间。
  2. 2把模型编号写在来源名称旁边。「每个 tick」与「基于真实 tick 的每个 tick」在同一个下拉框里只隔一行,描述的却是两个不同的实验。
  3. 3在 Model 4 上别动测试器的点差字段,改为手工加上佣金。本站把 Spread=10 与 Spread=100 各跑了一遍,得到的逐 tick 点差完全相同。
  4. 4在相信这个数字之前,先在第二个来源上重跑一次。来源之间的分歧本身就是结果,而不是麻烦。

示例

一个 EA,一个区间,三次运行。TidewellSlack 从 2019-01-01 起在 M15 上交易 GBP/JPY,我们把它跑了三种方式,为的是拆开商品页习惯性揉在一起的两件事:tick 从哪里来,以及测试器是回放它们还是编造它们。

经纪商 M1 历史,Model 0(已公开的那次运行)
PF 1.35,最大回撤 9.92%
303 笔交易,历史质量 99%,并且通过了我们的关卡。
导入的 tick,仍然是 Model 0
PF 1.13,最大回撤 18.18%
351 笔交易。只有来源变了。
导入的 tick,Model 4 真实 tick
PF 1.11,最大回撤 18.20%
345 笔交易。只有模型变了。

三次运行里有两次没能通过我们自己的关卡,而幸存的那一次跑在生成 tick 上。这正是为什么商品页公布的是自己的品种名与模型编号,而不是「真实」这个形容词。

计算 来源替换:盈利因子 −0.22,回撤 +8.26 个百分点。在此之上的真实 tick 升级:−0.02 与 +0.02。

结果 数据来源把结果推动的距离,是 tick 模型的十一倍

怎么读这个数字

读 tick 数据时,先对照持仓时长,再对照数据来源。相对于 K 线,你的目标越细,结果中由路径决定的部分就越多——但这个结果能不能走到别处去,由来源决定。

区间 含义
日内或剥头皮 EA,真实 tick,点名了供应商 站得住脚的情形。路径是记录下来的,一个陌生人仅凭商品页就能复现这次运行。
持仓数天的波段系统,跑在由 K 线生成的 tick 上 通常够用。一根 K 线内部的走法,很少决定一笔持有一周的交易。
真实 tick,但只有单一来源 半个答案。我们的 GBP/JPY 运行在规则与区间完全相同的情况下,在一个来源上通过,在另一个来源上失败。
既没有供应商也没有模型编号的「真实 tick」 无法核实,而缺掉的这两项恰恰就是决定那个数字的两项。
  • 在选定模型之前,先确认 Ticks 选项卡返回的范围。开始时间早于来源 tick 起点的区间,会把早期年份退回插值,却依然只为整次运行报出一个数字。
  • 保住买价与卖价。在 Model 4 上,测试器从 tick 文件里取点差,并忽略你键入的数字——在一次 USD/JPY 运行中出现了 227 个介于 10 到 350 点之间的不同值,其中没有一个是配置的那个。
  • 数一数究竟有多少人真的会去测量点差。本站公开的 23 次运行中,恰好只有一次带着实测均值,即在测试器内记录的 19.14 点,而那次运行用的是 Model 0。
  • 把第二个来源当作实验,而不是当作杂活。一致会把一次 tick 数据回测提升为证据;分歧教给你的更多。

本站公开的 23 次运行中,十一次使用 Model 4,十二次使用 Model 0,而每一次 Model 4 运行的品种名都带着 _DUKA 后缀,因为导入的 tick 只能活在自定义品种上。那十一次里有十次的清单文件,价格来源字段中至今仍写着经纪商的 M1 历史,这是它们迁移出来的那条血脉留下的残余。读模型编号和品种名;围绕它们的散文老得更快。

常见误区

只挑 tick 模型,却不理会 tick 来源

模型只是下拉框里的一行,来源却是另一个完全不同市场的记录。在上面那次 GBP/JPY 运行中,换掉来源让盈利因子少了 0.22,并把回撤翻了一倍,而在同一个来源上做真实 tick 升级只让它少了 0.02。一个点明了模型却不点明供应商的商品页,告诉你的是较小的那一半。

把历史质量数字读成真实 tick 的证据

这个百分比衡量的是历史对区间的覆盖有多完整,而不是哪个模型产出了它。KestrelHover 背后那次 Model 0 的影子运行打印出 100%——与它那次真实 tick 的姊妹运行是同一个数字。一个两个模型都能达到的数字,无法把它们区分开。

在 tick 数据之上设置固定点差

在 Model 4 上,测试器按 tick 文件自身的卖价减买价成交,完全无视这个字段;把同一个 USD/JPY 测试先以 Spread=10、再以 Spread=100 跑一遍,返回的逐 tick 点差完全相同。这项设置在运行中什么也没改变,却悄悄改变了作者相信这次运行测量了什么。

测试一个 tick 覆盖不到的区间

在一个 tick 从 2019 年才开始的来源上从 2015 年测起,会把早期年份插值出来、把后期年份回放出来,再把两者当作一个结果报告。Ticks 选项卡会说明它持有的范围;测试器却从不警告你,你的区间越过了它。

指望真实 tick 能填平与实盘之间的差距

它们填平的是价格那一半,成交那一半原封不动。延迟、重新报价、部分成交以及经纪商的政策都留在模拟之外,所以一次真实 tick 运行仍然是对成交会是什么样的一份乐观陈述——只不过是一份建立在真正发生过的路径之上的乐观陈述。

深入说明

三次运行,一次只变一个变量

TidewellSlack — GBP/JPY,M15,自 2019-01-01 起交易数盈利因子最大回撤历史质量我们的关卡
经纪商 M1 历史,Model 0(已公开)3031.359.92%99%PASS
导入的 tick,Model 03511.1318.18%99%FAIL
导入的 tick,Model 4 真实 tick3451.1118.20%100%FAIL

第一行到第二行只改了数据,别的什么都没动:规则相同、区间相同、测试器模型相同。 盈利因子掉了 0.22,回撤大致翻倍。第二行到第三行只改了模型,把同一份存档里生成的 tick 升级为记录下来的 tick,于是盈利因子掉了 0.02,回撤移动了 0.02 个百分点。两行 用导入 tick 的运行都没能通过我们的关卡;幸存下来的,是跑在生成 tick 上的那一次。

这个先后顺序并不普遍,而这正是诚实的那一部分。KestrelHover 走的是另一个方向:真实 tick 上 291 笔交易、盈利因子 1.33,对比经纪商生成 tick 上 292 笔交易、1.30,而且两次运行都通过了。有时来源就是故事的全部,有时它只是噪声 ——而你只有跑两遍才会知道。把 TidewellSlack 的商品页 放在那一份旁边读,这个要点会自己讲出来。

真实 tick 的代价是一个自定义品种

本站公开的 23 次运行中,十一次使用 Model 4,十二次使用 Model 0。每一次 Model 4 运行交易的品种,名字都以 _DUKA 结尾,因为导入的 tick 无法活在经纪商自己的品种 上——你要在 Symbols 窗口里创建一个自定义品种,再把存档导入进去。本目录中从来没有 一个经纪商原生的品种抵达过真实 tick 模型,这就是那么多公开回测不使用它的现实原因: 这个模式是免费的,它背后的库存不是。

这也打破了信赖一个百分比的惯常捷径。KestrelHover 背后那次 Model 0 的影子运行打印出 100% 的历史质量,与它那次真实 tick 的姊妹运行是同一个数字,所以这个数字分不出两者。 建模质量回答的是另一个问题——历史对区间的覆盖 有多完整——而且它对两个模型都作答。

点差是没人核对的那一半

tick 数据的第二份礼物是记录下来的买价与卖价,而它也是最常被扔掉的那一份。在 Model 4 上,测试器按每个 tick 自身的卖价减买价成交,并忽略你配置的点差:把同一个 USD/JPY 测试先以 Spread=10、再以 Spread=100 跑一遍,得到的逐 tick 点差完全相同,里面是 227 个从 10 到 350 点不等的不同值。这个字段看上去像一个开关,行为却像一条注释。

几乎也没有人去测量由此产生的成本。本站这 23 次运行中,恰好只有一次写明了实测的点差 均值——19.14 点,在测试器内部记录——而那次运行用的是 Model 0,不是真实 tick。所以对 大多数真实 tick 主张(包括我们自己的好几次)诚实的读法是:路径被记录下来了,而走这条 路径的成本从未被合计过。

常见问题

回测 EA 一定需要真实 tick 数据吗?
这取决于策略持仓多久。凡是在当日内开仓并平仓的东西都应该用真实 tick,因为 K 线内部的路径决定了它太多的交易,不能靠假设带过。持仓数天的波段系统则几乎察觉不到差别。无论哪一种,都要点名来源:在我们的 GBP/JPY 测试中,换来源让盈利因子移动了 0.22,而真实 tick 升级只让它移动了 0.02。
MT5 的 tick 数据从哪里来?
两个地方。MetaTrader 经纪商把 tick 历史存在自己的服务器上,终端从 View → Symbols(Ctrl+U)→ Ticks 按品种和日期区间下载。独立供应商发布 tick 存档,你把它导入到一个自定义品种上。本目录中每一次真实 tick 运行走的都是第二条路,这也是为什么它们的品种名都带着 _DUKA 后缀。
为什么两个 tick 来源会给出不同的回测结果?
因为每个来源都是某一个交易场所的记录,而价格——尤其是点差——在场所之间并不相同。同一个 GBP/JPY EA 在同一个区间上,在经纪商自家历史上拿到 1.35 的盈利因子,在导入的存档上是 1.13,最大回撤则从 9.92% 升到 18.18%。比较两个来源,是能拿到的最便宜的稳健性测试。
真实 tick 数据会让回测变准吗?
它让价格序列变得忠实,这不是一回事。成交依然在测试器之外,而你选的来源依然占主导。我们用两种方式都跑过的两个 EA 落在了相反的位置:一个几乎没动——真实 tick 上 291 笔交易、盈利因子 1.33,对比生成 tick 上 292 笔交易、1.30——另一个则在来源改变的那一刻就没能通过关卡。
怎么判断一份公开的回测用了什么 tick 数据?
三个字段,按顺序看:测试器打印出的模型名称、这次运行交易的品种,以及那个品种背后的供应商。一个自定义的品种名,通常就是 tick 被导入的破绽。如果一个商品页只给出一个百分比和一个形容词,这三项一个都没有,那就把这项主张当作未经核实,而不是当作虚假。