Skip to content

humbleman24/MinStock

Repository files navigation

MinModel

一个最小起步版的量化数据项目,目前先把 baostock 5 分钟 K 线下载流程搭起来,方便后续接 TS2VEC -> Transformer 预测链路。

安装依赖

python3 -m pip install -r requirements.txt

下载 5 分钟数据

python3 scripts/download_baostock_5m.py \
  --codes sh.600000 sz.000001 \
  --start-date 2024-01-01 \
  --end-date 2024-03-31

默认输出目录是 data/raw/baostock_5m/

下载全市场历史 5 分钟数据

python3 scripts/download_baostock_full_market_5m.py

这个脚本会:

  1. 扫描上交所和深交所常见 A 股代码段。
  2. 通过 baostock.query_stock_basic() 识别真实存在的个股,并记录上市日期、退市日期、状态等元数据。
  3. 按股票从 ipoDate 下载到退市日或今天,分块拉取 5 分钟 K 线。
  4. 将原始数据保存到 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.csv
  • data/metadata/transformer_daily_index.csv

前者适合后续做单股票或多股票的时序 embedding 数据集,后者适合做“连续多日窗口 -> 未来收益预测”的 Transformer 样本构造。

TS2VEC 预训练

python3 scripts/train_ts2vec.py \
  --window-size 96 \
  --stride 24 \
  --epochs 10

这里推荐先把 TS2VEC 当成自监督预训练模块,只看 5 分钟连续窗口,不需要 label。

生成日级 embedding

python3 scripts/build_daily_embeddings.py \
  --checkpoint artifacts/ts2vec.pt

这个脚本会把每只股票的单日 5 分钟序列编码成一个 embedding,并自动生成 future_return 标签,输出到 data/metadata/daily_embeddings.csv

Transformer 监督训练

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、成交量和成交额。

下一步建议

拿到分钟线之后,可以继续做这几步:

  1. 清洗停牌、缺失 bar、午休和异常成交数据。
  2. 按股票或按交易日切成定长窗口,供 TS2VEC 学习 embedding。
  3. 将 embedding 序列送进 Transformer,做收益率方向或回归预测。

MinModel_TS2Vec 量化版特性与消融实验设计

然后因为是股票的日内数据作为训练集这样的,所以说,我觉得开始时间比较的关键,有时候crop的话经常crop掉不行,但是这个是后续消融再测试吧

本项目对原版 TS2Vec (AAAI 2022) 进行了针对“高频量化金融数据 (A股 5min)”的深度调优,解决了原版应用于非平稳时序数据时的过拟合、泄漏与噪声干扰问题。

核心改造机制

  1. 因果填充 (Causal Padding)
    增加了 Conv1dPad 封装,支持 causal=True/False 切换。在多步预测任务中强制开启因果卷积模式(仅左填充),根绝了未来数据穿越(Data Leakage)的现象。
  2. 金融截面实例对比 (Cross-Sectional Instance Loss)
    针对全市场股票具有强烈共振(Beta)的特性,强制令“同一时间截面”下的不同股票进行特征相互排斥。该机制变相赋予了模型提取特异性收益因子 (Alpha) 的能力。
  3. 低频趋势过滤 (Temporal Unit Gate)
    基于 K线 1D Max-Pooling 的层次化结构,引入了 temporal_unit。允许模型跳过微观高频噪音的时间序列对比,在更宏观的压缩维度才施加时序一致性约束。

推荐进行消融实验设计的参数清单

为了验证模型在 A股 5分钟级别序列上的表现,建议利用现有架构的灵活性进行如下维度的消融对比(Ablation Studies):

1. 任务防泄漏机制:Causal vs. Symmetric Padding

  • 变量设定:初始化 TS2Vec(causal=True) 对比 TS2Vec(causal=False)
  • 物理意义:观察非因果卷积在“表示学习截面聚类(分类)”和“回归预测(Forecast)”两个下游任务上的表现背离。验证 causal=False 时预测模型极度过拟合的假说。

2. 宏观去噪能力:temporal_unit 深度的调节

  • 变量设定temporal_unit 分别设置为 0 (默认激进对比)、2 (20min级宏观)、4 (全天宏观1.5H级)。
  • 物理意义:测试哪一层的池化尺度能够避开高频微观结构中杂乱的随机游走噪音。我们当前的经验法则是:针对 5min / 48周期的日内数据,temporal_unit=4 能极大提高鲁棒性。

3. 数据配给策略:全局乱序洗牌 (Global Shuffle) VS. 日内全截面对比 (Cross-Sectional)

  • 变量设定:DataLoader 提供 Batch 形式 A (同一天,不同的股票,逼迫剔除极强的公用市场大盘Beta) 对比 Batch 形式 B (不同的天,不同的股票,提炼通用的长期价格普适规律)。
  • 物理意义:验证不同的 DataLoader 组装形式,是如何重塑 InfoNCE 损失函数中分母(排斥对象)的能量流向,进而决定表征向量在因子验证期是倾向于绝对收益还是超额收益。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages