一个最小起步版的量化数据项目,目前先把 baostock 5 分钟 K 线下载流程搭起来,方便后续接 TS2VEC -> Transformer 预测链路。
python3 -m pip install -r requirements.txtpython3 scripts/download_baostock_5m.py \
--codes sh.600000 sz.000001 \
--start-date 2024-01-01 \
--end-date 2024-03-31默认输出目录是 data/raw/baostock_5m/。
python3 scripts/download_baostock_full_market_5m.py这个脚本会:
- 扫描上交所和深交所常见 A 股代码段。
- 通过
baostock.query_stock_basic()识别真实存在的个股,并记录上市日期、退市日期、状态等元数据。 - 按股票从
ipoDate下载到退市日或今天,分块拉取 5 分钟 K 线。 - 将原始数据保存到
data/raw/baostock_5m/,并把元数据和下载清单保存到data/metadata/。
示例:
python3 scripts/download_baostock_full_market_5m.py \
--limit 50 \
--chunk-years 1常用参数:
--limit: 只下载前 N 只股票,便于测试。--include-bj: 加入北交所常见代码段扫描。--chunk-years: 按几年为一个下载分块,默认 1 年。--overwrite: 即使文件已存在也重新下载。
python3 scripts/build_training_catalog.py这个脚本会从 data/raw/baostock_5m/ 扫描所有分钟线文件,并生成:
data/metadata/ts2vec_symbol_catalog.csvdata/metadata/transformer_daily_index.csv
前者适合后续做单股票或多股票的时序 embedding 数据集,后者适合做“连续多日窗口 -> 未来收益预测”的 Transformer 样本构造。
python3 scripts/train_ts2vec.py \
--window-size 96 \
--stride 24 \
--epochs 10这里推荐先把 TS2VEC 当成自监督预训练模块,只看 5 分钟连续窗口,不需要 label。
python3 scripts/build_daily_embeddings.py \
--checkpoint artifacts/ts2vec.pt这个脚本会把每只股票的单日 5 分钟序列编码成一个 embedding,并自动生成 future_return 标签,输出到 data/metadata/daily_embeddings.csv。
python3 scripts/train_transformer.py \
--embedding-csv data/metadata/daily_embeddings.csv \
--sequence-length 20 \
--label-horizon 1 \
--epochs 10这里的思路是:先用预训练好的 TS2VEC encoder 得到每个交易日的 embedding,再用 Transformer 学习“连续多日 embedding -> 未来收益”的监督任务。
--codes: 股票代码,支持一次下载多只。--start-date: 开始日期,格式YYYY-MM-DD。--end-date: 结束日期,格式YYYY-MM-DD。--adjustflag: 复权选项,1后复权,2前复权,3不复权。--fields: 自定义字段列表,默认包含时间、OHLC、成交量和成交额。
拿到分钟线之后,可以继续做这几步:
- 清洗停牌、缺失 bar、午休和异常成交数据。
- 按股票或按交易日切成定长窗口,供 TS2VEC 学习 embedding。
- 将 embedding 序列送进 Transformer,做收益率方向或回归预测。
然后因为是股票的日内数据作为训练集这样的,所以说,我觉得开始时间比较的关键,有时候crop的话经常crop掉不行,但是这个是后续消融再测试吧
本项目对原版 TS2Vec (AAAI 2022) 进行了针对“高频量化金融数据 (A股 5min)”的深度调优,解决了原版应用于非平稳时序数据时的过拟合、泄漏与噪声干扰问题。
- 因果填充 (Causal Padding)
增加了Conv1dPad封装,支持causal=True/False切换。在多步预测任务中强制开启因果卷积模式(仅左填充),根绝了未来数据穿越(Data Leakage)的现象。 - 金融截面实例对比 (Cross-Sectional Instance Loss)
针对全市场股票具有强烈共振(Beta)的特性,强制令“同一时间截面”下的不同股票进行特征相互排斥。该机制变相赋予了模型提取特异性收益因子 (Alpha) 的能力。 - 低频趋势过滤 (Temporal Unit Gate)
基于 K线 1D Max-Pooling 的层次化结构,引入了temporal_unit。允许模型跳过微观高频噪音的时间序列对比,在更宏观的压缩维度才施加时序一致性约束。
为了验证模型在 A股 5分钟级别序列上的表现,建议利用现有架构的灵活性进行如下维度的消融对比(Ablation Studies):
- 变量设定:初始化
TS2Vec(causal=True)对比TS2Vec(causal=False)。 - 物理意义:观察非因果卷积在“表示学习截面聚类(分类)”和“回归预测(Forecast)”两个下游任务上的表现背离。验证
causal=False时预测模型极度过拟合的假说。
- 变量设定:
temporal_unit分别设置为0(默认激进对比)、2(20min级宏观)、4(全天宏观1.5H级)。 - 物理意义:测试哪一层的池化尺度能够避开高频微观结构中杂乱的随机游走噪音。我们当前的经验法则是:针对 5min / 48周期的日内数据,
temporal_unit=4能极大提高鲁棒性。
- 变量设定:DataLoader 提供
Batch 形式 A(同一天,不同的股票,逼迫剔除极强的公用市场大盘Beta) 对比Batch 形式 B(不同的天,不同的股票,提炼通用的长期价格普适规律)。 - 物理意义:验证不同的 DataLoader 组装形式,是如何重塑 InfoNCE 损失函数中分母(排斥对象)的能量流向,进而决定表征向量在因子验证期是倾向于绝对收益还是超额收益。