程序员量化交易实战 29:从候选列表生成目标权重
原创 · 约 6 分钟阅读 · 阅读 --
Last updated on

程序员量化交易实战 29:从候选列表生成目标权重

作者: Alex Xiang


程序员量化交易实战 29:从候选列表生成目标权重

古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会把一个 A 股量化平台从 0 到 1 拆开写:数据、策略、回测、模拟盘、提醒和生产化,尽量用真实代码和真实运行结果说话。更完整的更新也会同步到微信公众号「字与码」。

第 19 篇已经能把目标权重转换成调仓计划。但目标权重本身一直是手写的。

第 29 篇先补一个很朴素的策略:从候选股票列表生成等权目标,并控制总仓位和最大标的数。

ZiCode 工程师规划目标权重

为什么先用等权

等权不是最优策略,但它有一个优点:容易解释。

在模拟盘早期,权重策略不应该比系统本身更复杂。先用等权把链路跑通,再讨论因子加权、风险预算或行业约束。

目标权重策略

策略参数

第 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 篇把候选列表转换成可解释的等权目标,让调仓计划有了更稳定的输入。下一篇会把价格、生产检查和提醒回执汇总成运行健康报告。