下面我們就來試一下 Qlib 的安裝和運行內置算法策略。
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,請訪問這篇文章:《超詳細Python安裝指南(傳統(tǒng))》或 《Python數(shù)據(jù)分析與挖掘好幫手—Anaconda》 進行安裝,本文建議使用Anaconda。
由于qlib有許多許多依賴,如果你不想安裝過程中出現(xiàn)問題,或者引起其他程序的運行問題,建議使用Conda創(chuàng)建一個你的量化投資虛擬環(huán)境:
conda create -n my_quant python=3.8
Qlib 僅支持 Python3.7 以上的版本且暫不支持 Python3.10; 另外 Python 3.9 版本不支持模型性能繪制,因此我選擇創(chuàng)建Python3.8版本的虛擬環(huán)境。
(安裝方式一) pip 安裝:
pip install pyqlib
在pip安裝的過程中如果遇到任何問題,請搜索引擎解決,如果無法解決,可以嘗試下面的源碼安裝:
(安裝方式二 (推薦)) 源碼安裝:
# 提前安裝一些依賴
pip install numpy
pip install --upgrade cython
# clone and install qlib
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install
Windows 機器在安裝的時候可能會遇到下面這個問題:
這是因為安裝 qlib 的依賴 — tables 時出現(xiàn)了編譯錯誤,原因很多,我選擇逃學,因此建議使用 tables 的 wheel 文件進行安裝,這樣就不需要編譯了:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pytables
在上述網(wǎng)站下載適合你系統(tǒng)的 wheel 文件:
下載完畢后,輸入以下命令:
pip install 你的文件路徑/tables-3.6.1-cp39-cp39-win_amd64.whl
即可完成 tables 的安裝,然后再執(zhí)行一遍 python setup.py install 即可。
2. 數(shù)據(jù)準備
由于這套量化開源平臺的作者是中國人,所以非常貼心地準備好了A股數(shù)據(jù),大家可以輸入命令直接下載:
# 1天級別數(shù)據(jù)
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# 1分鐘級別數(shù)據(jù)
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
如果你需要其他分鐘級的數(shù)據(jù),修改interval即可。
你可以使用crontab定時自動更新數(shù)據(jù)(來自雅虎財經):
* * * * 1-5 python < script path > update_data_to_bin --qlib_data_1d_dir < user data dir >
手動更新數(shù)據(jù):
python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir < user data dir > --trading_date < start date > --end_date < end date >
3. 運行量化回測流程示例
Qlib 提供了一個名為 ** qrun
** 自動運行整個工作流程的工具(包括構建數(shù)據(jù)集、訓練模型、回測和評估)。
你可以按照以下步驟啟動自動量化研究工作流程并進行圖形報告分析,Quant Research 工作流程:
**Qrun
** 運行 lightgbm 工作流程的配置 workflow_config_lightgbm_Alpha158.yaml 如下所示:
cd examples # Avoid running program under the directory contains `qlib`
qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
結果如下:
可以看到這里包括三個統(tǒng)計分析:benchmark return (基準收益) / excess return without cost(除去手續(xù)費的超額收益)) / excess return with cost(包含手續(xù)費的超額收益)。每個統(tǒng)計分析中都有如下5個參數(shù):
大家可以看到,這個內置的算法和策略,在不包括手續(xù)費的情況下,相比于基準收益年化回報略高,但是在把手續(xù)費等費用算上之后,比滬深300基準收益略遜一籌。
如果你想要自定義這個策略和算法的回測參數(shù),你可以查看 workflow_config_lightgbm_Alpha158.yaml 的內容:
上滑查看更多代碼
qlib_init:
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
kwargs:
model: < MODEL >
dataset: < DATASET >
topk: 50
n_drop: 5
backtest:
start_time: 2017-01-01
end_time: 2020-08-01
account: 100000000
benchmark: *benchmark
exchange_kwargs:
limit_threshold: 0.095
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.2
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:
model: < MODEL >
dataset: < DATASET >
-class: SigAnaRecord
module_path: qlib.workflow.record_temp
kwargs:
ana_long_short: False
ann_scaler: 252
-class: PortAnaRecord
module_path: qlib.workflow.record_temp
kwargs:
config: *port_analysis_config
參數(shù)比較多,大家借助翻譯工具應該都能看懂。這里摘取華泰的一個研究報告,里面對參數(shù)做了具體的翻譯:
為了方便用戶使用,微軟內置了許多模型,如上文我們用到的 gbdt 位于克隆的文件夾下的 qlib/contrib/model/gbdt.py:
注意:pytorch 開頭的模型需要預先安裝pytorch.
一個小問題,Qlib里,策略和算法的區(qū)別是什么?
大家注意到,Qlib這里,必須定義策略和算法兩個配置,而在backtrader里面,我們更加重視策略,而非“算法”這個概念。那么這兩者在Qlib中的區(qū)別是什么?我們看默認TOPK策略的源代碼:
**可以看到,默認的這個策略,選擇了算法預測分數(shù)結果中排名 TOP K 的股票,也就是策略從算法得到的結果中去做篩選需要交易的股票。**算法相當于生成一個新的可用于判斷買入賣出的評判標準。這就是策略和AI算法這兩者的最重要區(qū)別。
最后,得益于松耦合的代碼設計,我認為 Qlib 是一個能夠讓不同層次的研究者各取所需的開源項目,是一個不可多得的量化開源平臺,特別適合重度Python使用者,有興趣的朋友可以試一下,未來我也會考慮出 Qlib 相關的使用教程,敬請期待。
-
數(shù)據(jù)
+關注
關注
8文章
7006瀏覽量
88955 -
程序
+關注
關注
117文章
3785瀏覽量
81009 -
python
+關注
關注
56文章
4793瀏覽量
84634
發(fā)布評論請先 登錄
相關推薦
評論