Skip to content

Repository files navigation

quant — A股量化研究框架

并非机构级 A股量化研究/回测框架:无前视偏差引擎、完整 A股 约束、16+ 绩效指标、因子 IC/IR 验证、walk-forward 样本外验证。 从零构建的个人量化研究项目,代码与结论全部公开,欢迎交流指正。

v1 核心策略:五因子选股组合(低换手 0.40 / 低PB 0.20 / 高股息 0.15 / E-P 0.10 / 低PS 0.10),Top8 双周调仓 + 行业≤3 约束。

v2 因子库扩展(研究候选版):在 v1 骨架上扩展至 19 因子(价值底仓 + 现金流 + 质量 + 低波 + 52周位置),Top20 周频调仓 + 行业≤5。聚宽在线平台实跑结果见下表——累计收益高于 v1,但风险调整后表现平庸(夏普 ~0.12),收益高度集中在 2024 红利大年;高股息因子因线上因子库字段受限,改用 finance.STK_XR_XD 分红表手工计算(10派X元口径除以10)。属于研究候选,不是加仓依据

验证渠道 策略 区间 收益 年化 最大回撤 夏普
本地回测 v1 2023-01 ~ 2026-08 +35.02% +8.71% -9.0% 0.98
聚宽平台复现 v1 2020-01 ~ 2026-08 +35.33% +4.66% -26.81% 0.278
聚宽平台实跑 v2(19因子) 2020-01 ~ 2026-08 +44.90% +5.92% -17.45% 0.121

聚宽版覆盖 6.6 年完整周期(本地数据仅 2023 起),两实现交叉验证一致。⚠️ 2025-26 样本外两实现均走弱(本地 -0.71% / 聚宽 2026 -10.30%)——加仓红线维持不变。详见 reference/joinquant/backtest_report.md

⚠️ 免责声明:本项目为量化研究学习框架,不构成任何投资建议。回测收益不代表未来表现,因子存在失效风险。实盘决策风险自负。


特性

类别 内容
无前视 信号 T 日收盘产生 → T+1 成交;财报/情绪数据按公告日 T+1 对齐(merge_asof 防未来函数)
A股约束 涨跌停(涨停买不进/跌停卖不出)、停牌、100 股整手、T+1
成本模型 佣金(万2.5, 最低5元) + 印花税(卖出0.05%) + 过户费(0.001%) + 滑点
绩效套件 16+ 项:夏普/索提诺/卡玛/最大回撤/胜率/盈亏比/换手/alpha/beta/IR
因子验证 RankIC / ICIR / t 值 / 行业+市值中性化 / 分年 / 相关矩阵(防重复下注)
过拟合防护 walk-forward 样本外分段验证;模拟盘双组合并行
工程化 pytest 123 用例、.env 密钥管理、脚本-库分层、GitHub Actions 就绪

快速开始

# 环境(Python 3.11+)
uv venv .venv && uv pip install -e ".[dev]" -i https://pypi.tuna.tsinghua.edu.cn/simple
cp .env.example .env        # 可选:填 TUSHARE_TOKEN(akshare 免 token 可跑)

# 跑测试
.venv\Scripts\python.exe -m pytest

# 单标的回测(MACD 示例)
.venv\Scripts\python.exe scripts\run_backtest.py --symbol 600744.SH --strategy macd

# v1 五因子组合回测(Top8 + 双周 + 行业≤3)
.venv\Scripts\python.exe scripts\run_factor_portfolio.py --top-n 8 --max-per-industry 3 --rebalance biweekly

# 因子面板验证(正式复跑链路)
.venv\Scripts\python.exe scripts\validate_factor_panels.py --kind financial --horizons 1 4 13
.venv\Scripts\python.exe scripts\validate_factor_panels.py --kind sentiment --horizons 1 4

# v2 因子库增强策略(聚宽在线 IDE 版)
# 复制 reference/joinquant/v2_factor_library.py 到聚宽 IDE 直接运行:
#   区间 2020-01-02 ~ 2026-08-25,日频,初始 200000,基准 000300.XSHG

项目结构

quant/
├── src/quant/               # 核心库(逻辑全部在库内,脚本只做编排)
│   ├── data/                # 数据源(tushare/akshare/csv)+ 面板 + 质量检查
│   │   ├── financial.py     #   财务面板(公告日 T+1 无前视)
│   │   └── sentiment.py     #   情绪面板(两融/龙虎榜,含陈旧值清洗)
│   ├── backtest/            # 回测引擎(T+1+约束迭代)、成本、指标
│   ├── factors/             # 因子处理(winsorize/zscore/中性化)+ IC 检验
│   ├── portfolio/           # 组合引擎(周频再平衡、权重合成、行业约束)
│   └── research/            # walk-forward、归因、通用因子面板验证
├── scripts/                 # CLI 入口(fetch/backtest/validate/paper_select)
├── tests/                   # pytest 123 用例(无前视/停牌/风控死锁回归)
├── reference/               # 参考实现
│   ├── joinquant/           #   ★ 聚宽在线平台复现(v1 五因子 + v2 因子库增强 + 探针 + 回测报告)
│   │   ├── v1_five_factor.py        #     v1 五因子(Top8 双周)
│   │   ├── v2_factor_library.py     #     v2 19 因子(Top20 周频,研究候选)
│   │   ├── factor_whitelist_probe.py#     线上因子白名单探针
│   │   ├── alpha_factor_probe.py    #     alpha101/191 全量探针
│   │   └── backtest_report.md       #     聚宽回测报告
│   ├── qlib_*.py            #   Qlib 参考
│   ├── vnpy_*.py            #   vn.py 参考
│   └── backtrader_sizers.py #   Backtrader 参考
├── data/                    # 数据缓存(gitignore)与输出
├── ARCHITECTURE.md          # 仓库内部架构与目录纪律
├── pyproject.toml           # 依赖与打包(editable install)
├── .env.example             # 密钥模板(.env 不入库)
└── LICENSE                  # MIT

数据源(免费优先)

数据源 费用 用途
tushare 2000+ 积分 主力:daily_basic(PE/PB/PS/市值/换手/股息率)+ adj_factor 复权
akshare 免费免 token 财务面板(业绩报表)、情绪面板(两融/龙虎榜)、备份行情
聚宽(在线回测) 免费 长周期交叉验证(2020 起全量数据,不占 JQData 额度)

因子验证结论(2023-2026 周频截面,中性化 ICIR)

因子 ICIR 状态
低换手 0.887 ✅ v1 核心(0.40)
高股息 0.527 ✅ v1(0.15)
低PB 0.523 ✅ v1(0.20)
E/P 0.485 ✅ v1(0.10)
低PS 0.371 ✅ v1(0.10)
净利增速 0.323(4周) ⏳ 截面过门槛,组合层拖累(v2 候选已关闭)
情绪(融资/龙虎榜反向) 截面显著 ❌ 组合层拖累(IC 正≠组合有效)
质量/成长/动量 <0.2 或负 ❌ 截面无效(A股 动量为负 alpha)

v2 因子结构(19 因子,聚宽在线实跑 2020-2026:+44.90% / 夏普 0.121)

v2 在 v1 五因子骨架上扩展,四组:

因子(权重) 说明
价值底仓(v1 骨架,0.58) 低换手 0.22 / 低PB 0.12 / 高股息 0.10 / E-P 0.08 / 低PS 0.06 本地验证过,降权避免价值族重复下注
现金流(0.20) cash_flow_to_price_ratio 0.10 / cfo_to_ev 0.06 / sales_to_price_ratio 0.04 聚宽因子库引入,本地近一年 ICIR≈0.40(未中性化,仅作候选)
质量/盈利(0.23) profit_margin_ttm 0.05 / gross_income_ratio 0.04 / roe_ttm 0.04 / cash_rate_of_sales 0.04 / asset_turnover_ttm 0.03 / debt_to_asset_ratio 0.03 聚宽因子库引入,防"低估值陷阱";不重押成长(本地 profit_yoy 组合层失败)
低波/情绪/动量(0.18) DAVOL20 0.04 / turnover_volatility 0.04 / Variance120 0.04 / sharpe_ratio_120 0.03 / fifty_two_week_close_rank 0.03 低波防御;52周位置权重很小(本地牛市区制候选,避免动量负 alpha 反噬)

⚠️ 现金流/质量/低波因子未经本地独立 IC 验证(依赖聚宽因子库与线上实跑),仅作研究候选。

已知边界(诚实声明)

  1. Top8 集中效应:v1 本地 +35% 是 Top8 深度小组合(含集中持有成分);Top20 分散后 ≈0.15%,alpha 不可规模化
  2. 风格依赖强:聚宽 6.6 年周期显示 2024 红利大年 +40% 撑起总收益,2020/2026 风格逆风年亏 10-19%;v2 同样高度依赖红利风格(收益集中 2024,夏普仅 ~0.12)
  3. walk-forward 门未过:2025-26 样本外为负——模拟盘盈利 ≠ 加仓依据
  4. 数据短:本地仅 2023-2026(3.6 年),参数有拟合风险(聚宽版补足长周期验证)
  5. v2 高股息因子口径:style_pro 类因子(含 divyild)在聚宽线上不可用,改用 finance.STK_XR_XD 分红表手工计算股息率(a_xr_date + bonus_ratio_rmb,10派X元除以10);覆盖不足时自动跳过该因子,不让弱覆盖污染打分

License

MIT

About

A-share quantitative research & backtest framework: no-lookahead T+1 engine, factor IC/IR validation, walk-forward. v1: five-factor portfolio.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages