技术分享

【Python量化实战 #02】Python获取股票历史K线做回测:mairui stock_history实战

量化回测的第一步,往往不是策略,而是稳定、可复现的历史 K 线。本文是「Python量化实战」第 2 篇(#02),聚焦 stock_history:用 Python 拉取 A 股历史行情,并为回测灌数做好准备。

如果你还没安装 SDK,请先阅读「Python量化实战」#01,或直接访问 SDK 说明与下载页

接口在做什么?

stock_history(code, period, dividend, st=..., et=..., lt=...) 对应官网「历史行情」类接口,可按周期取开高低收量额等字段。周期常见取值:

  • d 日线 · w 周线 · m 月线
  • 分钟线依文档支持的级别(如 5 / 15 / 30 / 60 等,以 API 文档 为准)

dividend(除权)常用 n(不复权)等,具体枚举请对照文档,回测前务必统一口径。

最小可运行示例

from mairui import Client

with Client(licence="你的证书UUID") as api:
    bars = api.stock_history(
        "000001.SZ",
        "d",
        "n",
        st="20240101",
        et="20241231",
    )
    print(len(bars), bars[0] if bars else None)

只要最新 200 根日线时,用 lt 更省流量:

bars = api.stock_history("600519.SH", "d", "n", lt=200)

灌进 pandas,方便回测

import pandas as pd
from mairui import Client

with Client(licence="你的证书UUID") as api:
    raw = api.stock_history("000001.SZ", "d", "n", st="20230101", et="20251231")

df = pd.DataFrame(raw)
# 字段名以接口实际返回为准,常见含 t/o/h/l/c/v 等
print(df.head())
print(df.tail())

建议在本地落盘(parquet/csv)并记录 st/et/period/dividend,保证实验结果可复现。

多标的批量拉取

SDK 提供 api.map,适合回测前批量灌数:

codes = ["000001.SZ", "600519.SH", "000002.SZ", "300750.SZ"]

with Client(licence="你的证书UUID") as api:
    batch = api.map(
        api.stock_history,
        codes,
        period="d",
        dividend="n",
        st="20240101",
        et="20241231",
        max_workers=8,
    )

for code, bars in zip(codes, batch):
    print(code, len(bars) if bars is not None else None)

实战注意点

  • 证书日限:免费证有每日调用上限,灌全市场请评估额度或升级证书。
  • 代码格式:多数历史接口使用 000001.SZ / 600000.SH 形式,与实时短码可能不同。
  • 停牌与空段:回测对齐时注意交易日历,不要把日历日当交易日硬连。
  • 先试调再写库:可用 API Playground 确认字段后再批量下载。

和「最新行情切片」的区别

若你只要「最近一段」而不是任意历史区间,也可关注 stock_latest;完整长历史优先 stock_history。字段差异以文档为准。

下一篇预告

第 3 篇(#03)讲实时行情:stock_real_timestock_ssjy、多代码批量,以及如何做简易监控脚本。

关键词:Python 获取股票历史数据、K线 API、量化回测数据、stock_history、A股日线接口、麦蕊 mairui。

麦蕊智数 MyData 团队 · Python量化实战 #02