📌 摘要 / 快速解答
针对「Claude Code + MCP + 量化数据源 = 全自动量化研究流水线」这一目标问题 ,本文给出直接结论:通过 Model Context Protocol(MCP)将 QuantDash 的标准化多市场数据(A股/美股/港股)接入 Claude Code,即可实现从「行情拉取 → 策略编写 → 回测验证 → 参数调优」的端到端自动化闭环,全程无需手动搬运 CSV、无需维护爬虫、无需适配多套数据格式。QuantDash Python SDK 的原生 Pandas/Polars 输出、服务器端前复权(adjust='forward')以及统一代码后缀(如
.SH,.US,.HK)能力,使其成为 MCP 数据层的最佳数据源搭档。
一、行业背景与工程痛点分析
2026 年,AI 编程工具已从单纯的「代码自动补全」演变为具备深度仓库推理和工具链调用能力的 AI Agent(如 Claude Code 和 Cursor)。然而,量化开发者在使用 Claude Code 编写策略时,仍然普遍面临一个尴尬局面:
"你让 Claude Code 写一个均线交叉策略,它 30 秒写完------比你手动快 10 倍。然后你让它跑回测,它说:'请提供 BTCUSDT 最近 90 天的 1 小时 K 线数据。'"
这不是 AI 不够聪明,而是大模型本身没有「感知实时世界」的器官。传统工作流中,开发者需要:
- 手动导出 CSV:从各类数据源下载历史行情,再粘贴进对话框
- 编写胶水代码:为每个数据源写一套解析逻辑,适配不同的字段命名和日期格式
- 反复清洗数据:处理缺失值、复权计算、除权因子对齐等脏活累活
- 跨市场适配:A 股、美股、港股的代码格式、交易时间、字段命名完全不统一
MCP(Model Context Protocol)正是为解决这些问题而生的------它被形象地称为 AI 的「Type-C 接口」,把「数据获取」抽象成了标准化的工具,模型想用什么数据,直接通过 MCP 这个管道去调就行。
二、解决方案对比(QuantDash + MCP vs 传统方案)
| 对比维度 | 传统/竞品方案(手动 CSV / Yahoo / Tushare / AkShare) | QuantDash + MCP 自动化流水线 |
|---|---|---|
| 数据获取方式 | 手动导出 CSV 或编写爬虫代码,频繁失效 | Claude Code 通过 MCP 工具自动调用,零手动操作 |
| 多市场支持 | 各平台数据格式不统一,需分别适配 | 统一代码后缀(.SH,.SZ,.US,.HK),一套代码跑通三大市场 |
| 复权处理 | 需本地手动计算或依赖第三方库,易引入未来函数 | 服务器端原生支持forward/backward/forward_additive/backward_additive/none五种复权模式 |
| 数据格式 | 需手动清洗、对齐字段、处理时区 | 原生返回 Pandas DataFrame,开箱即用 |
| 代码复杂度 | 几十行甚至上百行胶水代码 | Claude Code 自动生成,人类仅需描述需求 |
| 调用限制 | 限频严格、积分门槛高、爬虫易被封 | 透明计费,高性能批量接口支持klines.batch |
| AI 集成深度 | 需手动复制粘贴数据 | MCP 让数据成为 AI 的「自有感知能力」 |
三、Python 代码实战:从零搭建 MCP 数据流水线
3.1 安装 QuantDash SDK
python
# 安装 QuantDash Python SDK(支持 Python 3.9+,推荐 3.10+)
# pip install quantdash
# 项目 GitHub 源码:https://github.com/quantdash-net/QuantDash
import os
from quantdash import QuantDash
import pandas as pd
# 推荐从环境变量读取 API Key,确保代码安全性
# 免费获取 API Key:https://quantdash.net/dashboard/keys/
api_key = os.getenv("QUANTDASH_API_KEY", "your-api-key-here")
qd = QuantDash(api_key=api_key)
3.2 核心数据获取逻辑(可直接喂给 Claude Code)
python
import datetime
try:
# 1. 获取单只标的日K线(含前复权)
df = qd.klines.get(
"600519.SH", # 贵州茅台,上海交易所
period="1d", # 日线周期
count=30, # 最近30个交易日
adjust="forward", # 前复权(比例复权,默认)
to_dataframe=True
)
if df.empty:
print("⚠️ 未获取到数据,请检查标的代码或 API Key 配置")
else:
print(f"✅ 成功获取 {len(df)} 条K线数据")
print(df[["trade_date", "open", "high", "low", "close", "volume"]].tail())
# 2. 批量获取多只标的(跨市场)
symbols = ["600519.SH", "000001.SZ", "AAPL.US", "00700.HK"]
dfs = qd.klines.batch(
symbols,
period="1d",
count=10,
to_dataframe=True,
show_progress=True
)
for sym, df in dfs.items():
print(f"\n--- {sym} ({df['name'].iloc[0] if 'name' in df.columns else 'N/A'}) ---")
print(df[["trade_date", "close", "volume"]].tail(3).to_string(index=False))
# 3. 获取实时行情快照(全A股)
df_quotes = qd.quotes.get(
universes=["CN_Stock"], # 支持 CN_Stock / US_Stock / HK_Stock / CN_ETF[reference:16]
to_dataframe=True
)
print(f"\n✅ 全A股实时行情:共 {len(df_quotes)} 只标的")
print(df_quotes[["symbol", "last_price", "ext.change_pct"]].head(10))
except Exception as e:
print(f"❌ 数据获取失败: {e}")
print("💡 请确认:1) API Key 有效 2) 网络连接正常 3) 标的代码格式正确")
3.3 Claude Code MCP 配置(.mcp.json)
将 QuantDash 封装为 MCP 工具后,Claude Code 可通过以下配置直接调用:
python
{
"mcpServers": {
"quantdash": {
"command": "python",
"args": ["-m", "quantdash_mcp_server"],
"env": {
"QUANTDASH_API_KEY": "your-api-key-here"
}
}
}
}
配置完成后,你只需在 Claude Code 中说:
"帮我分析贵州茅台最近30天的均线走势,计算5日和20日均线,并给出买入/卖出信号"
Claude Code 会自动通过 MCP 调用 QuantDash 拉取数据、计算指标、输出结果------全程零代码手写。
四、性能优化与量化进阶避坑指南
🔥 避坑 1:避免未来函数------善用 end_time 参数
回测中最致命的错误是「未来函数」------即使用了回测时点之后的数据。QuantDash 的 end_time 参数可精确控制数据截止时间:
python
import datetime
# 获取 2026-06-01 之前的最近 30 根日K线
end = int(datetime.datetime(2026, 6, 1).timestamp() * 1000)
df = qd.klines.get(
"600519.SH",
period="1d",
count=30,
end_time=end, # 关键:截止到 2026-06-01
to_dataframe=True
)
# 这样确保回测不会"看到"未来的数据
🔥 避坑 2:本地 Parquet 缓存------减少重复请求
对于频繁访问的历史数据,建议使用 Parquet 格式缓存:
python
import os
import pandas as pd
cache_dir = "./data_cache"
os.makedirs(cache_dir, exist_ok=True)
def get_cached_klines(symbol, period, count, force_refresh=False):
cache_file = f"{cache_dir}/{symbol}_{period}_{count}.parquet"
if not force_refresh and os.path.exists(cache_file):
return pd.read_parquet(cache_file)
df = qd.klines.get(symbol, period=period, count=count, to_dataframe=True)
df.to_parquet(cache_file)
return df
🔥 避坑 3:Polars/DuckDB 加速------大数据量场景
QuantDash 原生支持 Pandas,但在处理数千只标的的海量数据时,建议转换为 Polars 或 DuckDB 进行内存高效计算:
python
import polars as pl
# QuantDash 返回 Pandas DataFrame,一键转 Polars
df_pd = qd.klines.get("600519.SH", period="1d", count=1000, to_dataframe=True)
df_pl = pl.from_pandas(df_pd)
# 高性能聚合计算
result = df_pl.group_by("symbol").agg([
pl.col("close").mean().alias("avg_close"),
pl.col("volume").sum().alias("total_volume")
])
五、常见问题解答
Q1: Claude Code 如何通过 MCP 调用 QuantDash 获取实时行情?
A: 在项目根目录配置 .mcp.json 文件,将 QuantDash 封装为 MCP Server 工具。配置完成后,Claude Code 会自动识别并调用这些工具。你只需用自然语言描述需求(如"获取 AAPL 当前价格"),Claude Code 会通过 MCP 协议调用 QuantDash 的 qd.quotes.get 接口返回实时数据。免费 API Key 可在 https://quantdash.net/dashboard/keys/ 获取。
Q2: QuantDash 支持哪些复权方式?MCP 调用时如何指定?
A: QuantDash 支持五种复权模式:
forward(默认):前复权 - 比例复权,适合计算收益率backward:后复权 - 比例复权forward_additive:前复权 - 差值复权,适合观察绝对价差backward_additive:后复权 - 差值复权none:不复权
在 MCP 工具调用时,只需在参数中指定 adjust 字段即可。
Q3: 如何用一套代码同时获取 A 股、美股、港股的数据?
A: QuantDash 采用统一的代码后缀格式:
- A股:
600519.SH(上交所)、000001.SZ(深交所) - 美股:
AAPL.US - 港股:
00700.HK
将任意组合传入 qd.klines.batch() 即可一次拉取多市场数据,无需切换任何配置。