初始提交:高股息策略研究与回测系统

从 Point-in-Time 股票筛选到统一 Web 前端的完整链路:
筛选 → 画像 → 策略 → 回测 → Walk-forward → 绩效分析 → 报告/前端。

架构
- 数据层与策略层分离;策略代码不写 SQL,只经 data/repo.py 取数
- 所有业务阈值集中在 config/*.yml,代码零硬编码(字段写错直接报错)
- 报告只做「run_id → SQL → 渲染」,不做任何计算,数字可追溯
- 前后端分离:output/ 静态站点 + hdiv web 提供的 REST API

数据安全
- 只增不删:SQL 钩子拦截 DELETE/DROP/TRUNCATE,并有源码扫描测试守护
- qlib 原有表只读,本项目数据写入 hd_ 前缀表
- 回补使用 INSERT IGNORE,保证既有行零改动
- .env 存密钥且已 gitignore;output/、logs/、.venv/ 不入库

交付物
- 30 张 hd_* 表、7 个 YAML 配置、283 项自动化测试
- 统一 Web 前端(hash 路由 SPA)+ nginx 部署配置与 launchd 托管脚本

如实声明的限制
- 策略缺少稳定的样本外超额收益(Walk-forward 7 窗口均值 -0.95%,
  基准 +2.29%);其价值体现在回撤控制,而非超额收益
- 涨跌停/停牌约束仅覆盖 2019 年起;index_weight 尚未填充
- AI Agent 层(plan.md 第四版 P8)未实现

详见 docs/user-guide.md 与 docs/implementation-status.md。
This commit is contained in:
2026-10-03 13:54:56 +08:00
commit fce725e13c
127 changed files with 28001 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
# ============================================================
# 交易成本模型(★ 可直接修改)
# 对应 plan.md §29:Commission / Stamp Duty / Transfer Fee / Slippage
# A 股默认口径(2023 年后):
# 佣金 双边 万2.5,最低 5 元
# 印花税 卖出 千1(2023-08-28 起由千1减半为万5,此处按现行万5)
# 过户费 双边 万0.1
# 滑点 10 bps(可改为 tick / fixed)
# ============================================================
version: 1
model: a_share_default
commission:
rate: 0.00025 # 万 2.5
min: 5.0 # 单笔最低佣金(元)
side: both # both | buy | sell
stamp_duty:
rate: 0.0005 # 万 5,仅卖出
side: sell
transfer_fee:
rate: 0.00001 # 万 0.1,双边
side: both
slippage:
# bps —— 按成交金额的万分比
# fixed —— 每股固定价差(元)
# tick —— A 股最小变动价位 0.01 元的倍数
mode: bps
value: 10
# ------------------------------------------------------------
# 分红所得税(plan.md §30/§31 的正确性依赖)
# 持股期限差异化税率;持有超过 1 年免征
# ------------------------------------------------------------
dividend_tax:
enabled: true
holding_based: true
rates:
"1m": 0.20 # 持股 <= 1 个月
"1y": 0.10 # 1 个月 < 持股 <= 1 年
"gt1y": 0.00 # 持股 > 1 年