跳转至

数据

回测的第一步是获取数据。QKA 负责下载、缓存和合并,用户只需指定股票代码。


基本用法

data = Data(symbols=['000001.SZ', '600000.SH'])

以上代码会:

  1. 从 baostock 下载日线数据
  2. 每只股票保存为独立的 parquet 文件到本地缓存
  3. 下次运行时直接读取缓存,无需重复下载

参数

参数 作用 默认值
symbols 股票代码列表 必填
period 数据周期 '1d'
adjust 复权方式:'qfq'(前复权)、'hfq'(后复权)、'bfq'(不复权) 'qfq'
source 数据源:'baostock''akshare' 'baostock'
data = Data(symbols=['000001.SZ'], adjust='hfq')

缓存位置

datadir/
└── baostock/
    └── 1d/
        └── qfq/
            ├── 000001.SZ.parquet
            ├── 600000.SH.parquet
            └── ...

每只股票独立文件。清除缓存直接删除该目录即可。

合并后的数据

多股票回测时,QKA 将各股票合并为一张宽表,列名格式为 {股票代码}_{字段名}

日期 000001.SZ_close 600000.SH_close
2024-01-02 10.2 8.1
2024-01-03 10.5 8.3

策略中无需关心此格式——self.get('close') 自动解析为横截面 Series。

两种加载模式

普通模式 — 适用于少量股票(几十只以内):

data = Data(symbols=['000001.SZ'])

懒加载(lazy) — 适用于大规模数据(数百只股票),分批计算,降低内存占用:

bt.run(lazy=True)

两种模式下策略代码完全一致,self.get()self.history() 用法不变。

数据源选择

数据源 优点 缺点
baostock(默认) 稳定,开箱即用 单线程下载
akshare 支持并发 个股接口偶发屏蔽
data = Data(symbols=['000001.SZ'], source='akshare')