<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          嘗鮮!微軟首個AI量化投資開源平臺Qlib上手體驗!

          共 13081字,需瀏覽 27分鐘

           ·

          2020-12-18 10:05

          近日,微軟亞洲研究院正式發(fā)布了業(yè)內首個AI量化投資開源平臺Qlib,發(fā)布一個月以來已經在GitHub收獲2.3k+star!

          值得關注的一點就是這套量化系統(tǒng)的框架分為多層,每層由多個松散耦合的模塊組成,因此每個模塊用戶都可以自行修改、定制、使用,如下圖所示

          通過這樣的方式,可以讓用戶更快的了解整個工作流程,并靈活的進行調整,同時也支持在線和離線兩種模式,嗯,本地取數(shù)據(jù)、本地跑策略,隱私上也有一定的提升。

          更多的宣傳點,本文不再過多介紹,下面將從用戶使用的角度講解如何安裝配置Qlib并構建一個量化交易模型。

            安裝

          安裝Qlib其實和其他第三方庫安裝類似,但畢竟要跑模型,并且依賴較多,所以可能會由于不同機器環(huán)境的問題,導致不同的錯誤,首先還是嘗試直接pip安裝

          pip install pyqlib

          當然我建議從GitHub上把源碼拉下來安裝

          git clone https://github.com/microsoft/qlib.git && cd qlib
          pip install .

          我分別在macOS Big Sur和centos7下測試,在配置anaconda環(huán)境下,均出現(xiàn)不同的報錯,如果出現(xiàn)任何類似如下報錯

          Failed building wheel for xxx

          command 'x86_64-apple-darwin13.4.0-clang' failed with exit status 254

          大概率是gcc編譯出現(xiàn)問題,可以先在shell中用gcc -v查看gcc的版本信息,之后在mac下可以嘗試檢查Xcode是否安裝并升級GCC版本之后嘗試如下代碼

          export CC=gcc
          export CXX=g++

          如果提示任何與PyYAML包安裝失敗相關的報錯,可以嘗試自己手動卸載sudo pip uninstall PyYAML這個包再重新安裝。

          為了更好的使用,我們還需要安裝配置好redis并啟動,此處不做更多講解,同時一定要注意,對照requires.txt,將版本不對的包進行升級,我就是由于pandas和numpy版本過低,導致無法啟動,最后聯(lián)系開發(fā)者才發(fā)現(xiàn)問題!

          總之安裝過程中,可能會出現(xiàn)不同的問題,我們只要耐下心來,仔細閱讀報錯代碼,一點一點解決,總能成功安裝好。

            配置數(shù)據(jù)

          下載與初始化

          在安裝好pyqlib后,我們還需要準備數(shù)據(jù),官方提供了從Yahoo Finance爬數(shù)據(jù)的方法,可以在命令行進入之前從GitHub拉下來的文件夾后執(zhí)行如下命令

          python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

          等待一會即可,之后我們可以進入~/.qlib/qlib_data/目錄下檢查數(shù)據(jù)是否被正確存儲

          在搞定數(shù)據(jù)之后,在使用之前還需要進行初始化,進入Python后執(zhí)行如下命令

          import qlib
          # region in [REG_CN, REG_US]
          from qlib.config import REG_CN
          provider_uri = "~/.qlib/qlib_data/cn_data"  # target_dir
          qlib.init(provider_uri=provider_uri, region=REG_CN)

          數(shù)據(jù)查詢

          在上一步我們成功下載并配置好數(shù)據(jù)之后,現(xiàn)在可以進行一些基本的查詢,我們可以啟動jupyter notebook,首先還是初始化

          import qlib
          qlib.init(provider_uri='~/.qlib/qlib_data/cn_data')

          之后可以像pandas一樣,創(chuàng)建指定格式的時間序列

          from qlib.data import D
          D.calendar(start_time='2010-01-01', end_time='2017-12-31', freq='day')[:5]

          提取指定時間范圍內滬深300的股票代碼

          instruments = D.instruments(market='csi300')
          D.list_instruments(instruments=instruments, start_time='2010-01-01', end_time='2017-12-31', as_list=True)[:20]

          也可以根據(jù)名稱動態(tài)過濾加載數(shù)據(jù)

          更多有關數(shù)據(jù)查詢的操作本文就不再一一示例,感興趣的話可以查閱官方數(shù)據(jù)API!

            工作流

          基本介紹

          現(xiàn)在,終于來到最核心的部分——workflow,我們只需要在工作流中構建數(shù)據(jù)集,訓練模型,回測和評估,之后就可以使用qrun自動運行整個工作流程,并在jupyter notebook中給出圖形報告分析。

          在一個完整的工作流中應包含以下幾個部分

          • 數(shù)據(jù)
            • 加載數(shù)據(jù)
            • 處理數(shù)據(jù)
            • 數(shù)據(jù)切片
          • 模型
            • 訓練與推導
            • 保存與加載
          • 評價
            • 預測信號分析
            • 回測

          下面我們來看一個完整的最典型的工作流部分代碼,之后進行解讀

          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.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-012014-12-31]
                          valid: [2015-01-012016-12-31]
                          test: [2017-01-012020-08-01]
              record:
                  - class: SignalRecord
                  module_path: qlib.workflow.record_temp
                  kwargs: {}
                  - class: PortAnaRecord
                  module_path: qlib.workflow.record_temp
                  kwargs:
                      config: *port_analysis_config

          現(xiàn)在我們來看一下這部分代碼,讀懂最簡單的之后才方便后面構建自己的模型。

          初始化

          首先是初始化部分,和之前一致,主要是對數(shù)據(jù)進行配置,

          qlib_init:
              provider_uri: "~/.qlib/qlib_data/cn_data"
              region: cn
              market: &market csi300
              benchmark: &benchmark SH000300

          provider_uri是數(shù)據(jù)存放位置,region代表地區(qū)

          • cn表示Qlib將以中國股票模式初始化
          • us表示Qlib將以美國股票模式初始化

          market參數(shù)指定市場為滬深300

          接下來一直到task之前,就是對數(shù)據(jù)、資產、策略等信息的詳細配置,這部分和大多數(shù)量化平臺的方法類似,本文不做過多敘述。

          任務task

          現(xiàn)在來到最關鍵的部分task,其中包含三個不同的主要參數(shù)Model,DatasetRecord

          在model中我們需要指定使用的模型及相關參數(shù)

          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部分中,需要指定數(shù)據(jù)來源已經數(shù)據(jù)如何切分成訓練集、測試集等

          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-012014-12-31]
                      valid: [2015-01-012016-12-31]
                      test: [2017-01-012020-08-01]

          最后是record部分,它主要負責跟蹤訓練過程和結果,并記錄相關重要的指標信息,方便之后進行展示與評估,下面是record的配置模版

          record:
              - class: SignalRecord
                module_path: qlib.workflow.record_temp
                kwargs: {}
              - class: PortAnaRecord
                module_path: qlib.workflow.record_temp
                kwargs:
                  config: *port_analysis_config

          現(xiàn)在只需要將以上代碼保存為configuration.yaml,并進入對應目錄下執(zhí)行以下命令

          qrun configuration.yaml

          就可以執(zhí)行我們的策略。以上每一個部分的詳細配置在官方文檔中都非常豐富的介紹與示例,本文不再過多介紹,感興趣的讀者可以自己查閱!

            啟動

          運行單個模型

          在寫完模型之后,啟動方式一共有三種:

          • 使用Qilb內置的qrun運行上面的workflow
          • 參考examples中workflow_by_code腳本,在Notebook中執(zhí)行
          • 參考run_all_model.py,寫一個Python腳本,從命令行中使用python run_all_model.py --models=lightgbm執(zhí)行

          運行多個模型

          在Qlib中,我么可以使用run_all_model.py運行多個模型進行多次迭代,不過當前只能在Linux下執(zhí)行,并且該腳本將為每個模型創(chuàng)建一個唯一的虛擬環(huán)境,并在訓練后刪除該環(huán)境。使用如下命令即可執(zhí)行

          python  run_all_model。py  10

            一個例子

          最后,讓我們運行一個官方提供的示例策略,位置于examples目錄下可以看到,官方對常見的算法都提供了示例代碼,我們選擇跑一個LightGBM,在命令行執(zhí)行

          qrun /Users/liuhuanshuo/Downloads/qlib-main/examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml 

          啟動瞬間,風扇就開始轉了經過一段時間等待后,終端會打印出執(zhí)行過程中的關鍵參數(shù)與一些日志,除了命令行輸出的這些信息之外,更多的過程信息會被寫入主目錄下的workflow_by_code.ipynb,我們啟動Jupyter Notebook看一下

          可以看到,模型建立、執(zhí)行、預測等全部內容都已經準備好了,我們只需要按照順序執(zhí)行一遍,就能看到更豐富的報告,比如回測、回報率、信息指數(shù)等?

          以上只是部分過程(結果),實際給出的評估指標非常多,并且全部用plotly進行可視化,可以進行交互式查看!

            離線模式

          Qib的另一個特點是可以部署為離線或者在線模式,默認是使用離線模式啟動,在此模式下,數(shù)據(jù)將在本地部署。如果使用在線模式,數(shù)據(jù)將會部署在服務器,根據(jù)官方文檔,使用在線模式會有以下好處

          • 集中管理數(shù)據(jù)。用戶不必管理不同版本的數(shù)據(jù)
          • 減少緩存占用
          • 使數(shù)據(jù)可以通過遠程方式訪問

          這一塊我沒有具體研究,畢竟Qlib和其他量化平臺相比,支持離線模式就很香了,如果想進一步學習可以查閱官方文檔。

          本文的分享就到此為止,其實自發(fā)布以來關于Qlib的評價目前也褒貶不一,但AI量化注定是趨勢,大家可以自己上手體驗一下方能做出對比與選擇!

          參考資料

          [1]

          Qlib: https://github.com/microsoft/qlib

          [2]

          Qlib docs: https://qlib.readthedocs.io/en/latest/index.html

          [3]

          微軟也搞AI量化平臺?還是開源的1:https://mp.weixin.qq.com/s/47bP5YwxfTp2uTHjUBzJQQ

          -END-

          文末推薦一本書Python高手修煉之道,本書系統(tǒng)介紹了如何入門Python并利用Python進行數(shù)據(jù)處理與機器學習實戰(zhàn)。本書從Python的基礎安裝開始介紹,系統(tǒng)梳理了Python的入門語法知識,歸納介紹了圖像處理、數(shù)據(jù)文件讀寫、數(shù)據(jù)庫操作等Python基本技能;然后詳細講解了NumPy、Matplotlib、Pandas、Scipy、Scikit-learn等在數(shù)據(jù)處理、機器學習領域的應用。點擊下方小程序可以查看詳情給早起投稿可以直接獲得本書(詳情點擊閱讀原文)!

          瀏覽 156
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区欧美 | 日韩骚| 操b 网址 | 人妻无码第23页 | 欧美网站在线看 |