介绍 官网: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,所有的策略类都需要继承这个类。