前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pyqlib平台:微软开发的量化投资平台

pyqlib平台:微软开发的量化投资平台

作者头像
三更两点
发布2021-11-19 15:46:37
8860
发布2021-11-19 15:46:37
举报

介绍

  • 官网:https://github.com/microsoft/qlib
  • 是面向AI的金融量化平台、实现其潜在的价值,创造AI在量化投资的价值。包括全部的机器学习中的数据处理、模型训练、回测;以及量化投资的Alpha 预测、风险模型、市场动态性建模、操作顺序等。使用Qlib可以快速的实现想法到量化投资的策略。
  • 最底层的是基础架构层(Infrastructure)。Qlib 的数据服务模块(Data Server)提供了高性能的数据存储设计,让 AI 算法可以更快地处理更多金融数据。训练模块(Trainer)则为 AI 算法提供了灵活的接口来定义训练模型的过程,让 Auto-ML 等算法成为可能,也为分布式训练提供了接口。而模型管理模块(Model Manager)可以让用户更好地管理繁多的 AI 模型,更快地迭代其 AI 算法。
  • 中间层是量化投资流程(Workflow)。信息抽取模块(Information Extractor)负责从异构数据中提取有效的信息。预测模型(Forecast Model)会输入抽取的信息,输出可供金融专家参考的未来收益、风险等等预测,然而预测模型需要依靠底层海量数据才能训练出精准、有效的预测模型。而投资组合生成模块(Portfolio Generator)则能根据预测得到 Alpha 信号和风险信号辅助生成投资策略组合。订单执行模块(Order Executor)是投资的最后一步——交易执行,帮助用户判断何时下单也是一门艺术。
  • 最上层是交互层(Interface)。其中,分析模块(Analyzer)会根据下层的预测信号、仓位、执行结果做出详细的分析并呈现给用户。
  • Qlib包含常用的 LightGBM、GRU、GATs模型。
  • 下载数据集
代码语言:javascript
复制
import qlib
print(qlib.__version__)

# 下载数据
# region in [REG_CN, REG_US]
from qlib.config import REG_CN
provider_uri = "../datasets"  # target_dir
qlib.init(provider_uri=provider_uri, region=REG_CN)

# 加载交易日期
from qlib.data import D
StockCalendar =  D.calendar(start_time='2010-01-01', end_time='2017-2-20', freq='day')
print(StockCalendar,type(StockCalendar),StockCalendar.ndim,StockCalendar.shape,StockCalendar.size,StockCalendar.dtype)

Stockname = D.instruments(market='all')
print(Stockname)

instruments = D.instruments(market='csi300')
StockList = D.list_instruments(instruments=instruments, start_time='2010-01-01', end_time='2017-12-31', as_list=True)
print(type(StockList),len(StockList),StockList,)

# 查找股票
instruments = ['SH600000']
fields = ['$close', '$volume', 'Ref($close, 1)', 'Mean($close, 3)', '$high-$low']
StockHistory = D.features(instruments, fields, start_time='2010-01-01', end_time='2017-12-31', freq='day')
print(type(StockHistory),"\n",StockHistory)

集成模型

  • Qlib集成的模型包括:LightGBM、MLP、LSTM等,用户也可以集成自己的模型。
    • 自定义的算法:用户必须定义一个继承( qlib.model.base.Model)的算法类,重写方法。
    • 写一个config文件来描述路径、参数
  • config文件示例
代码语言:javascript
复制
model:
    class: LGBModel
    module_path: qlib.contrib.model.gbdt
    args:
        loss: mse
        colsample_bytree: 0.8879
        learning_rate: 0.0421
        subsample: 0.8789
        lambda_l1: 205.6999
        lambda_l2: 580.9768
        max_depth: 8
        num_leaves: 210
        num_threads: 20

工作流

  • 数据
    • 加载数据
    • 数据处理
    • 切片
  • 模型
    • 训练接口
    • 保存模型、加载
  • 验证
    • 预测分析
    • 回测
  • workflow 示例:configuration.yaml
代码语言:javascript
复制
    provider_uri: "~/.qlib/qlib_data/cn_data"
    region: cn
market: &market csi300
benchmark: &benchmark SH000300
data_handler_config: &data_handler_config
    start_time: 2008-01-01
    end_time: 2020-08-01
    fit_start_time: 2008-01-01
    fit_end_time: 2014-12-31
    instruments: *market
port_analysis_config: &port_analysis_config
    strategy:
        class: TopkDropoutStrategy
        module_path: qlib.contrib.strategy.strategy
        kwargs:
            topk: 50
            n_drop: 5
    backtest:
        verbose: False
        limit_threshold: 0.095
        account: 100000000
        benchmark: *benchmark
        deal_price: close
        open_cost: 0.0005
        close_cost: 0.0015
        min_cost: 5
task:
    model:
        class: LGBModel
        module_path: qlib.contrib.model.gbdt
        kwargs:
            loss: mse
            colsample_bytree: 0.8879
            learning_rate: 0.0421
            subsample: 0.8789
            lambda_l1: 205.6999
            lambda_l2: 580.9768
            max_depth: 8
            num_leaves: 210
            num_threads: 20
    dataset:
        class: DatasetH
        module_path: qlib.data.dataset
        kwargs:
            handler:
                class: Alpha158
                module_path: qlib.contrib.data.handler
                kwargs: *data_handler_config
            segments:
                train: [2008-01-01, 2014-12-31]
                valid: [2015-01-01, 2016-12-31]
                test: [2017-01-01, 2020-08-01]
    record:
        - class: SignalRecord
            module_path: qlib.workflow.record_temp
            kwargs: {}
        - class: PortAnaRecord
            module_path: qlib.workflow.record_temp
            kwargs:
                config: *port_analysis_configython
  • 运行:
代码语言:javascript
复制
$ qrun configuration.yaml

下载数据集

代码语言:javascript
复制
$ python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# download 1min
$ python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/qlib_cn_1min --region cn --interval 1min

数据收集

代码语言:javascript
复制
$ python scripts/dump_bin.py  # 将任意的CSV数据转化为bin格式的

策略管理

  • qlib提供很多投资策略,也可以根据自己的需要制定策略。但是自定义的策略要集成qlib.contrib.strategy.BaseStrategy,所有的策略类都需要继承这个类。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 集成模型
  • 工作流
    • 下载数据集
      • 数据收集
      • 策略管理
      相关产品与服务
      数据保险箱
      数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档