核心关键词:历史行情数据、策略回测、K线数据、量化数据库、交易所API、Python脚本、复权处理
做足历史行情下载的功课,你的策略回测就有了稳态地基。下文将按市场分类,手把手示范如何把 沪深A股、港股、期货、数字货币 四大赛道的历史行情数据“吃”进本地数据库,并为交易逻辑测试打下坚实底座。
一、沪深A股:掘金与 Baostock 双通道
下载脚本位置
| 方式 | 脚本文件 |
|---|---|
| Baostock | script/crontab/reboot_sync_a_klines.py |
| 掘金 | script/crontab/reboot_sync_gm_a_klines.py |
注意事项
- 后复权优先:后复权 能让回测结果更加平滑,避免配股、分红导致的跳档。
- 分批下载:建议只取所需标的和周期,批量拉取 全市场历史行情数据 既慢又冗余。
- 颗粒度限制:Baostock 提供最小 5 分钟级 K 线,暂无成交额、分时量比等指标。
- 时间窗:掘金分钟级历史 仅保留 90 天,如需更久,请及早规划。
示例:重点追踪 000002、002594 等热门股,用 Baostock 拉 2020-01-01 起的日线即可:
python script/crontab/reboot_sync_a_klines.py run_codes=000002,002594 f_start_datetime=2020-01-01二、港股:富途 API 直连
下载脚本
script/crontab/reboot_sync_hk_klines.py
富途 API 具备 标的数量限制,务必做切片请求,防止超限。
操作提示
- 先在富途 OpenAPI 开通权限,再填写 token。
- 下载每页 200 支股票,可循环分页遍历。
- 建议周期以 1 分钟、5 分钟 为主,更高频率需专业账号。
三、期货:天勤 API + 掘金双保险
| 数据源 | 脚本文件名 | 备注 |
|---|---|---|
| 天勤 | reboot_sync_futures_klines.py | 需专业版或序列号 |
| 掘金 | reboot_sync_gm_futures_klines.py | 90 天分钟级限制 |
免费额度巧利用
- 天勤提供 15 天专业试用,可集中批量采集主力合约 tick 级或 1m K线,完成本地 seed。
- 试用结束依旧可运行编号型回测库,留存已下载即无须续费。
四、数字货币:Binance 永续合约极速下载
脚本与存储
reboot_sync_currency_klines.py 使用 Binance USDT 永续合约 API ,支持 全标的日线至 1m 级 K 线。
常见问题速解
- 首次下载无效?
如果 WEB 端先前曾浏览过比特币行情,库中时间戳已被标记“最新”,需先清空表再重拉。 - 更新策略
设置 定时任务 每日00:05追加最新 K 线,脚本增量无重复问题:
0 0 * * * /usr/bin/python3 /chanlun-script/reboot_sync_currency_klines.py >> /var/log/sync.log 2>&1五、备用姿势:QQ群文件+VNPY 预置包
无 VPN、无复杂 API?用“现成压缩包” 5 分钟导入本地数据库。
5.1 VNPY 股票+期货数据
- 文件名:
vnpy_mysql_data.zip 范围:
- A 股:
2019-01-01起 1m K线(含 000001, 000858, 002603… 共 5 支样例) - 期货:
ag2206, al2205, cu2205 …共计 10 支合约
- A 股:
- 一键导入:解压并执行
mysql -u root -p vnpy < vnpy_mysql_data.sql即可创建独立回测库。
5.2 数字货币迷你包
- 文件:
chanlun_currency_data.zip - 标的:BTC/USDT、ETH/USDT、EOS/USDT、ETC/USDT
- 周期:
w, d, 4h, 60m, 30m, 15m, 5m, 1m - 时间:2015-2022 全量
六、自动化:哨兵脚本与定时任务
在 Linux crontab 中加入如下三行,实现入库无人值守:
# 每日零点追加股票
0 0 * * * python3 script/crontab/reboot_sync_a_klines.py
# 每工作日 16:00 追加港股
0 16 * * 1-5 python3 script/crontab/reboot_sync_hk_klines.py
# 每日 07:00 追加数字货币
0 7 * * * python3 script/crontab/reboot_sync_currency_klines.py七、FAQ:老玩家常被问到的7个问题
1. 全市场行情值得一次性下载吗?
不建议。历史行情数据 占用空间巨大(上百 GB),且冗余标的会拖慢回测。按策略标的切片 获取才是性价比最高的方案。
2. 后复权在回测时会不会影响年化?
后复权 不改变每日收益率本身,但会把价格平滑,避免异常跳空,保证 夏普率 更加贴近真实。
3. 期货 tick 级数据能否用免费 API 拉?
tick 只在 天勤专业版、掘金 MT5、交易所官方行情终端 上开放。免费 API 官方普遍只开放 1m 及以上周期。
4. 数据库 Sync 出现 “Violation time index” 报错怎么办?
通常是 重复插入相同主键。在 insert_klines 前使用 ON DUPLICATE KEY UPDATE 或删掉当天批次后重跑。
5. 如何确认历史行情数据无缺失?
用 缺失日期检测脚本,对标的做 expected_rows = days * 24 * 60 速算,差异>1%即重新拉取。
6. 期货合约换月导致代码更迭?
用 连续主力合约映射表(m@代码) 统一标识,脚本自动指向活跃合约即可。
7. Windows 系统能否同样部署?
可以。建议安装 WSL2 + Docker 或 Anaconda,兼容 Linux 目录结构,脚本不改动即可跑。
👉 让自动下载与策略回测并行,QT 回测框架将效率再提升一倍!
八、小结:一条高效数据流的工作流
- 明确策略 标的池 与 周期需求。
- 选用对应 交易所API 或 现成压缩包。
- 通过脚本落地 增量历史行情下载。
- 配置 crontab 维护 数据保鲜。
- 回归优胜策略 验证 & 优化。
只要按以上步骤稳步推进,策略回测 不再被“缺数据、等数据”拖后腿。