12

从分数到组合

核心问题同一个分数,怎样变成持仓?换手和成本会吃掉多少?

视频 约 9 分钟

第四单元 · 第 1 / 3 节121314

视频

待发布

预计 2026-10-19 17:30(北京时间)发布,以实际公开时间为准。
视频发布后会嵌入在这里,并加入 Bilibili 合集“量化与机器学习入门”。 预计时长约 9 分钟。

学习目标

  1. 理解选几只、怎样定权重、多久调一次,各自怎样影响结果。
  2. 理解换手怎样变成成本,以及调仓日涨停买不到、跌停卖不出、停牌不能交易的处理。
  3. 读懂成本敏感性曲线。

交互演示合成数据

成本敏感性:换手与成本吃掉多少

每年被成本吃掉1.92%
扣成本后的年化6.08%
换手超过多少就白做—
留下成本

40% × 2 × 0.20% × 12 = 1.92% · 8% − 1.92% = 6.08%

−4%−2%0%2%4%6%8%0%20%40%60%80%100%毛收益 8%扣成本后的年化每月换手

教学假设:组合扣成本前每年赚 8%;每月换掉的那部分仓位要卖一次、买一次,所以按 2 倍单边成本计。年化拖累 = 每月换手 × 2 × 单边成本 × 12。灰色虚线是单边成本 0.1%、0.3%、0.5% 时的情形。

让 AI 带你做模拟数据

把下面的提示词整段复制给任意一个 AI 助手。它会先生成一份模拟的股票月度数据(设定对每一节都一样),再带你把这一节的分析做一遍。数据是模拟的,具体数字会和视频不同,但应该看到同样的规律。

任务(第 12 节):把分数变成组合,算上成本。
1. 用第 11 节岭回归的分数,每个月买前 50 只、每只一样多。算每个月的换手率(新组合里上个月没有的股票占比)。
2. 假设每买或卖一次,付成交金额的 c;每个月的成本 = 2 × 换手率 × c。c 取 0、0.2%、0.5%,各算一次年化收益。
3. 改成每 3 个月才调一次仓(不调仓的月份换手为 0),重复第 2 步。
4. 改成只买前 10 只(每月调仓、不扣成本),和前 50 只比较年化收益和年化波动。
提示词开头的模拟数据设定
请用 Python(numpy、pandas,需要时用 scikit-learn)带我做一个量化入门练习。先生成一份模拟的股票月度数据,随机种子用 42:

1. 300 只股票,192 个月(月份编号 0–191,相当于 16 年)。
2. 每只股票有一个固定的波动 sigma,从 0.05 到 0.13 均匀抽取;它的 beta = 0.5 + 5 × sigma。
3. 每个月有五个特征:mom(动量)、val(估值,越大越便宜)、size(规模)、lowvol(低波动)、prof(盈利)。
   - mom、val、size、prof:第 0 个月取标准正态;之后每个月,新值 = 0.9 × 上月值 + 0.44 × 标准正态。
   - lowvol = −sigma + 0.02 × 标准正态。
   - 每个月把五个特征各自在 300 只股票之间标准化(减平均、除以标准差)。
4. 每个月抽一个下个月的大盘收益 mkt_next ~ 正态(0.005, 0.05);再给五个特征各抽一个当月系数 = 基础系数 + 0.01 × 标准正态,基础系数依次是 0.004、0.003、0、0.005、0.002。
5. 下个月收益 ret_next = beta × mkt_next + Σ(当月系数 × 特征) + sigma × 标准正态。
6. 整理成一张长表:每行是一只股票的一个月,列为 month、stock、sigma、五个特征、mkt_next、ret_next。打印前几行和总行数。

后面统一的口径:
- IC:每个月,某一列和 ret_next 在 300 只股票之间的 Spearman 秩相关。
- 年化收益:把每月收益连乘,再按 12 / 月数 开方后减 1。
- 等权基准:每个月 300 只股票 ret_next 的平均。
- 第 m 个月这一行的特征在第 m 个月月底已知,标签 ret_next 是第 m+1 个月的收益。训练模型时,在第 s 个月月底打分,训练只用月份 ≤ s−2 的行(中间隔开一个月)。

接下来按我的要求一步一步做。每一步先用一两句话说明在做什么,再给代码和结果。

应该看到

  • 每个月的换手大约三到四成。成本每多 0.2%,年化大约少两个百分点。
  • 季度调仓的平均换手只有每月调仓的四成左右。不扣成本时每月调仓更好;成本到 0.5% 时,两者的差距大大缩小,有时季度调仓反而更好。
  • 在模拟数据里,前 10 只的年化收益比前 50 只高,波动也更大。这是因为模拟的分数一直到最顶端都有效;视频里真实数据的结果正相反。买几只,要看你的信号在真实数据里是什么样子。

对不上的时候,把你的结果和这几条一起发给 AI,让它解释是哪一步出了问题。

自测

  1. 信号很弱的时候,只买分数最高的 10 只,最大的问题是什么?

    • A. 手续费太低
    • B. 每一只的运气都被放大,结果很不稳定
    • C. 一定会亏钱
    • D. 买不到这 10 只
    看答案

    答案 B。分数是一个很弱的信号,前 10 只并不比前 50 只靠谱多少。买得多,运气才互相抵消。

  2. 每个月换手 42%,每买或卖一次的成本是 0.2%。一个月的成本大约是多少?

    • A. 0.08%
    • B. 0.42%
    • C. 0.17%
    • D. 0.84%
    看答案

    答案 C。卖一次、买一次:0.42 × 2 × 0.2% ≈ 0.17%,一年下来大约两个点。

  3. 一个信号衰减得很慢。调仓频率应该怎么定?

    • A. 越快越好,每天都调
    • B. 永远不调
    • C. 和信号无关,随便定
    • D. 可以慢一点,省下的成本可能比旧分数损失的更多
    看答案

    答案 D。调仓频率要配合信号衰减的速度。

常见坑

  • 试了很多组参数,只报告最好的一组
  • 不写清成本假设

下一节

赚到的钱里,有多少只是跟着大盘走?

13风险与基准策略的收益里,多少是真正的选股能力,多少只是承担了市场和规模的风险?