Skip to content

About

ashare-quant-analyst

Resources

Stars

19 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ashare-quant-analyst

ashare-quant-analyst 是一个面向 A 股策略开发与回测的 Codex Skill,用于把用户的自然语言策略想法转化为可执行的 Pandas 信号、带 A 股交易制度约束的沙盒回测结果,以及可直接展示的绩效指标与收益曲线图。

该 Skill 适合在用户提出“开发并回测策略”“回测经典策略”“开发 A 股交易策略”“绘制收益曲线”“验证某个择时/轮动/均线策略”等需求时使用。

核心能力

  • 策略生成:将双均线、突破、动量、均值回归、行业轮动等策略描述落地为 Pandas 信号逻辑。
  • 信号标准化:要求生成包含 buy_signal 与 sell_signal 的 signals.csv,便于统一接入回测引擎。
  • A 股制度建模:内置 T+1、佣金、印花税、滑点、100 股整数手等基础交易约束。
  • 安全校验:通过 AST 检查禁止危险模块/函数,并识别典型未来函数风险,例如 shift(-1)。
  • 绩效分析:计算年化收益、夏普比率、最大回撤、Calmar 比率等核心指标。
  • 图表输出:生成 performance_chart.png,用于在最终答复中直接展示收益曲线。

典型适用场景

  • 回测经典技术策略,例如双均线金叉死叉、唐奇安通道、布林带反转、RSI 超买超卖。
  • 验证 A 股单标的择时策略,例如沪深 300 ETF、中证 500 ETF、行业 ETF 或个股。
  • 开发事件驱动策略,例如公告、龙虎榜、北向资金、解禁、热点题材等信号与价格序列结合。
  • 生成策略研究报告中的结构化回测指标和收益曲线图片。
  • 对用户给出的策略代码做安全检查和未来函数检查。

工作流

1. 解析用户策略

先明确用户希望回测的要素:

  • 标的:股票、ETF、指数或股票池。
  • 时间区间:起止日期、频率(日线为默认)。
  • 入场条件:例如均线金叉、突破 N 日新高、因子排名进入前 N。
  • 出场条件:例如均线死叉、跌破止损线、持有期到期、排名跌出阈值。
  • 仓位规则:满仓、等权、单标的、固定比例或现金约束。
  • 成本假设:如未指定,采用 Skill 默认 A 股交易成本。

2. 获取并整理行情数据

策略代码通常需要至少包含以下列:

字段 含义 说明
date 交易日期 建议使用 YYYY-MM-DD
open 开盘价 可选,但建议保留
high 最高价 可选,但建议保留
low 最低价 可选,但建议保留
close 收盘价 回测引擎必需
volume 成交量 可选
buy_signal 买入信号 回测引擎必需,布尔值或 0/1
sell_signal 卖出信号 回测引擎必需,布尔值或 0/1

当与 a-stock-data Skill 配合使用时,可优先通过其行情数据能力获取 A 股、ETF 或指数历史行情,再在本 Skill 中生成信号并回测。

3. 生成并保存信号

生成策略信号后,统一保存为:

signals.csv

示例结构:

date,open,high,low,close,volume,buy_signal,sell_signal
2024-01-02,10.00,10.20,9.95,10.10,1200000,0,0
2024-01-03,10.12,10.50,10.05,10.45,1500000,1,0
2024-01-04,10.40,10.42,10.00,10.08,1300000,0,1

4. 执行代码安全检查

对自动生成或用户提供的策略脚本,建议先运行:

python scripts/code_validator.py --code_path strategy.py

校验器会检查:

  • 禁止导入 os、sys、subprocess、requests、urllib、socket 等系统或网络相关模块。
  • 禁止使用 eval()、exec()、open() 等高风险函数。
  • 禁止使用 shift(-1) 一类容易引入未来数据的写法。

5. 执行回测

使用标准信号文件运行回测:

python scripts/backtest_engine.py --signals signals.csv --output backtest_log.csv

回测输出:

backtest_log.csv

典型字段:

字段 含义
date 日期或原始行索引
net_value 每日组合净值

6. 计算指标并生成图表

运行:

python scripts/metric_calculator.py --log backtest_log.csv

脚本会输出标准 JSON 指标,并生成:

performance_chart.png

最终回复用户时,应同时包含:

![A股策略收益曲线](performance_chart.png)

目录结构

ashare-quant-analyst/
├── SKILL.md                         # Skill 触发说明与强制工作流
├── README.md                        # 项目说明文档
├── output_schema.json               # 回测指标输出 Schema
├── assets/                          # 图片、模板等静态资源目录
├── references/
│   └── ashare_market_rules.md       # A 股交易制度与回测限制
└── scripts/
    ├── backtest_engine.py           # A 股沙盒回测引擎
    ├── code_validator.py            # 策略代码 AST 安全校验器
    └── metric_calculator.py         # 指标计算与收益曲线绘图脚本

输入与输出协议

输入:signals.csv

signals.csv 是策略与回测引擎之间的核心契约。至少需要:

  • close:用于按收盘价估值和模拟成交。
  • buy_signal:为真时尝试买入。
  • sell_signal:为真时尝试卖出。

建议额外提供:

  • date:便于绘图与分析。
  • open、high、low、volume:便于扩展更复杂的成交和风控逻辑。

输出:backtest_log.csv

回测引擎输出每日净值序列,用于后续绩效计算。

输出:JSON 指标

metric_calculator.py 当前输出的核心结构为:

{
  "performance": {
    "cagr": 0.1234,
    "sharpe_ratio": 1.2345,
    "max_drawdown": -0.1234,
    "calmar_ratio": 1.0000
  }
}

output_schema.json 还定义了更完整的扩展字段,包括:

  • strategy_id:策略代码哈希。
  • annualized_volatility:年化波动率。
  • sortino_ratio:Sortino 比率。
  • trade_statistics.total_trades:交易次数。
  • trade_statistics.win_rate:胜率。
  • trade_statistics.profit_factor:盈亏比。

这些字段可作为后续增强脚本时的目标输出格式。

A 股回测规则

默认假设来自 references/ashare_market_rules.md:

  • T+1 交收:当天买入的股票不能当天卖出。
  • 佣金:默认双向万分之 2.5,即 0.00025。
  • 印花税:卖出单边千分之一,即 0.001。
  • 滑点:默认 0.001。
  • 交易单位:买入数量必须为 100 股整数倍。
  • 涨跌停:普通 A 股通常 ±10%,科创板/创业板通常 ±20%;复杂涨跌停撮合逻辑可在后续版本扩展。

策略开发规范

必须遵守

  • 不得使用未来数据,例如 shift(-1)、未来日期收益、回测期末已知排名等。
  • 不得在信号生成阶段读取未来收盘价、未来最高价或未来财务数据。
  • 不得跳过 signals.csv、backtest_log.csv、指标 JSON、收益曲线图这条标准链路。
  • 策略结果必须说明样本区间、标的、成本假设和主要限制。

推荐做法

  • 使用 rolling()、shift(1) 等只依赖历史数据的方式构建指标。
  • 在生成交易信号时,将信号与执行价格的时间关系写清楚。
  • 对指标中的小数统一保留 4 位,方便阅读和对比。
  • 当策略依赖随机过程时,固定全局随机种子,保证结果可复现。

示例:双均线策略信号

下面是信号生成逻辑的简化示例:

import pandas as pd
import numpy as np

np.random.seed(42)

df = pd.read_csv("market_data.csv")
df["ma_short"] = df["close"].rolling(5).mean()
df["ma_long"] = df["close"].rolling(20).mean()

previous_short = df["ma_short"].shift(1)
previous_long = df["ma_long"].shift(1)

df["buy_signal"] = (previous_short <= previous_long) & (df["ma_short"] > df["ma_long"])
df["sell_signal"] = (previous_short >= previous_long) & (df["ma_short"] < df["ma_long"])

df.to_csv("signals.csv", index=False)

然后依次运行:

python scripts/code_validator.py --code_path strategy.py
python scripts/backtest_engine.py --signals signals.csv --output backtest_log.csv
python scripts/metric_calculator.py --log backtest_log.csv

最终回复格式建议

当 Skill 完成回测后,建议最终答复包含:

  1. 策略简述:一句话说明入场、出场、标的和时间区间。
  2. 成本假设:说明佣金、印花税、滑点、T+1 和 100 股约束。
  3. 指标 JSON:原样贴出脚本输出的 JSON。
  4. 收益曲线:用 Markdown 图片语法展示 performance_chart.png。
  5. 风险提示:说明历史回测不代表未来收益,并指出样本依赖和数据质量限制。

示例:

策略:沪深300ETF 双均线择时,5 日均线上穿 20 日均线买入,下穿卖出。

成本:佣金 0.025%,卖出印花税 0.1%,滑点 0.1%,遵循 T+1 与 100 股整数手。

```json
{
  "performance": {
    "cagr": 0.0821,
    "sharpe_ratio": 0.9132,
    "max_drawdown": -0.1567,
    "calmar_ratio": 0.5239
  }
}
```

![A股策略收益曲线](performance_chart.png)

与其他 Skill 的协作

  • a-stock-data:负责获取 A 股行情、研报、公告、新闻、行业和资金流等数据。
  • ashare-quant-analyst:负责将数据转化为交易信号、执行回测、计算指标并输出图表。
  • make-presentation:可将回测结果、收益曲线和策略说明整理成演示文稿。

推荐组合流程:

数据获取 → 信号生成 → 安全校验 → 回测执行 → 指标计算 → 图表展示 → 研究报告/演示稿

已知限制

  • 当前回测引擎偏向单标的或简化仓位模型,多标的组合、调仓、停牌和涨跌停撮合需要进一步扩展。
  • 当前指标脚本输出的是核心绩效字段,尚未完整覆盖 output_schema.json 中的全部扩展字段。
  • 当前成交模型以信号行的 close 为基础模拟成交,未区分次日开盘成交、VWAP 成交或盘口流动性。
  • 当前交易日志记录的是净值序列,不包含逐笔交易明细;如需胜率、盈亏比和交易次数,需要扩展成交记录。
  • 数据源质量会显著影响回测结论,需关注复权方式、停牌、分红、退市和指数成分变化等问题。

常见问题

为什么禁止 shift(-1)?

shift(-1) 会把未来数据移动到当前行,常见于错误地使用“明日收益”或“未来价格”生成今天的交易信号,会导致未来函数和虚高回测结果。

为什么要强制生成 signals.csv?

signals.csv 是策略层与回测层的解耦协议。无论策略来自自然语言、用户代码还是外部因子,只要生成统一字段,就可以进入同一个回测与绩效计算流程。

为什么要展示收益曲线图片?

单一指标容易掩盖风险。收益曲线可以直观看到回撤、震荡、收益集中期和策略失效阶段,是验证策略稳定性的必要补充。

可以用于实盘交易吗?

不建议直接用于实盘。该 Skill 的定位是研究、教学和策略原型验证。实盘前还需要更严格的数据清洗、撮合仿真、风控、组合管理、合规检查和实时监控。

后续增强方向

  • 增加多标的组合回测与定期调仓。
  • 增加逐笔交易日志、持仓日志和换手率统计。
  • 完整实现 output_schema.json 中的交易统计字段。
  • 增加涨跌停、停牌、ST、退市、复权方式等 A 股细节处理。
  • 支持基准收益曲线、超额收益、信息比率和回撤区间可视化。
  • 增加参数扫描、网格搜索、walk-forward 验证和样本外测试。

免责声明

本 Skill 生成的策略、回测结果和图表仅用于研究与技术演示,不构成投资建议。历史收益不代表未来表现,任何交易决策都应结合独立判断、风险承受能力和合规要求。

About

ashare-quant-analyst

Resources

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages