← 返回目录
p5.7动手⏱ 约 16 分钟

成本、冲击与容量:一个策略能装下多少钱

同一个双均线,10 万块年化 1.47%,1000 万年化 -4.62%——不是策略变了,是你变大了

🔎 最后验证 2026-07📚 来源:冲击成本与容量测算(5 个资金档 × 3 组冲击系数)于 2026-07-31 在 ECS 实测,输出见 code/outputs/stdout.txt🧰 qlab.engine(本课自研)、numpy 2.5.1、Python 3.12.13
为什么学这个

前面所有回测都隐含一个假设:你的委托不影响价格

在 100 万上这个假设基本成立;在 10 亿上它显然不成立。加上冲击成本之后,同一个双均线策略:

资金        趋势跟随净年化      波动率目标净年化
不含冲击          2.15%            4.28%
   10 万          1.47%            4.26%
  100 万          0.01%            4.23%
 1000 万         -4.62%            4.11%
    1 亿        -19.26%            3.75%
   10 亿        -65.56%            2.62%

左边这一列不是策略变差了,是你变大了。

而右边那一列几乎没动——两个策略的成交笔数是 256 和 2118,笔数多的那个反而扛得住

这一节讲清楚为什么,以及一个必须写进任何策略报告的数:容量

💡 打个比方

你在小区门口的面馆吃面,10 块一碗。

你一个人去,还是 10 块。

但如果你要一次买 500 碗——老板得临时加人、加锅、加料,价格一定不是 5000 块

你的订单本身改变了价格。这就是冲击成本,它不在菜单上,只在你足够大的时候出现。

一、三层成本

内容与规模的关系前面用过吗
显性成本佣金 2.5bp + 印花税 5bp(卖出)比例固定,与规模无关一直在用
滑点固定 5bp我们一直假设与规模无关一直在用
冲击成本你的委托推动价格随规模上升本节才加

第三层用业界常见的平方根模型:

单笔冲击率 ≈ c · σ_daily · √(V / ADV)
单笔冲击成本 = V × 冲击率  ∝ V^1.5

V = 本次成交金额,ADV = 过去 20 日平均成交额,σ_daily = 60 日日波动。

⚠️ 避坑

c 是这一节里最不可靠的数,必须明说。

它无法从公开日频数据校准——校准需要逐笔成交与盘口数据。文献里常用 0.5~1.0。

所以本节的做法是:取 c=1.0 作基准,同时跑 c=0.5 与 c=2.0,只报在整个区间上都成立的结论。

这是处理"必须用但校不准的参数"的通用姿势:不是回避它,也不是假装它准,而是把结论的稳健性建立在一个区间上。

与 p4.2 的成本网格、p5.6 的自助法区间,是同一套思路。

二、两个对照策略:关键差别不是笔数

趋势跟随(整仓进出)波动率目标(小额调仓)
平均成交笔数2562118
累计换手额(倍基准资金)296.4×39.5×
单笔成交额均值116.0 万元2.1 万元
标的 ADV 中位数3.56 亿元3.56 亿元

笔数多 8 倍的那个,单笔金额只有 1/55。

因为双均线是整仓进出:每次信号翻转,全部权益一次性换手。而波动率目标每天按波动微调仓位,每笔都很小

三、冲击成本随规模的增长

累计冲击成本(占初始资金比例,全期 16 年,c=1.0):

资金趋势跟随波动率目标
10 万10.81%0.27%
100 万34.18%0.84%
1000 万108.09%2.66%
1 亿341.82%8.40%
10 亿1080.94%26.55%

每上一个数量级,冲击成本大约乘以 3.16(即 √10)——这正是平方根模型的形状。

🔧 动手做:同一个策略,放 10 万和放 10 亿(5 分钟)

python capacity.py,看【一】净年化随资金规模的衰减(冲击成本 impact = c·σ·√(V/ADV))。

你会看到(实测):同一条策略,资金从 10 万加到 10 亿,净年化被冲击成本一路吃掉——趋势跟随的单笔均值达 116 万,而标的日均成交额(ADV)中位才 3.56 亿,你的一单几乎就是那天的成交量。

想明白:前面所有回测都藏了一个假设——你的委托不影响价格。100 万上成立,10 亿上是幻觉。一个"年化 20%"的策略,不说清能装多少钱,等于没说:它可能在 100 万上真赚,在你真想投的规模上早已是负的。

四、容量上限

定义:把不含冲击的年化吃到 ≤ 0 的资金规模。

策略不含冲击年化c=0.5c=1.0c=2.0
趋势跟随(整仓进出)2.15%约 1000 万元约 1000 万元约 100 万元
波动率目标(小额调仓)4.28%10^10 元内未归零约 100 亿元约 100 亿元

趋势跟随的容量在千万级——在 c=2.0 下甚至只有百万级。

而这个策略在 p5.5 里已经被证明连样本外都撑不住。一个既没有样本外证据、容量又只有千万级的策略,不该出现在任何严肃的报告里。

五、参与率:比成本更硬的墙

冲击成本是"多付钱",参与率是"根本做不出来"

单日成交额不该超过当日 ADV 的 10%——超过了,你就是市场本身。

超过 10% 上限的委托笔数:

资金趋势跟随最大占比波动率目标最大占比
100 万0 / 25610%0 / 21182%
1000 万34 / 256101%0 / 211816%
1 亿229 / 2561013%19 / 2118155%
10 亿253 / 25610133%385 / 21181554%

"最大占比 101%"的意思是:那一笔委托本身,等于那只股票当天的全部成交额。

这类委托只能拆到多日执行,而拆单会引入额外的择时偏离——你想要的价格已经不在了。 这部分损失本模型完全没有计入,所以上面的容量估计仍然是偏乐观的。

六、为什么笔数多的反而扛得住:把 40.7 倍拆开

在 1 亿元档,趋势跟随的冲击成本是波动率目标的 40.7 倍,而它的成交笔数只有后者的 0.12 倍

拆成两个因子:

趋势跟随    累计换手额 296.4 亿元,每元换手的平均冲击 115.3 bp
波动率目标  累计换手额  39.5 亿元,每元换手的平均冲击  21.3 bp

→ 换手额之比 7.5 倍 × 单位冲击之比 5.4 倍 ≈ 40.7 倍

两个因子都不利于整仓进出:它交易得更多,而且每一块钱都更贵。

第二个因子(单位冲击贵 5.4 倍)与"换手越高容量越小"的直觉相反,原因在模型形状里:

单笔冲击成本 ∝ V^1.5   ——  1.5 次方是超线性的
→ 同样的总换手额,拆成小单要便宜得多

所以容量的决定因素不是成交笔数,是单笔相对 ADV 的规模。

这也是实盘执行算法(TWAP/VWAP、冰山单)存在的全部理由:它们不改变你要交易的总量,只改变每一笔的大小。

❓ 测验
两个策略的年化都是 8%。A 每年调仓 4 次、每次换掉全部仓位;B 每天微调、年换手率相同。哪个容量更大?
✏️ 填空
平方根冲击模型下,单笔冲击成本正比于 V 的 ___ 次方,所以拆成小单会显著便宜。

📌 免责:本课为技术教学,标的为沪深300 成分股按代码序取样(非精选),冲击系数 c 无法从公开日频数据校准,所有测算为模型估计,不构成投资建议。

✅ 小结

三件事:

  1. 第三层成本随规模上升。平方根模型 冲击率 = c·σ·√(V/ADV),单笔成本 ∝ V^1.5;每上一个资金数量级,冲击成本约乘 √10。同一个双均线:10 万年化 1.47%,1000 万 -4.62%,10 亿 -65.56%
  2. 容量的决定因素是单笔相对 ADV 的规模,不是成交笔数。40.7 倍的冲击差 = 换手额 7.5 倍 × 单位冲击 5.4 倍;趋势跟随容量千万级(c=2.0 下只有百万级),波动率目标百亿级
  3. 参与率是比成本更硬的墙:1000 万档趋势跟随已有 34/256 笔超过 ADV 的 10%,最大那笔等于该股当天全部成交额。这类委托不是"多付点钱",是做不出来;拆单带来的择时偏离本模型完全没计入,所以容量估计仍偏乐观

一条必须带上的口径:"这个策略年化 X%"永远要跟一句"在多少资金上"。

关于 c 的处理方式值得单独记住:它校不准,所以跑 0.5/1.0/2.0 三档,只报在整个区间上都成立的结论——和 p4.2 的成本网格、p5.6 的自助区间是同一套思路。

下一节问一个更难的问题:策略是会衰减的。你打算什么时候承认它已经不行了?

下一节 → 衰减监控与停机线:事先写死什么时候停
🔎 来源与核验· 5 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「净年化随资金规模衰减(c=1.0,8 只等权):趋势跟随 不含冲击 2.15% → 10 万 1.47% → 100 万 0.01% → 1000 万 -4.62% → 1 亿 -19.26% → 10 亿 -65.56%;波动率目标 4.28% → 4.26/4.23/4.11/3.75/2.62%」
📚 本节 code/capacity.py,2026-07-31 于 ECS 实测,输出见 code/outputs/stdout.txt✓ 已核验 2026-07
「交易特征:趋势跟随平均 256 笔/只、累计换手 296.4 倍基准资金、单笔均值 116.0 万元;波动率目标 2118 笔、39.5 倍、单笔均值 2.1 万元;标的 ADV 中位数 3.56 亿元」
📚 同上实测✓ 已核验 2026-07
「容量上限(年化被吃到 ≤0 的资金档):趋势跟随 c=0.5/1.0 约 1000 万元、c=2.0 约 100 万元;波动率目标 c=0.5 在 10^10 元内未归零、c=1.0/2.0 约 100 亿元」
📚 同上实测✓ 已核验 2026-07
「参与率(单日成交额/20 日 ADV 超 10%)笔数:趋势跟随 1000 万档 34/256(最大 101%)、1 亿档 229/256(最大 1013%);波动率目标 1 亿档 19/2118(最大 155%)」
📚 同上实测✓ 已核验 2026-07
「1 亿元档冲击成本之比 40.7 倍 = 累计换手额之比 7.5 倍 × 每元换手平均冲击之比 5.4 倍(115.3bp vs 21.3bp)」
📚 同上实测✓ 已核验 2026-07
冲击系数 c 无法从公开日频数据校准(需逐笔与盘口数据),文献常用 0.5~1.0;本节以 c=1.0 为基准并给出 0.5/2.0 敏感性。拆单造成的择时偏离未计入,故容量估计偏乐观。
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p5.8
衰减监控与停机线:你打算什么时候承认它不行了
继续读下一节 →