原创 · 约 6 分钟阅读 · 阅读 --
Last updated on
程序员量化交易实战 29:从候选列表生成目标权重
程序员量化交易实战 29:从候选列表生成目标权重
古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会把一个 A 股量化平台从 0 到 1 拆开写:数据、策略、回测、模拟盘、提醒和生产化,尽量用真实代码和真实运行结果说话。更完整的更新也会同步到微信公众号「字与码」。
第 19 篇已经能把目标权重转换成调仓计划。但目标权重本身一直是手写的。
第 29 篇先补一个很朴素的策略:从候选股票列表生成等权目标,并控制总仓位和最大标的数。

为什么先用等权
等权不是最优策略,但它有一个优点:容易解释。
在模拟盘早期,权重策略不应该比系统本身更复杂。先用等权把链路跑通,再讨论因子加权、风险预算或行业约束。

策略参数
第 29 章新增 app/target_weight_policy.py。
@dataclass(frozen=True)
class TargetWeightPolicy:
max_symbols: int = 5
gross_exposure: float = 0.8
min_weight: float = 0.01
这三个字段分别控制最多买几只、总仓位上限和最小单票权重。
生成等权目标
targets = build_equal_weight_targets(
["000001.SZ", "600000.SH"],
TargetWeightPolicy(max_symbols=2, gross_exposure=0.6),
)
结果是每只 30%。函数会去重、过滤空 symbol,并按最大标的数截断。
权重归一化
另一类常见输入是外部策略已经给出了权重,但合计超过上限。
normalize_target_weights() 会丢掉无效权重,并把总权重压到 max_total 内。
本章更新与代码仓库
本章更新内容:
- 新增
app/target_weight_policy.py。 - 实现等权目标权重策略。
- 支持最大标的数、总仓位、最小权重约束。
- 实现目标权重归一化。
- 新增
tests/test_target_weight_policy.py,覆盖去重截断、过小权重和归一化。
代码仓库:
https://github.com/ax2/zi-quant-platform
本章代码:
git clone https://github.com/ax2/zi-quant-platform.git
cd zi-quant-platform
git checkout chapter-29
uv sync --extra dev
uv run pytest tests/test_target_weight_policy.py
第 29 章提交为 f71baeb,tag 为 chapter-29。
本篇小结
目标权重策略先保持简单。
第 29 篇把候选列表转换成可解释的等权目标,让调仓计划有了更稳定的输入。下一篇会把价格、生产检查和提醒回执汇总成运行健康报告。