这个系列的博客博主打算使用qlib框架实现数据->模型->回测的全流程,之前博主使用backtrader(详情见:Backtrader量化&回测1——基本的交易策略与挂单买卖),但是效率与集成度不是很高,许多轮子还要自己想办法,因此这里博主改用qlib开始回测

Github官网:https://github.com/microsoft/qlib

1. 环境配置

环境安装

首先创建conda的环境:

conda create -n qlib python=3.11 # 创建一个叫qlib的python=3.11版本的
conda activate qlib

安装qlib:

pip install pyqlib

运行完成后即可使用qlib

初始化Qlib

cd ~/Desktop
mkdir qlib_data
cd qlib_data

初始化数据:

wget https://github.com/chenditc/investment_data/releases/latest/download/qlib_bin.tar.gz # 下载

解压后有三个文件夹,把这三个文件夹放到~/Desktop/qlib_data的文件夹中,得到如下目录结构:

  • ~/Desktop/qlib_data/calendars:主要看day.txt文件,表示交易日历
  • ~/Desktop/qlib_data/instruments:表示指数所属的股票代码,包含三列:股票代码、起始日期、终止日期
  • ~/Desktop/qlib_data/features:对应代码列表,包含高开低收等数据

2. 信息展示

交易日历与指数信息展示

使用如下代码进行信息的展示:

import qlib
from qlib.constant import REG_CN
from qlib.data import D

qlib.init(
    provider_uri='~/Desktop/qlib_data',  # 数据存储目录
    region=REG_CN,  # qlib的股票交易模型,不同的模式将导致不同的交易限制和成本
)

# 交易日历
trade_calendar = D.calendar(start_time='2025-01-01', end_time='2025-01-31', freq='day')
print(f"交易日:{len(trade_calendar)}")

# 股票列表
stock_instruments = D.instruments('all')
stock_list = D.list_instruments(instruments=stock_instruments, start_time='2025-01-01', end_time='2025-01-31')
print(f"股票数量:{len(stock_list)}")

得到结果:

交易日:18
股票数量:5399

股票数据展示

如果想要获取某一个个股的信息,使用如下代码:

import qlib
from qlib.constant import REG_CN
from qlib.data import D

if __name__ == '__main__':
    qlib.init(
        provider_uri='~/Desktop/qlib_data',  # 数据存储目录
        region=REG_CN,  # qlib的股票交易模型,不同的模式将导致不同的交易限制和成本
    )
    # 获取特征数据
    data = D.features(
        instruments=[
            'SZ000001',  # 平安
            'SH600519',  # 茅台
        ],
        fields=[
            # 基础数据
            '$open', '$high', '$low', '$close', '$volume',
            '$adjclose',  # 后复权成交价
            # 数据偏移
            'Ref($close, 1)',  # 昨日收盘价
            'Ref($close, -1)',  # 明天的收盘价(注意!未来函数)
            # 数据计算
            '($high + $low) / 2',  # 中间价
            '$close / Ref($close, 1) - 1',  # 当日收益率
            'Mean($close, 5)',  # 5日收盘价的均值
            'Max($high, 20)',  # 20日最高价
            'Min($low, 20)',  # 20日最低价
            'Std($close, 20)',  # 20日标准差
            # 技术指标
            'EMA($close, 5)',  # 5日移动平均
        ],
        start_time='2025-01-01',
        end_time='2025-01-31',
        freq='day'
    )
Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐