作为一个刚转量化的小白,我最开始学回测时,满脑子都是策略逻辑——什么时候买入,什么时候止损。直到导师问我:“你的历史数据复权了吗?时间戳对齐了吗?”我整个人都懵了。后来自己摸索了好久,才把历史K线数据处理这一关打通。今天就用这篇笔记,把我的场景重现、需求拆解和一套可复现的方案记下来,希望能帮到同样在这里的学习者。
上手场景:从跑通策略到信任结果
第一次跑均线交叉策略,我用某个免费CSV数据集,回测出来夏普比率1.8,最大回撤不到5%。简直觉得量化圣杯到手了。结果实盘模拟第一周就亏掉两个点。复盘发现,免费数据的分钟线时间戳是UTC+0,而我误当成美东时间,结果买卖信号在非交易时段密集出现,全成了噪音。
从那之后,我给自己定了规矩:回测前先做数据“体检”。
需求分层:你到底需要什么颗粒度的K线?
不同策略要求的数据精细度完全不同:
- 日线:适合中长期趋势跟踪,学习入门选它最友好。
- 分钟线:做日内反转、量价分析必备,需要精确到1分钟或5分钟。
- Tick数据:高频策略的原料,但数据量级是指数级增长,需要批处理思维。
我的学习路径就是:先拿日线验证策略逻辑,再用分钟线做参数优化,最后才考虑tick。
痛点自检表:拿到K线后必查的三个维度
每次获取数据后,我会对照这张表做初步质检:
| 数据类型 | 常见问题 | 我的处理方式 |
|---|---|---|
| 日线 | 复权不准 | 短期训练集用前复权,长期测试集用后复权 |
| 分钟线 | 时间不对齐 | 统一转成美东时间,手工剔除节假日 |
| 历史tick | 数据量太大 | 按周拆分下载,存为Parquet节省HDFS空间 |
特别是复权,很多人以为收盘价就是“真实价格”。实际上,分红、拆股都会造成价格缺口。如果不处理,回测中会看到莫名其妙的大跳空,策略就会“被赚钱”或“被止损”。
解决方案实操:从API调用到本地数据库
我目前主力用的数据源是专业接口,比如ALLTICK API的美股历史K线API。它返回JSON标准结构,处理起来很舒服。下面是我学习笔记里的代码片段,直接请求SPY日线:
import requests
import pandas as pd
# 调用AllTick获取历史日K线
url = "https://api.alltick.co/stock/history/kline"
params = {
"symbol": "SPY",
"interval": "1d",
"start_date": "2024-01-01",
"end_date": "2024-12-01"
}
resp = requests.get(url, params=params)
data = resp.json()
df = pd.DataFrame(data['kline'])
df['time'] = pd.to_datetime(df['time'])
df.set_index('time', inplace=True)
print(df.head())
拿到数据后别急着跑回测,还要做好本地缓存。我跟着教程用DuckDB建了一个轻量数据库,既能用SQL查询,又不用装臃肿的MySQL:
# 本地存储示例 DuckDB 建表与增量写入
import duckdb
conn = duckdb.connect('market_data.db')
conn.execute("""
CREATE TABLE IF NOT EXISTS spy_daily (
time DATE,
open FLOAT,
high FLOAT,
low FLOAT,
close FLOAT,
volume BIGINT
)
""")
# 将新数据增量插入表中
conn.execute("INSERT INTO spy_daily SELECT * FROM new_data")
四个处理细节,一定要写进你的checklist
我把踩坑经验总结成四条铁律:
- 时间对齐:美股正常交易时间是美东9:30到16:00。分钟线必须裁剪,节假日用
pandas_market_calendars库过滤,不然回测引擎会在复活节那天给你发出交易信号。 - 复权处理:请求数据时就指定复权参数。中长线用后复权,短线用前复权。千万不要默认数据已经复权。
- 缺失值填充:对停牌或零成交时段,向前填充close值,并新建
is_filled标记,回测系统中读取标记后可以跳过这些人为补全的区间。 - 数据校验:随机抽几天,和雅虎财经或交易所官方数据做对比。我写过一个脚本自动计算偏差,偏差超过0.1%就报警。
总结:数据质量是回测的基石
学量化最容易被忽视的基本功,就是数据处理。策略再精妙,数据有问题,结论就毫无意义。我现在每次开始新项目,都会先花至少一整天时间验证K线质量。慢就是快——这句话在数据准备阶段尤其重要。希望这篇笔记能让你少走弯路。
共同学习,写下你的评论
评论加载中...
作者其他优质文章
