0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qlib的安裝和運(yùn)行內(nèi)置算法策略

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-31 10:19 ? 次閱讀

下面我們就來(lái)試一下 Qlib 的安裝和運(yùn)行內(nèi)置算法策略。

1.準(zhǔn)備

開(kāi)始之前,你要確保Pythonpip已經(jīng)成功安裝在電腦上,如果沒(méi)有,請(qǐng)?jiān)L問(wèn)這篇文章:《超詳細(xì)Python安裝指南(傳統(tǒng))》或 《Python數(shù)據(jù)分析與挖掘好幫手—Anaconda》 進(jìn)行安裝,本文建議使用Anaconda。

由于qlib有許多許多依賴,如果你不想安裝過(guò)程中出現(xiàn)問(wèn)題,或者引起其他程序的運(yùn)行問(wèn)題,建議使用Conda創(chuàng)建一個(gè)你的量化投資虛擬環(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安裝的過(guò)程中如果遇到任何問(wèn)題,請(qǐng)搜索引擎解決,如果無(wú)法解決,可以嘗試下面的源碼安裝:

(安裝方式二 (推薦)) 源碼安裝:

# 提前安裝一些依賴
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 機(jī)器在安裝的時(shí)候可能會(huì)遇到下面這個(gè)問(wèn)題:

圖片

這是因?yàn)榘惭b qlib 的依賴 — tables 時(shí)出現(xiàn)了編譯錯(cuò)誤,原因很多,我選擇逃學(xué),因此建議使用 tables 的 wheel 文件進(jìn)行安裝,這樣就不需要編譯了:

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ù)準(zhǔn)備

由于這套量化開(kāi)源平臺(tái)的作者是中國(guó)人,所以非常貼心地準(zhǔn)備好了A股數(shù)據(jù),大家可以輸入命令直接下載:

# 1天級(jí)別數(shù)據(jù)
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# 1分鐘級(jí)別數(shù)據(jù)
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min

如果你需要其他分鐘級(jí)的數(shù)據(jù),修改interval即可。

你可以使用crontab定時(shí)自動(dòng)更新數(shù)據(jù)(來(lái)自雅虎財(cái)經(jīng)):

* * * * 1-5 python < script path > update_data_to_bin --qlib_data_1d_dir < user data dir >

手動(dòng)更新數(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. 運(yùn)行量化回測(cè)流程示例

Qlib 提供了一個(gè)名為 ** qrun ** 自動(dòng)運(yùn)行整個(gè)工作流程的工具(包括構(gòu)建數(shù)據(jù)集、訓(xùn)練模型、回測(cè)和評(píng)估)。

你可以按照以下步驟啟動(dòng)自動(dòng)量化研究工作流程并進(jìn)行圖形報(bào)告分析,Quant Research 工作流程:

**Qrun ** 運(yùn)行 lightgbm 工作流程的配置 workflow_config_lightgbm_Alpha158.yaml 如下所示:

cd examples # Avoid running program under the directory contains `qlib`
qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

結(jié)果如下:

圖片

可以看到這里包括三個(gè)統(tǒng)計(jì)分析:benchmark return (基準(zhǔn)收益) / excess return without cost(除去手續(xù)費(fèi)的超額收益)) / excess return with cost(包含手續(xù)費(fèi)的超額收益)。每個(gè)統(tǒng)計(jì)分析中都有如下5個(gè)參數(shù)

  • mean: 異常收益的平均值
  • std: 異常收益的標(biāo)準(zhǔn)差
  • annualized_return: 年化回報(bào)
  • information_ratio: 信息比率
  • max_drawdown: 最大回撤

大家可以看到,這個(gè)內(nèi)置的算法和策略,在不包括手續(xù)費(fèi)的情況下,相比于基準(zhǔn)收益年化回報(bào)略高,但是在把手續(xù)費(fèi)等費(fèi)用算上之后,比滬深300基準(zhǔn)收益略遜一籌。

如果你想要自定義這個(gè)策略和算法的回測(cè)參數(shù),你可以查看 workflow_config_lightgbm_Alpha158.yaml 的內(nèi)容:

上滑查看更多代碼

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ù)比較多,大家借助翻譯工具應(yīng)該都能看懂。這里摘取華泰的一個(gè)研究報(bào)告,里面對(duì)參數(shù)做了具體的翻譯:

圖片

圖片

圖片

為了方便用戶使用,微軟內(nèi)置了許多模型,如上文我們用到的 gbdt 位于克隆的文件夾下的 qlib/contrib/model/gbdt.py:

圖片

注意:pytorch 開(kāi)頭的模型需要預(yù)先安裝pytorch.

一個(gè)小問(wèn)題,Qlib里,策略和算法的區(qū)別是什么?

大家注意到,Qlib這里,必須定義策略和算法兩個(gè)配置,而在backtrader里面,我們更加重視策略,而非“算法”這個(gè)概念。那么這兩者在Qlib中的區(qū)別是什么?我們看默認(rèn)TOPK策略的源代碼:

圖片

**可以看到,默認(rèn)的這個(gè)策略,選擇了算法預(yù)測(cè)分?jǐn)?shù)結(jié)果中排名 TOP K 的股票,也就是策略從算法得到的結(jié)果中去做篩選需要交易的股票。**算法相當(dāng)于生成一個(gè)新的可用于判斷買(mǎi)入賣(mài)出的評(píng)判標(biāo)準(zhǔn)。這就是策略和AI算法這兩者的最重要區(qū)別。

最后,得益于松耦合的代碼設(shè)計(jì),我認(rèn)為 Qlib 是一個(gè)能夠讓不同層次的研究者各取所需的開(kāi)源項(xiàng)目,是一個(gè)不可多得的量化開(kāi)源平臺(tái),特別適合重度Python使用者,有興趣的朋友可以試一下,未來(lái)我也會(huì)考慮出 Qlib 相關(guān)的使用教程,敬請(qǐng)期待。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88311
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3720

    瀏覽量

    80357
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84078
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    枝狀流體供熱網(wǎng)優(yōu)化運(yùn)行策略研究與實(shí)現(xiàn)

    針對(duì)現(xiàn)行的控制策略不能很好的實(shí)現(xiàn)供熱網(wǎng)的優(yōu)化運(yùn)行,首先提出了基于啟發(fā)式加權(quán)交叉算子的實(shí)數(shù)編碼遺傳算法。并在建立了供熱網(wǎng)運(yùn)行成本的模型后,應(yīng)用改進(jìn)型遺傳
    發(fā)表于 12-18 16:24 ?10次下載

    運(yùn)行內(nèi)存是什么意思,手機(jī)運(yùn)行內(nèi)存4G和6G區(qū)別很大?

    手機(jī)更新?lián)Q代真的太快了,讓人有點(diǎn)應(yīng)接不暇。想想以前的手機(jī)基本是用來(lái)打電話跟接電話的,然后現(xiàn)在手機(jī)拿來(lái)打電話的越來(lái)越少,已經(jīng)漸漸成為生活中的一個(gè)“好助手”了。以前還只有2G的手機(jī),現(xiàn)在動(dòng)不動(dòng)就6G運(yùn)行內(nèi)存甚至8G運(yùn)行內(nèi)存。
    發(fā)表于 06-02 08:58 ?9.1w次閱讀

    基于雙變異策略的骨架差分算法

    骨架差分進(jìn)化算法能夠較好規(guī)避差分進(jìn)化算法控制參數(shù)和變異策略選擇問(wèn)題。針對(duì)基于雙變異策略的經(jīng)典骨架差分算法( MGBDE)沒(méi)有根據(jù)個(gè)體進(jìn)化差異
    發(fā)表于 01-16 16:08 ?0次下載

    讓我來(lái)告訴你!6G運(yùn)行內(nèi)存,為什么可用的只有3G左右

    現(xiàn)在手機(jī)運(yùn)行內(nèi)存越做越大,但有時(shí)候我們會(huì)發(fā)現(xiàn)可用的運(yùn)行內(nèi)存并沒(méi)有隨著運(yùn)行內(nèi)存的增大而同比例增大。幾年前,許多手機(jī)的運(yùn)行內(nèi)存都還處于512M的時(shí)候,可用
    發(fā)表于 04-27 09:26 ?7.4w次閱讀

    STM32F1_ 外部SRAM作為運(yùn)行內(nèi)

    STM32F1_外部SRAM作為運(yùn)行內(nèi)
    的頭像 發(fā)表于 04-08 10:07 ?4744次閱讀
    STM32F1_ 外部SRAM作為<b class='flag-5'>運(yùn)行內(nèi)</b>存

    手機(jī)運(yùn)行內(nèi)存不足怎么處理

     手機(jī)運(yùn)行內(nèi)存是一個(gè)智能手機(jī)中非常重要的一個(gè)存在。可以說(shuō),手機(jī)運(yùn)行內(nèi)存的大小決定了我們的手機(jī)在日常使用中能夠給我們帶來(lái)的用戶體驗(yàn)。所以說(shuō),一般我們?cè)谶x擇智能手機(jī)的時(shí)候,我們都會(huì)選擇手機(jī)運(yùn)行內(nèi)存夠大
    發(fā)表于 06-15 10:30 ?5638次閱讀

    闡述手機(jī)內(nèi)存與運(yùn)行內(nèi)存中的關(guān)系及區(qū)別

    “手機(jī)的“內(nèi)存”通常指“運(yùn)行內(nèi)存”及“非運(yùn)行內(nèi)存”。手機(jī)的“運(yùn)行內(nèi)存”相當(dāng)于電腦的內(nèi)存,即RAM。而手機(jī)的“非運(yùn)行內(nèi)存”,相當(dāng)于電腦的硬盤(pán),廠家常直接稱其為手機(jī)內(nèi)存,也就是所謂的ROM
    發(fā)表于 07-30 14:17 ?6513次閱讀

    iPhone 12系列的運(yùn)行內(nèi)存是多大?

    安卓是基于Linux平臺(tái)所開(kāi)發(fā),根據(jù)它的特性,如果安卓手機(jī)需要關(guān)閉一個(gè)應(yīng)用時(shí),要消耗大量的運(yùn)行內(nèi)存才能將應(yīng)用徹底關(guān)掉,消耗的量一般是應(yīng)用所運(yùn)行的內(nèi)存的4-8倍左右。如果手機(jī)本身內(nèi)存不夠它調(diào)配的話,速度自然就慢下來(lái)了。
    的頭像 發(fā)表于 10-22 12:04 ?9.4w次閱讀

    蘋(píng)果13運(yùn)行內(nèi)存是多少

    蘋(píng)果今日凌晨正式發(fā)布了iPhone13系列手機(jī),售價(jià)5199元起。很多網(wǎng)友除了關(guān)心外觀、配置、價(jià)格外就是它的運(yùn)行內(nèi)存了。
    的頭像 發(fā)表于 09-15 15:07 ?3w次閱讀

    蘋(píng)果13手機(jī)運(yùn)行內(nèi)

    根據(jù)外媒的資料確認(rèn),iPhone13/mini系列是6GB運(yùn)存,iPhone13 Pro/Pro Max系列是8GB運(yùn)行內(nèi)存。
    的頭像 發(fā)表于 09-16 10:08 ?8341次閱讀

    蘋(píng)果13運(yùn)行內(nèi)存多少g

    今年蘋(píng)果秋季發(fā)布會(huì)帶來(lái)了四款iPhone機(jī)型,分別是iPhone13、iPhone13mini、iPhone13 Pro和iPhone13 Pro Max。iPhone13取消了64GB的存儲(chǔ),增加了1TB的存儲(chǔ)容量,那蘋(píng)果13的運(yùn)行內(nèi)存是多少呢?
    的頭像 發(fā)表于 09-16 10:34 ?3.4w次閱讀

    iPhone13運(yùn)行內(nèi)存有多大?

    蘋(píng)果提高iPhone 13系列的運(yùn)行內(nèi)存,iPhone13 Pro/Pro Max的運(yùn)行內(nèi)存將提升至8GB。蘋(píng)果去年才將iPhone12 Pro系列的運(yùn)行內(nèi)存,由iPhone11 Pro系列的4GB增加到了6GB。
    的頭像 發(fā)表于 09-17 09:16 ?2.4w次閱讀

    蘋(píng)果13會(huì)升級(jí)運(yùn)行內(nèi)存嗎

    手機(jī)運(yùn)行內(nèi)存和電腦運(yùn)行內(nèi)存是一個(gè)道理,是屬于可活動(dòng)的內(nèi)部存儲(chǔ),它并不是用來(lái)存儲(chǔ)固定的數(shù)據(jù),而是動(dòng)態(tài)和即時(shí)的。運(yùn)存的占用除了系統(tǒng)本身的必要運(yùn)行組件外,就是我們平常手機(jī)打開(kāi)的APP的即時(shí)數(shù)據(jù)存儲(chǔ)。
    的頭像 發(fā)表于 09-22 10:05 ?4371次閱讀

    蘋(píng)果13系列運(yùn)行內(nèi)存有多大?蘋(píng)果13系列有8G運(yùn)行內(nèi)存嗎?

    這次新產(chǎn)品的發(fā)布,大家備受期待,iphone13的運(yùn)行內(nèi)存有多大,成為果粉們最想知道的問(wèn)題之一。
    的頭像 發(fā)表于 09-22 10:02 ?2.6w次閱讀

    系統(tǒng)內(nèi)存和運(yùn)行內(nèi)存的區(qū)別

    系統(tǒng)內(nèi)存和運(yùn)行內(nèi)存都是計(jì)算機(jī)中重要的概念,它們?cè)谟?jì)算機(jī)的存儲(chǔ)和運(yùn)行方面起著不可或缺的作用。雖然它們與計(jì)算機(jī)存儲(chǔ)和運(yùn)行息息相關(guān),但是它們具有不同的功能和實(shí)現(xiàn)方式。接下來(lái)我將詳細(xì)介紹系統(tǒng)內(nèi)存和運(yùn)行
    的頭像 發(fā)表于 01-15 16:32 ?2376次閱讀