Skip to main content
Glama
samchuit

SolidRockQuant

by samchuit

SolidRockQuant · 磐石智擎

简体中文 | English

Agent 原生的量化研究与回测框架 —— 让 AI Agent 像研究员一样工作,让人类像审稿人一样把关。

The agent-native quant research & backtest framework for China A-shares & futures.

CI License Python Code style: ruff MCP


为什么做这个项目

vnpy、qlib、backtrader、rqalpha 等优秀框架都是「给人用」的,AI Agent 接入时处处碰壁:

  • 报错信息人类能猜懂,Agent 只会反复重试;

  • 回测结果埋在日志里,Agent 无法可靠地读取和对比;

  • 数据没有版本概念,同一策略两次回测结果不同,Agent 无法判断是策略问题还是数据漂移;

  • 没有统一的工具协议,每个 Agent 平台都要单独写胶水代码。

SolidRockQuant 从第一天起就为 LLM Agent 设计:MCP Server 是一等公民接口,实验自动留痕,数据可版本化,报错自带修复建议。目标是让 Agent 在最少人工干预下完成「拉数据 → 写策略/因子 → 回测/分析 → 读结果 → 迭代」的完整研究闭环,而人负责设定目标与审阅结论。

覆盖市场:中国 A 股(股票 / ETF / 指数 / 可转债)与国内期货,境外股票经官方 yfinance 插件接入。


Related MCP server: Quant Research Platform MCP Server

核心特性

🤖 Agent 原生

  • MCP Serversrq mcp serve):23 个工具覆盖数据、回测、因子、ML、实验、模拟盘与实盘,Claude 等 MCP 客户端即插即用;

  • 结构化输出:统一 JSON 信封(status / data / artifacts / error / next_suggested_tools)+ Markdown 报告;错误码稳定,必带可执行的修复 hint

  • 前视偏差检测:回测前对策略做 AST 静态检查,拦截 shift(-n)bfill、幻觉 API 等 LLM 高频错误;

  • 确定性可复现:引擎无随机性 + 数据版本快照,同一配置永远得到同一结果;

  • Agent 操作手册src/solidrock/agent/skills/ 内置回测、数据更新、实验对比三份 playbook。

📊 数据层

  • 可插拔数据源:通达信(pytdx 直连,白盒 xdxr 复权)、AKShare(东财主通道 + 新浪自动回退)、Tushare Pro、Baostock;境外经官方 yfinance 插件;商业接口(Wind 等)可自行扩展;

  • 频率与品种:日线 + 分钟线(1m/5m);股票、ETF/LOF、指数、可转债、期货合约与主连;

  • 统一数据规范:原始价 + 后复权因子(前复权价随除权漂移、破坏复现性,故不落库)、交易日历、统一符号(000001.SZ / RB2505.SHFE);

  • 本地缓存:Parquet 原子写入 + DuckDB 参数化读取,增量更新幂等;

  • 数据体检srq data doctor):缺失、异常值、因子缺失、大幅波动检测。

⚙️ 回测引擎(自研轻量)

  • 事件驱动 bar 级引擎,默认 next_open 防前视执行(收盘出信号、次日开盘成交);

  • A 股规则内置:T+1(含 T+0 品种自动识别)、分板块涨跌停(主板 10% / 创业板科创 20% / 北交 30%,ST 可覆盖)、整手校验、停牌处理;

  • 费用模型:佣金(最低 5 元)/ 印花税(卖出)/ 过户费 / 滑点,全部可配置;拒单携带原因码(LIMIT_UP / T_PLUS_ONE / WEIGHT_CAP / SUSPENDED / NO_MORE_BARS…);

  • 期货支持:17 个品种的合约规格(乘数 / 保证金率 / 开平仓与平今费率 / 涨跌停)、双向持仓、保证金约束、到期强平、主连换月比例复权;

  • 策略钩子setupon_market_openon_signalon_market_closeon_stop;分钟频可用 trigger_times 定时触发;

  • 风控:单标的权重上限(计入已有持仓)、回撤熔断自动清仓。

🔬 因子研究

  • Factor 基类 + 面板容器(宽表);MAD / 分位数去极值、zscore、行业市值中性化(OLS 残差);

  • RankIC / ICIR / t 值、分位数分层回测、多空价差、因子自相关(换手代理);

  • 内置因子导入即注册:Mom / Reversal / Volatility / Illiq(Amihud)/ VWAPDev / AtrRatio;

  • 向量化快速筛选通道srq factor screen):因子 → 多空权重 → 净值,秒级完成数百标的扫描;内置 lag=1 杜绝前视。

🧮 指标库 / ML / 组合

  • 向量化技术指标solidrock.indicators):sma / ema / ref / diff / hhv / llv / cross / roc / bias / macd / rsi / boll / atr / kdj,对齐通达信口径,兼容 Series 与多标的宽表;

  • ML 管道srq ml walk-forward):数据集构建 → 滚动训练 → 严格样本外预测,可选 LightGBM / scikit-learn;

  • 组合优化solidrock.portfolio)。

📈 报告与绩效

  • 指标:累计/年化收益、年化波动、夏普、索提诺、卡玛、最大回撤、Alpha/Beta、日胜率、交易胜率、盈亏比、最大连盈/连亏、单笔最大盈亏、成交笔数、总费用、年化换手、基准对比、月度收益;

  • 产物:Markdown + JSON + 单文件 HTML 交互报告(plotly,净值/回撤、月度热力图、收益分布、滚动夏普)。

🧪 实验追踪(Agent 的记忆)

  • 每次回测 / 因子分析自动记录:参数、配置、数据快照、指标、产物路径(SQLite,零部署);

  • srq experiment list / show / compare —— Agent 可回答「上次跑的动量策略和这次比哪个好」。

🖥️ 模拟盘与实盘

  • 模拟盘srq paper run):状态持久化的日频跟踪,复用同一套策略代码与引擎规则,跨日续跑携带持仓/挂单/复权游标/熔断状态;

  • 实盘srq live ...):QMT / cfquant 桥接,策略驱动会话(open/signal/close 三阶段),持仓对账;

  • 实盘安全闸门(详见下节):默认只读、下单守卫、显式确认、审计留痕。


实盘安全(重要)

实盘是唯一会动用真实资金的模块,因此安全约束在代码层强制执行,调用方无法通过传参跳过live_submit_order 必须同时通过以下检查,任一不满足即拒绝,委托不会发出:

闸门

配置项

默认值

拒绝错误码

显式确认

MCP 工具参数 confirm=true

必须显式传入

PARAM_INVALID

只读模式

SOLIDROCK_LIVE_READ_ONLY

true(默认拒绝下单)

LIVE_READ_ONLY

标的准入

SOLIDROCK_LIVE_SYMBOL_WHITELIST

空(不限制,建议配置

LIVE_SYMBOL_NOT_ALLOWED

单笔金额上限

SOLIDROCK_LIVE_MAX_ORDER_NOTIONAL

500,000 元

LIVE_ORDER_TOO_LARGE

交易时段

SOLIDROCK_LIVE_ENFORCE_TRADING_HOURS

true(09:15–11:30 / 13:00–15:05)

LIVE_NOT_TRADING_HOURS

幂等去重

SOLIDROCK_LIVE_DUPLICATE_WINDOW_SECONDS

60 秒

LIVE_DUPLICATE_ORDER

补充设计:

  • 本地校验先于连接:只读 / 参数 / 守卫检查全部先于连接 QMT,被拒的订单不会触碰券商,也不要求桥接在线;

  • 撤单不受时段限制:撤单是降低风险的动作,任何时段放行(仍受只读约束);

  • 对账口径正确:用总持仓(volume)对比、可卖量(can_use_volume)约束卖出,避免 A 股 T+1 下把「已持有」误判为「缺仓」而重复买入;目标未包含的实盘持仓默认不自动清仓

  • 审计与告警:下单 / 撤单 / 被拦截 / 对账差异均写入 {data_dir}/live/audit.jsonl 并推送通知;通知失败原因落盘 {data_dir}/live/notify_errors.log,避免告警静默失效。

⚠️ 实盘涉及重大资金风险。请先在模拟盘验证策略,并从小额、白名单、低金额上限开始。


安装

# 从源码安装(PyPI 发布后可直接 pip install solidrock-quant)
pip install "solidrock-quant[mcp,sources] @ git+https://github.com/samchuit/SolidRockQuant.git"

可选 extras:

Extra

内容

sources

AKShare / Tushare / pytdx 数据源依赖

mcp

MCP Server

report

plotly(HTML 交互报告)

ml

LightGBM / scikit-learn

dev

pytest / ruff / mypy / mkdocs


快速开始

srq init                                                    # 初始化数据目录
srq data calendar --update                                  # 拉取交易日历
srq data update --symbols 510300.SH --start 2024-01-01      # 更新行情

Python API

from solidrock import BacktestConfig, BacktestEngine, Context, DataStore, Strategy


class DualMA(Strategy):
    """双均线策略:快线上穿慢线满仓,反之清仓。"""

    params = {"fast": 5, "slow": 20}

    def setup(self, ctx: Context):
        ctx.universe = ["510300.SH"]

    def on_signal(self, ctx: Context):
        close = ctx.history("510300.SH", self.params["slow"] + 1, fields="close")["510300.SH"]
        window = close.iloc[-self.params["slow"]:]
        if window.isna().any() or len(window) < self.params["slow"]:
            return
        target = 1.0 if window.iloc[-self.params["fast"]:].mean() > window.mean() else 0.0
        ctx.order_target_percent("510300.SH", target)


store = DataStore(".solidrock")
result = BacktestEngine(DualMA, BacktestConfig(start="2025-01-01", end="2026-09-08"), store).run()
print(result.metrics["sharpe"], result.metrics["max_drawdown"])

CLI

# 回测(自动静态校验 + 实验留痕 + 报告落盘)
srq backtest run examples/dual_ma.py --start 2025-01-01 --end 2026-09-08 --param fast=5

# 因子研究
srq factor analyze examples/momentum_factor.py -u 000001.SZ,600519.SH --start 2025-01-01 --end 2026-09-08
srq factor screen  examples/momentum_factor.py -u ... --top 0.2 --bottom 0.2   # 向量化快筛

# ML 因子合成(滚动训练,严格样本外)
srq ml walk-forward --universe ... --start 2019-01-01 --end 2026-09-08

# 模拟盘(状态持久化,建议每日收盘后跑一次)
srq paper run examples/dual_ma.py --name my-paper
srq paper status --name my-paper

# 实验与数据版本
srq experiment list
srq experiment compare <id1> <id2>
srq data snapshot create snap-20260908

# 数据诊断
srq data doctor
srq data sources

MCP Server(Agent 接入)

{
  "mcpServers": {
    "solidrock": { "command": "srq", "args": ["mcp", "serve"] }
  }
}

接入后 Agent 即获得 23 个工具(数据 / 回测 / 因子 / ML / 实验 / 模拟盘 / 实盘), 完整清单与实盘安全配置见 docs/mcp-setup.md


数据规范(全库唯一口径)

  • 存储:原始价 + 后复权因子(hfq = close × adj_factor),不做前复权落库——前复权价会随每次除权漂移,破坏历史复现性;

  • 单位volumeamountpre_close 为除权后口径;

  • 日线标准列symbol, date, open, high, low, close, pre_close, volume, amount, turnover_rate, adj_factor, suspended;期货另含 settle, open_interest

  • 符号规范000001.SZ / 600519.SH / RB2505.SHFE / 主连 RB.SHFE


项目结构

src/solidrock/
├── data/          # 数据层:可插拔数据源、本地仓库(Parquet+DuckDB)、交易日历、符号规范、数据体检
├── backtest/      # 回测:事件驱动引擎、撮合(A股/期货规则)、组合核算、费用模型、模拟盘、向量化回测
├── strategy/      # Strategy 基类与加载器
├── factors/       # 因子:基类、截面处理、RankIC/分层分析、内置因子、报告
├── indicators.py  # 向量化技术指标库
├── ml/            # ML 管道:数据集、walk-forward、模型封装
├── portfolio/     # 组合优化
├── report/        # 绩效指标 + Markdown / JSON / HTML 报告
├── experiments/   # SQLite 实验追踪
├── risk/          # 仓位上限、回撤熔断
├── live/          # 实盘:QMT/cfquant 桥接、下单守卫、对账、策略驱动会话
├── agent/         # MCP Server、错误规范、策略静态校验、SKILL.md
├── cli/           # srq 命令行
└── utils/         # 通用工具

质量保障

检查项

状态

单元测试

389 passingpytest -m "not network"

覆盖率

79%(回测引擎核心模块 > 90%)

类型检查

mypy src/solidrock 无错误

代码风格

ruff check + ruff format --check 全通过

CI

lint + Python 3.10/3.11/3.12 测试矩阵 + CLI smoke + 文档站构建

提交前请运行:

ruff check src tests && ruff format --check src tests
mypy src/solidrock
pytest -m "not network"

文档

文档

内容

docs/design.md

技术设计:架构、数据规范、引擎与 MCP 设计、关键取舍

docs/mcp-setup.md

MCP 接入配置、工具清单、实盘安全闸门

docs/agent-workflow.md

Agent 研究闭环实战 playbook

docs/tutorial-agent-research.md

实战教程:让 Claude 做因子研究

docs/plugins.md

数据源 / 因子插件开发指南

docs/roadmap.md

路线图与任务拆解

docs/release.md

版本发布流程

docs/index.md

文档站首页

文档站

以上文档的在线版本

CHANGELOG.md

变更日志

llms.txt

面向 LLM 的项目速览


路线图

版本

内容

状态

v0.1

数据层(日线)+ 事件回测(股票)+ 绩效报告 + 实验追踪 + MCP Server

完成

v0.2

因子分析 · 期货回测(保证金/双向持仓/换月)· 分钟线 · 数据体检

完成

v0.3

模拟盘 · 策略沙箱校验 · Agent 研究闭环示例

完成

v0.4

插件注册机制(plugins/ workspace)· 英语文档

完成

v0.5

分钟线回测 · 海外标的符号 · 官方 yfinance 插件

完成

v0.6

ML 管道 · 组合优化 · 通知 · 股票实盘(QMT / cfquant 桥接)

完成

v0.7

指标库 · 内置因子 · HTML 报告 · 盘前盘后钩子 · T+0 撮合 · TDX 数据源 · 实盘下单守卫

进行中

v0.8

期货 CTP 实盘 · 更多数据源 · Agent 多轮研究编排

规划中

已发布版本的详细变更见 CHANGELOG.md


参与贡献

项目处于早期快速迭代阶段,欢迎通过 Issue 讨论设计与提交 PR:

  1. Fork → 创建特性分支 → 提交前运行 ruff check / mypy src/solidrock / pytest -m "not network"

  2. 新功能请附带测试(CI 会在 Python 3.10–3.12 上执行全量检查);

  3. 面向 Agent 的改动请同步更新 src/solidrock/agent/skills/ 与 docstring——它们就是 LLM 面向的文档;

  4. 改动实盘相关代码时,请为新增的每条放行路径补充与安全闸门相对应的测试。

详见 CONTRIBUTING.md


免责声明

本项目仅供量化研究与技术学习使用。回测结果基于历史数据与简化假设,不构成任何投资建议;期货实盘与自动交易涉及重大资金风险,请遵守所在司法辖区的法律法规并自担风险。数据来源为第三方公开接口,准确性不作保证。

许可

Apache-2.0

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to access real-time and historical stock market data for A-shares, Hong Kong, US, and global markets, including quotes, K-lines, fund flows, fundamentals, and board data, via a Python SDK and MCP protocol.
    1
    MIT