Jikipedia
Jikipedia量化QuantStart 算法交易回测方法论(Part I–II)交易成本建模与回测引擎的实现细节(QuantStart)
学习笔记

交易成本建模与回测引擎的实现细节(QuantStart)

QuantStart 回测方法论第二篇。接第一篇的偏差与软件选型,本篇处理回测里最常被新手忽略的两块:交易成本(三类成本 + 从固定到二次的成本模型谱系)与回测引擎决策(订单类型、数据频率与 OHLC 数据问题)。素材见 raw/collections/quantstart-backtesting-1/02-successful-backtesting-of-algorithmic-trading-strategies-part-ii-quantstart.md。

量化交易成本滑点市场冲击订单类型回测引擎数据质量

这是什么

这是 QuantStart「成功的算法交易回测」系列的第二篇。第一篇讲了统计与行为偏差、软件对比;本篇转向把回测做得更贴近现实的两件事:一是正确计入交易成本,二是搭回测引擎时要做的几个关键选择(用市价单还是限价单、用多高频的数据、怎么看待免费日线 OHLC 数据)。交易成本与滑点往往是「很赚的策略」和「做不下去的策略」的分水岭。

核心要点

交易成本的三类(不只券商佣金)

  • 新手最常见的错误:忽略或严重低估交易成本;以为成本只是券商佣金。实际上有三类:
    1. 佣金与费用(Commissions/Fees):每笔交易付给通道的费用。算法只用到券商的基础设施(交易所通道),所以单笔佣金通常很小。另外还有清算结算费(fees),以及政府税——英国买股票要交印花税(stamp duty)。这类大多是固定额,最容易在回测引擎里建模。
    2. 滑点 / 延迟(Slippage/Latency):滑点 = 系统决定成交的时点到真实在交易所成交的时点之间的价格差。滑点是成本的大头,能决定一个策略「很赚」还是「很差」。滑点由三样东西决定:
      • 资产波动率:波动越大,信号到成交之间价格跑得越远。
      • 系统到交易所的延迟(latency = 信号产生到成交的时间差):频率越高对延迟越敏感,毫秒级改进都能决定盈利与否。
      • 策略类型:动量策略平均滑点更大,因为它在买「正往预期方向动」的标的(顺势追单);均值回归策略平均滑点较小,因为它逆着交易方向动。
    3. 市场冲击 / 流动性(Market Impact/Liquidity):大单在流动性差的资产上会把市场推走——订单要吃掉当前供给的很大一部分。对策是把大单拆成小块(chunks)分批、等新流动性来了再成交。反过来,像 S&P 500 E-Mini 股指期货这种高流动性合约,小额交易几乎不动现价。越不流动的资产 bid-ask 价差(spread)越大,价差本身也是交易成本——英国大量 spread-betting 公司广告主打「点差紧」,就是例证。

交易成本模型的谱系:Flat → Linear → Piecewise-linear → Quadratic

  • 模型从最简单到最复杂:固定额(flat)→ 线性(linear)→ 分段线性(piecewise-linear)→ 二次(quadratic)。精确度递增,实现与计算成本也递增。
  • 固定额模型最适合描述券商佣金/费用;完全不考虑波动率与流动性,对滑点与冲击基本无能为力。按策略不同会显著高估或低估成本,实践中很少单用。
  • 滑点与市场冲击本质上是非线性现象,所以二次模型最准,也最难实现、计算最慢——但实践里常用。
  • 进阶做法:把历史真实交易成本当作当前模型的输入,让模型更准。这涉及对波动率、滑点、冲击的建模,很难;但如果策略短期成交量大,准确的成本估计对净利润影响显著,值得投入研究。

回测引擎的关键选择

  • 订单类型:市价单 vs 限价单
    • 市价单(market order)立即成交、不管价格。大额市价单会按对方限价单依次吃单,拿到的是一串混合价格。市价单是「激进」单:几乎必然成交,但成交成本未知。
    • 限价单(limit order)让策略指定「最差可接受价」:可能部分成交或完全不成交,但一旦成交价格有保障。限价单是「被动」单。交易所里所有限价单的队列就是订单簿(limit order book)。
    • 回测里必须正确建模两种单的成交效果。高频策略尤其:不建模市场冲击与订单簿,回测会显著好于实盘。
  • OHLC 数据的坑:以日线 Open-High-Low-Close 回测股票时,免费/便宜数据(零售散户最常用的 Yahoo Finance 正是这种)通常:
    • 有幸存者偏差(第一篇讲过);
    • 常是多个交易所的合成报价(composite feed)——开高低收这些极值点容易被区域交易所的小单异常值污染;
    • 还可能夹带没清洗掉的 tick 错误。
    • 后果:策略若大量依赖 OHLC 的某个点(尤其高/低),实盘订单可能被路由到别的交易所,表现与回测不同。
    • 解法:用更高频数据,或直接从单个交易所拿数据,而不是便宜的合成报价。

机制 / 论证

  • 为什么必须建模成本:佣金/费/税固定可预测,滑点与冲击却是策略表现的分水岭——作者的论证链是:滑点取决于波动率、延迟、策略类型 → 高频+动量策略滑点最重 → 不建模这些,回测收益只是幻影。
  • 动量 vs 均值回归的滑点差异:动量买正在朝预测方向运动的资产,追单更吃亏;均值回归逆势操作,成交时往往别人在反向,滑点更小。这告诉我们:同一套成本假设,对两类策略的杀伤力不同。
  • 为什么大单要拆:市场冲击来自供需——大单吃掉当前供给就把价格推走;拆小单等流动性,把冲击摊薄。这告诉我们:回测成交假设要与「能不能吃得下这笔单」一致。
  • 为什么限价单是双刃剑:成交价有保障,但可能不成交——回测若假设限价单总能成交,就高估了可执行性(高频尤甚)。
  • OHLC 极值不可靠的机制:合成报价把多交易所的极值拼在一起,区域交易所的小单会制造异常高/低点;tick 错误又雪上加霜。这告诉我们:用免费日线数据回测「破前高买入/破前低卖出」类策略,要怀疑极值本身的可信度。

可操作

  • 回测引擎至少先计入固定佣金/费用/税——这是最容易、最不能省的。
  • 按策略频率与规模选成本模型:低频、金额小时固定额起步;高频或大额时上二次模型(含滑点与冲击);短期大成交量的策略值得花力气做历史真实成本输入。
  • 对高频策略,务必建模订单簿与市场冲击;对用到 limit order 的策略,回测要承认「可能不成交」。
  • 数据选型:别把免费合成日线 OHLC 当唯一真相源;策略若依赖 OHLC 极值,优先更高频数据或交易所直供数据。
  • 把 A 股的落地数字接进来:本篇是英文方法论骨架;A 股具体费率(佣金/规费/过户费/印花税)与保本计算见 交易成本(佣金、规费、过户费与印花税) 与量化课堂 16 篇;跨期套利等对滑点/冲击敏感的 A 股策略的近似做法(如「下单量 ≤ 成交量 1/10」)见量化课堂 15 篇。

术语

  • 交易成本(transaction costs):佣金、滑点、市场冲击三类成本的总称。
  • 印花税(stamp duty):英国等市场对股票交易征收的税(A 股也有同名印花税,见 trading-costs)。
  • 滑点(slippage):决定成交价与真实成交价之差。
  • 延迟(latency):信号产生到成交的时间差。
  • 市场冲击(market impact):大单改变市场价格的代价。
  • 流动性(liquidity):以接近现价的价格成交的能力。
  • 买卖价差(spread):订单簿上买价与卖价之差,本身是成本。
  • 订单簿(limit order book):限价买单卖单按价格、数量排成的队列。
  • 市价单 / 限价单(market / limit order):激进立即成交 vs 被动指定最差价的两种订单。
  • 合成报价(composite price feed):多交易所行情拼合的数据源。
  • OHLC:开(Open)高(High)低(Low)收(Close)四个日线价格。
  • E-Mini S&P 500:CME 的迷你标普 500 股指期货合约,文中作「高流动性」的例子。

不确定 / 待验证

  • 全文无具体数字与实验,成本分类与模型谱系是作者方法论叙述;观点归 QuantStart 作者个人。
  • 写作时点语境(约 2012 前后):所举 Yahoo Finance 数据形态、spread-betting 行业、E-Mini 等以当时为准 [需要验证]。
  • 「二次模型最常用」是作者经验判断,未给采用率或实证。
  • 本系列后续篇目(绩效度量、含上述效果的配对交易示例)未在本库收录。
  • 文末 Quantcademy 与两本书条目为站内商业推广,非方法论内容。

相关

更新 2026-09-06

检索知识库

按标题、类型或正文检索