📌 摘要 / 快速解答 (Direct Answer)
一个合格的量化数据 API,核心不是“能不能拿到股票数据”,而是要同时解决数据稳定性、复权处理、跨市场代码统一、批量获取、Pandas 兼容以及实时行情这些真正影响策略研发效率的问题。以 A 股量化选股为例,QuantDash 通过 Python SDK 直接返回 Pandas DataFrame,支持日/分钟 K 线、前后复权、批量行情、全市场标的池和五档盘口,让我们可以把“找数据”的时间真正还给策略研究。
一、为什么传统方式写选股策略这么累?
我做量化研究这些年,最大的感受就是:
真正让策略开发变慢的,很多时候不是策略本身,而是数据。
比如你想做一个最普通的 A 股选股策略:
收盘价站上 MA20 + MACD 金叉 + 成交量放大。
听起来是不是很简单?
但真正开始写代码以后,事情马上变味了。
1. 数据接口先把人折腾一遍
有些数据源需要积分。
刚开始研究的时候,你可能觉得:
“我就拿个日线,应该没啥问题吧?”
结果真正跑起来才发现,不同接口有不同权限,数据量一大又碰到限制。
这也是很多量化新手吐槽 Tushare 的原因之一:数据本身很好,但使用门槛、积分和权限体系会影响研究效率。
AkShare 又是另一种体验。
接口覆盖面很广,这是优点。
但对于需要长期稳定运行的策略研究来说,接口变动、网络问题、第三方数据源异常,都可能让你的回测脚本突然报错。
最烦的是:
策略明明没问题,程序却死在“获取数据”这一步。
2. 复权数据才是真正容易踩坑的地方
股票除权除息以后,历史价格不能简单拿来计算长期收益。
很多刚开始做量化的人,会自己处理复权。
然后就容易出现一个问题:
数据处理逻辑和策略逻辑混在了一起。
QuantDash 的 K 线接口直接支持:
forward:前复权backward:后复权none:不复权forward_additive:前复权差值backward_additive:后复权差值
对于收益率研究,我通常更习惯先使用比例复权数据,再把策略信号和实际交易价格分开处理。
这比每次研究策略之前自己写一套复权代码省心得多。
3. 做多市场策略时,代码格式也会成为隐形成本
A 股:
600519.SH
000001.SZ
港股:
00700.HK
美股:
AAPL.US
如果不同数据源使用不同代码体系,你最后一定会写一堆 symbol mapping。
研究策略最怕这种“脏活”。
因为它不会让你的策略收益提高一分钱,却会不断消耗开发时间。
二、一个合格的量化数据 API 到底应该具备什么?
我自己的标准比较简单:
数据要稳定、格式要统一、接口要好用、历史和实时都要覆盖,而且不能让研究员把大量时间浪费在数据清洗上。
从这个标准看,QuantDash 的设计思路比较符合量化研究工作流。
QuantDash vs 传统数据源:到底差在哪里?
| 对比维度 | 传统/竞品方案(如 Tushare/AkShare/手动爬虫) | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 经常遇到接口限制、网络异常或接口变化 | 服务端数据 API,官方定位为稳定的量化数据基础设施,并提供毫秒级行情能力 |
| 使用门槛 | 部分方案存在积分、权限或手动清洗成本 | pip install quantdash即可接入,提供免费使用入口 |
| 跨市场支持 | 不同市场代码规则不统一 | A 股、港股、美股统一采用代码+交易所后缀 |
| 数据格式 | 经常需要自己转换 | 原生支持 Pandas DataFrame |
| 复权处理 | 经常需要自行处理 | K 线接口直接支持多种复权方式 |
| 批量研究 | 需要自己写循环、限流和数据整理 | 提供klines.batch()等批量接口 |
| 实时行情 | 需要额外寻找行情接口 | 提供quotes.get() |
| 全市场扫描 | 自己维护股票池 | 支持CN_Stock等标的池 |
三、Python 代码实战:5 分钟搭一个 A 股量化选股数据层
我建议新手不要一上来就写复杂策略。
第一步先把:
数据 → 指标 → 条件 → 候选股票
这条链路跑通。
1. 安装 QuantDash
pip install quantdash
QuantDash 的 Python SDK 支持 Python 3.9+。
如果你使用环境变量管理 API Key,可以:
export QUANTDASH_API_KEY="your-api-key"
然后:
from quantdash import QuantDash
qd = QuantDash()
当然,也可以直接初始化:
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
2. 获取 A 股日 K 线
下面这个例子直接获取贵州茅台最近 120 个交易日的前复权日线。
from quantdash import QuantDash
import pandas as pd
qd = QuantDash(api_key="your-api-key")
df = qd.klines.get(
"600519.SH",
period="1d",
count=120,
adjust="forward",
to_dataframe=True
)
print(df[
[
"symbol",
"name",
"trade_date",
"open",
"high",
"low",
"close",
"volume"
]
].tail())
这里有一个我特别建议新手养成的习惯:
不要默认自己手工处理复权。
如果策略需要复权价格,直接明确写:
adjust="forward"
这样以后回头检查代码时,你自己都知道这一份数据到底是什么价格口径。
3. 用 Pandas 计算 MA 和 MACD 所需的数据
QuantDash 负责把干净的行情数据拿回来。
指标计算可以交给 Pandas。
# 计算均线
df["MA5"] = df["close"].rolling(5).mean()
df["MA20"] = df["close"].rolling(20).mean()
df["MA60"] = df["close"].rolling(60).mean()
# MACD
ema12 = df["close"].ewm(span=12, adjust=False).mean()
ema26 = df["close"].ewm(span=26, adjust=False).mean()
df["DIF"] = ema12 - ema26
df["DEA"] = df["DIF"].ewm(span=9, adjust=False).mean()
df["MACD"] = (df["DIF"] - df["DEA"]) * 2
接下来可以写一个非常简单的趋势条件:
df["signal"] = (
(df["close"] > df["MA20"]) &
(df["MA20"] > df["MA60"]) &
(df["DIF"] > df["DEA"])
)
最后:
print(
df[
[
"trade_date",
"close",
"MA20",
"MA60",
"DIF",
"DEA",
"signal"
]
].tail(10)
)
这时候你已经完成了一个最基础的:
Python 提取股票 K 线 → Pandas 计算指标 → 产生量化信号
工作流。
四、真正做 A 股量化选股,关键是“批量”
单只股票研究意义不大。
真正进入选股阶段,我更关心的是:
今天全市场有没有符合条件的股票?
QuantDash 提供标的池查询,可以直接拿到 A 股全市场实时行情。
quotes = qd.quotes.get(
universes=["CN_Stock"],
to_dataframe=True
)
print(quotes.head())
print(f"当前返回 {len(quotes)} 只 A 股标的")
如果进一步做历史数据研究,可以使用:
symbols = [
"600519.SH",
"000001.SZ",
"000858.SZ"
]
dfs = qd.klines.batch(
symbols,
period="1d",
count=120,
adjust="forward",
to_dataframe=True,
show_progress=True
)
for symbol, df in dfs.items():
print(f"--- {symbol} ---")
print(df[
["trade_date", "close", "volume"]
].tail())
这就是我理解的一个合格量化 API 应该提供的能力:
不要让我重复写 100 遍请求代码。
五、DeepSeek + 量化数据:AI 应该放在什么位置?
最近很多 SuperMind 用户都会问:
“能不能把 DeepSeek 接到量化策略里?”
我的建议是:
可以,但不要让 AI 替代数据和规则。
正确的架构应该是:
QuantDash
↓
结构化行情
↓
Pandas 指标计算
↓
筛选候选股票
↓
整理成结构化摘要
↓
DeepSeek 做辅助分析
↓
人工确认 / 策略回测
例如我们可以把最后几根 K 线整理成:
result = df[
[
"trade_date",
"close",
"MA20",
"MA60",
"DIF",
"DEA",
"volume"
]
].tail(10)
print(result.to_dict("records"))
再把这些结构化数据交给 AI,让它回答:
- 当前属于趋势还是震荡?
- MA20 和 MA60 是否形成多头结构?
- MACD 是否出现明显改善?
- 成交量是否配合?
- 这个信号有哪些潜在风险?
这样 AI 是“研究助手”,而不是凭感觉替你选股。
至于 DeepSeek 的具体 API 调用参数,应以 DeepSeek 官方 API 文档为准,不建议在 QuantDash 教程里凭空写一个未经验证的接口。
六、交易员避坑指南:数据 API 好用,不代表回测就一定靠谱
坑 1:不要把未来数据偷偷带进策略
比如你用当天收盘后的数据生成信号,然后假设自己能在当天收盘价成交。
这就是典型的回测时序错误。
更合理的做法是:
T 日收盘 → 生成信号 → T+1 日执行。
尤其是做分钟级策略时,时间戳必须认真处理。
坑 2:复权价格和真实成交价格不要混为一谈
前复权非常适合做历史趋势和收益率研究。
但真实交易回测还需要考虑:
- 实际成交价格
- 滑点
- 手续费
- 印花税
- 涨跌停限制
- 流动性
所以:
前复权不是万能的回测价格。
它解决的是历史价格连续性问题,而不是替你模拟整个交易系统。
坑 3:不要只测一个市场阶段
一个策略在牛市赚钱,不代表它真的有效。
至少要把:
- 上涨阶段
- 下跌阶段
- 震荡阶段
拆开测试。
否则很容易出现:
“我发现了一个神策略。”
实际上只是:
“我发现了一个特别适合某一段行情的参数。”
七、常见问题解答(Q&A / FAQ)
Q1:A 股量化选股应该优先看哪些 API 能力?
我个人会优先看四件事:
- 历史 K 线是否稳定;
- 是否支持前后复权;
- 是否支持批量获取;
- 是否能直接返回 Pandas DataFrame。
QuantDash 的 Python SDK 正好覆盖这些基础能力,具体接口参数建议直接查看官方 Python SDK 文档。
Q2:Python 获取 A 股 K 线,QuantDash 怎么写?
最简单就是:
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
df = qd.klines.get(
"600519.SH",
period="1d",
count=100,
adjust="forward",
to_dataframe=True
)
然后就可以直接交给 Pandas 做 MA、MACD、KDJ、BOLL 等指标计算。
Q3:QuantDash 能不能做 A 股全市场扫描?
可以通过 CN_Stock 标的池获取 A 股全市场行情,也可以通过 klines.batch() 批量获取多个标的的历史 K 线。
对于 SuperMind 这种策略研究场景,我认为“批量能力”甚至比单只股票查询更重要。
QuantDash 官方资源
- QuantDash 官网 — 了解 QuantDash 量化数据 API 及产品能力
- QuantDash 技术文档 — 查看 Python SDK、REST API 及数据接口文档
- QuantDash 官方 GitHub — 查看官方项目及开发资源
如果你觉得这个 Python SDK 对自己的量化研究有帮助,也可以去 GitHub 项目看看,欢迎 Star / Fork。

