Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

a-stock-quant

一个从 0 到 1 的 A 股策略回测框架。三百多行 Python,没有黑盒、没有付费数据、不用注册任何 token,clone 下来就能在真实历史行情上把 6 个经典策略跑一遍,并演示「大模型炒股的正确姿势」——让大模型把新闻变成可回测的因子,而不是问它「明天涨不涨」。

配套文章:公众号 Gatsby-Sec《从 0 到 1 用代码炒 A 股:6 个策略跑穿 4 年历史,顺便聊聊大模型炒股的正确姿势》

它能干什么

pip install -r requirements.txt

# 在沪深300上跑全部 6 个策略,输出绩效表 + 净值曲线图
python run_backtest.py 000300 --index

# 也可以跑个股(不复权)
python run_backtest.py 600519

# 大模型情绪因子 demo(需要 OPENROUTER_API_KEY,没有则自动退回词典法)
export OPENROUTER_API_KEY=sk-or-...
python llm_demo.py 600519

框架结构

文件 职责
quant/data.py 行情/新闻获取 + 本地缓存(curl 直连新浪/东财,结果可离线复现)
quant/strategies.py 6 个技术策略,统一输出 0/1 仓位信号;加策略只要写个函数挂进 REGISTRY
quant/backtest.py 向量化回测引擎:防未来函数 + 真实手续费/印花税 + 8 项绩效指标
quant/llm_factor.py 大模型情绪因子:把新闻按固定 schema 打分,聚合成每日因子接进策略
quant/factor_tools.py 因子工程:缩尾 / 标准化 / 正交化 + IC(信息系数)评估
run_backtest.py 一键多策略回测,出绩效表和净值曲线
llm_demo.py 大模型因子的端到端演示

内置 6 个策略

策略 思路 类型
买入持有 第一天买入一直拿,所有策略的基准线 benchmark
双均线 20/60 金叉满仓、死叉空仓 趋势跟踪
MACD 趋势 DIF 上穿 DEA 满仓 趋势确认
动量 60 日 过去 60 天涨了就拿,跌了就走 趋势/动量
RSI 均值回归 超卖买、超买卖 均值回归
布林带回归 破下轨抄底、回中轨离场 均值回归

三个最容易翻车的点,框架都处理了

  1. 防未来函数:信号统一 shift(1),今天的信号明天才生效,杜绝用未来数据。
  2. 真实成本:A 股佣金双边 + 印花税卖出单边 + 滑点,按换手率扣。回测漂亮、实盘亏钱,多半死在没算成本。
  3. 结果可复现:行情落地本地 csv 缓存,同一份数据反复回测,结论稳定。

真实回测结果(2022-03 ~ 2026-06,约 4 年)

沪深300 上按夏普排序(节选):

策略 总收益 年化 夏普 最大回撤
布林带回归 +17.7% 4.1% 0.49 -11.0%
买入持有 +15.8% 3.7% 0.29 -29.7%
MACD 趋势 +10.9% 2.6% 0.27 -17.6%
双均线 20/60 -2.9% -0.7% -0.01 -24.8%

关键结论:没有圣杯。 同一套策略,换个标的排名就大洗牌——

  • 沪深300 / 上证指数(大盘、震荡):均值回归类(布林带)最稳,夏普能到 0.5~0.9;
  • 创业板指 / 中证500(成长、趋势强):趋势类(MACD、动量)领先,创业板上 MACD 总收益 +82.6%;
  • 个股茅台(2022 以来阴跌):买入持有 -24%,多数策略也亏——再次说明个股的坑比指数多。

策略要和市场风格匹配,这件事比「找一个最强策略」重要得多。

大模型炒股的正确姿势

错误姿势:直接问大模型「茅台明天涨不涨」「给我个买卖信号」。语言模型对未来价格没有任何信息优势,这么用等于掷骰子还要交 token 费。

正确姿势:让大模型干它真正擅长的事——把非结构化文本变成结构化因子。llm_factor.py 做的就是:把新闻标题让 Claude 按固定 schema 打出情绪分(-1 利空 ~ +1 利好)和置信度,聚合成每日情绪因子,再交给回测引擎用历史数据检验它到底有没有 alpha。模型只负责「读懂文本」,赚不赚钱由回测说了算,不由模型嘴说了算。

[-0.60 | 置信0.80] "A股股王"源杰科技:陈文君因涉嫌刑事犯罪被刑拘…
[+0.40 | 置信0.80] 部分茅台酒产品价格上调,最高每瓶涨价200元

demo 用的新闻只覆盖近端窗口,样本短、噪声大,只演示「因子怎么接进框架」,不代表稳定 alpha。要上实盘必须用更长的历史新闻库重新验证。

因子怎么评估:看 IC,不看「涨没涨」

factor_tools.py 提供把原始打分变成干净因子的标准三步(缩尾 → 标准化 → 正交化)和 IC(信息系数) 评估——IC 是因子值与未来收益的相关性,|IC|>0.03 算有点东西,能稳定为正/负比绝对值更重要。

实测:把 demo 的情绪分拿去算 IC,会发现近端新闻只覆盖了 4.2% 的交易日、有效样本 n≈12,IC 根本无法稳定估计。这恰恰是最该记住的工程教训:LLM 因子能不能用,由 IC 说了算;而 IC 要可信,先得有足够长、足够密、且严格按发布时间切片的历史文本库。

免责声明

本项目仅用于量化方法学习与代码演示,所有回测均为历史数据复盘,不构成任何投资建议。历史业绩不代表未来收益,A 股有风险,下场需谨慎。

About

从0到1的A股策略回测框架:6个经典策略+大模型情绪因子,真实历史行情,clone即跑

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages