A 股量化策略回测

SkillCommerce & finance

A-share quantitative strategy backtesting / factor validation. Triggered when the user says "回测", "策略回测", "backtest", "因子验证", "这个策略历史表现怎么样", "测一下", "量化回测", "历史收益率", "夏普比率", or "最大回撤". Performs backtest validation of a user-specified investment strategy based on historical K-line and financial data,

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the A 股量化策略回测 skill

What this skill tells your AI

The instructions your AI receives, as published by aifinlab/finclaw in skills/a-share-quant-backtest/SKILL.md and read by ahel’s review.

数据源

SCRIPTS="$SKILLS_ROOT/cn-stock-data/scripts"

# 历史K线(日/周/月)
python "$SCRIPTS/cn_stock_data.py" kline --code [CODE] --period [daily/weekly/monthly] --start [YYYYMMDD] --end [YYYYMMDD]

# 个股财务指标(用于因子验证)
python "$SCRIPTS/cn_stock_data.py" finance --code [CODE]

# 实时行情(辅助)
python "$SCRIPTS/cn_stock_data.py" quote --code [逗号分隔的代码列表]

回测计算使用 Python pandas,不依赖第三方回测框架。所有计算在 Python 脚本中完成。

Workflow

Step 1: 定义策略

明确以下要素(用户未指定则使用默认值):

要素说明默认值
标的池回测股票范围用户指定(必填)
买入规则入场信号用户指定(必填)
卖出规则出场信号用户指定(必填)
持仓周期最小持仓天数不限(T+1 至少隔日)
调仓频率多久重新评估月度调仓
仓位管理单只上限/总仓位等权重,单只不超过 20%
回测区间起止日期近 3 年
基准对标指数沪深300 (000300)
初始资金起始金额100 万元
交易成本佣金+印花税+滑点佣金万2.5 + 印花税千1(卖出) + 滑点0.1%

常见策略模板

  • 均线策略: MA5 上穿 MA20 买入,下穿卖出
  • 动量策略: 买入近 N 日涨幅前 K 只,定期调仓
  • 价值因子: 按 PE/PB/股息率排序,买入低估值组
  • 成长因子: 按净利润增速/营收增速排序,买入高成长组
  • 多因子组合: 多因子加权打分,买入高分组

Step 2: 获取历史数据

  1. 通过 cn-stock-data 获取标的池内所有股票的历史K线
  2. 如涉及财务因子,获取财务指标数据
  3. 获取基准指数K线(如沪深300)
  4. 数据清洗:处理停牌日(前值填充)、复权价格
import pandas as pd

# 示例:加载K线数据后的基本处理
df['return'] = df['close'].pct_change()
df['cum_return'] = (1 + df['return']).cumprod() - 1

Step 3: 回测执行

按规则模拟交易,逐日/逐期计算:

  1. 信号生成: 根据买卖规则生成每日交易信号 (1=买入, -1=卖出, 0=持有)
  2. 仓位计算: 根据信号和仓位管理规则计算每日持仓
  3. 收益计算: 考虑交易成本后的每日/每期净收益
  4. 净值曲线: 计算策略净值序列
# A股特殊处理
# T+1: 当日买入次日才能卖出
# 涨跌停: 涨停无法买入,跌停无法卖出
# 停牌: 停牌期间无法交易
# 手续费: 佣金(双向) + 印花税(卖出千1) + 滑点

Step 4: 绩效指标计算

计算以下核心指标(详见 references/backtest-guide.md):

指标公式/说明
总收益率(期末净值 - 1) * 100%
年化收益率(期末净值)^(252/交易天数) - 1
夏普比率(年化收益 - 无风险利率) / 年化波动率
最大回撤max(1 - 净值/历史最高净值)
胜率盈利交易次数 / 总交易次数
盈亏比平均盈利 / 平均亏损
Calmar 比率年化收益 / 最大回撤
Sortino 比率(年化收益 - 无风险利率) / 下行波动率
年化波动率日收益标准差 * sqrt(252)
交易次数总买卖次数
平均持仓天数所有交易的平均持仓时长

必须与基准对比:同期基准的收益率、最大回撤、夏普比率,计算超额收益。

Step 5: 输出结果

根据风格要求输出,必须包含

  1. 策略概述(规则说明 + 回测区间 + 标的池)
  2. 绩效指标汇总表(策略 vs 基准对比)
  3. 分年度收益对比
  4. 关键结论与风险提示

风格说明

维度formal(研报风格)brief(快速结果)
篇幅3-5 页1 页
策略说明详述策略逻辑、参数选择理由一句话策略概述
绩效表完整(10+ 指标)精简(5-6 核心指标)
分年度逐年收益表 + 月度热力图描述仅逐年收益
交易明细列出部分典型交易不列出
风险分析详细回撤分析 + 参数敏感性仅标注最大回撤
免责声明需要(历史不代表未来)简短提示

输出格式

绩效汇总表(必含)

指标策略基准(沪深300)超额
年化收益率xx%xx%xx%
夏普比率x.xxx.xx
最大回撤xx%xx%
胜率xx%
盈亏比x.xx
Calmar 比率x.xxx.xx
年化波动率xx%xx%
交易次数N 次

分年度收益表

年份策略收益基准收益超额收益

关键规则

  1. 必须考虑交易成本:佣金(万2.5双向)+ 印花税(卖出千1)+ 滑点(0.1%),不考虑成本的回测无意义
  2. 必须与基准对比:至少对比沪深300,让用户判断策略是否跑赢市场
  3. 必须标注回测区间:明确起止日期和交易天数
  4. 历史不代表未来:在结论中必须提示回测局限性
  5. 警惕过拟合:如参数过多或仅在特定区间有效,需警告过拟合风险
  6. A股 T+1 规则:当日买入次日才能卖出,回测必须模拟此限制
  7. 涨跌停处理:涨停板买不进、跌停板卖不出,需在回测中体现
  8. 停牌处理:停牌期间不可交易,持仓期间停牌不影响持仓但无法调仓
  9. 无风险利率:默认使用 2.5%(可按用户要求调整)
  10. 默认风格为 brief:用户未指定时使用快速结果风格

Signals

GitHub stars
241
Forks
38
Last commit
May 2026
Advanced
Catalog kind
skill
Gateway key
a-share-quant-backtest
Source
github.com/aifinlab/finclaw