qlib - Qlib は AI 指向の定量的投資プラットフォームであり、可能性を実現し、研究に力を与え、定量的投資における AI 技術の価値を生み出すことを目的としています。Qlib を使用すると、アイデアを簡単に試して、より優れた Quant 投資戦略を作成できます。Qlib でリリースされる SOTA Quant の研究成果/論文の数が増えています。

(Qlib is an AI-oriented quantitative investment platform, which aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment. With Qlib, you can easily try your ideas to create better Quant investment strategies. An increasing number of SOTA Quant research works/papers are released in Qlib.)

Created at: 2020-08-14 14:46:00
Language: Python
License: MIT

Python のバージョン プラットホーム PypI バージョン Python パッケージのアップロード Github アクションのテスト状況 ドキュメントのステータス ライセンス https://gitter.im/Microsoft/qlib でチャットに参加してください

📰 新着情報!   💖

最近リリースされた機能

特徴 状態
HIST および IGMTF モデル 📈 2022 年 4 月 10 日リリース
Qlibノートブックのチュートリアル 📖 2022 年 4 月 7 日リリース
イボベスパ指数データ 🍚 2022 年 4 月 6 日リリース
ポイントインタイム データベース 🔨 2022 年 3 月 10 日リリース
Arctic Provider バックエンド & オーダーブック データの例 🔨 2022 年 1 月 17 日リリース
メタラーニングベースのフレームワーク & DDG-DA 📈 🔨 2022 年 1 月 10 日リリース
計画ベースのポートフォリオ最適化 🔨 2021 年 12 月 28 日リリース
Qlib v0.8.0 をリリース :オクトキャット: 2021 年 12 月 8 日リリース
モデルを追加 📈 2021 年 11 月 22 日リリース
ADARNN モデル 📈 2021 年 11 月 14 日リリース
TCNモデル 📈 2021 年 11 月 4 日リリース
ネストされた決定フレームワーク 🔨 2021 年 10 月 1 日リリース。ドキュメント
テンポラル ルーティング アダプター (TRA) 📈 2021 年 7 月 30 日リリース
トランス&ローカルフォーマー 📈 2021 年 7 月 22 日リリース
Qlib v0.7.0 をリリース :オクトキャット: 2021 年 7 月 12 日リリース
TCTS モデル 📈 2021 年 7 月 1 日リリース
オンライン サービングと自動モデル ローリング 🔨 2021 年 5 月 17 日リリース
DoubleEnsemble モデル 📈 2021 年 3 月 2 日リリース
高周波データ処理例 🔨 2021 年 2 月 5 日リリース
高頻度取引の例 📈 2021 年 1 月 28 日にリリースされたコードの一部
高周波データ(1分) 🍚 2021 年 1 月 27 日リリース
タブネット モデル 📈 2021 年 1 月 22 日リリース

2021 年より前にリリースされた機能は、ここには記載されていません。

Qlib は AI 指向の定量的投資プラットフォームであり、可能性を実現し、研究に力を与え、定量的投資における AI 技術の価値を生み出すことを目的としています。

データ処理、モデル トレーニング、バックテストの完全な ML パイプラインが含まれています。定量的投資のチェーン全体をカバーしています: アルファシーク、リスクモデリング、ポートフォリオ最適化、注文執行。

Qlib を使用すると、ユーザーは簡単にアイデアを試して、より優れた Quant 投資戦略を作成できます。

詳細については、当社の論文「Qlib: AI 指向の量的投資プラットフォーム」を参照してください。

フレームワーク、チュートリアル、データ、DevOps クオンツリサーチにおける主な課題と解決策
Qlib クイック スタートの計画フレームワーク Quant Dataset Zoo Qlib オフライン モードとオンライン モードの詳細 関連レポート お 問い合わせ 寄稿 クオンツリサーチにおける主な課題と解決策

予定

開発中の新機能 (リリース予定時刻順)。機能に関するフィードバックは非常に重要です。

Qlibのフレームワーク

モジュール レベルでは、Qlib は上記のコンポーネントで構成されるプラットフォームです。コンポーネントは疎結合モジュールとして設計されており、各コンポーネントはスタンドアロンで使用できます。

名前 説明
Infrastructure
Infrastructure
レイヤーは、クオンツ研究の基礎となるサポートを提供します。
DataServer
ユーザーが生データを管理および取得するための高性能インフラストラクチャを提供します。
Trainer
モデルのトレーニング プロセスを制御するための柔軟なインターフェイスを提供し、アルゴリズムがトレーニング プロセスを制御できるようにします。
Workflow
Workflow
レイヤーは、クオンツ投資のワークフロー全体をカバーします。
Information Extractor
モデルのデータを抽出します。
Forecast Model
他のモジュールのあらゆる種類の予測シグナル (アルファ、リスクなど) の生成に焦点を当てています。これらのシグナルを使用して、 (つまり、取引市場)
Decision Generator
によって実行されるターゲットの取引決定 (つまり、ポートフォリオ、注文) が生成されます。and
Execution Env
には複数のレベルが存在する場合があります(たとえば、 Order Executorトレーディング エージェントと日中の注文執行環境は、デイリー ポートフォリオ管理トレーディング エージェントとインターデイ トレーディング環境にネストされて、デイリー トレーディング環境のように動作する可能性があり ます ) 。
Trading Agent
Execution Env
Interface
Interface
レイヤは、基盤となるシステムにユーザー フレンドリーなインターフェイスを提供しようとします。
Analyser
モジュールは、予測シグナル、ポートフォリオ、および実行結果の詳細な分析レポートをユーザーに提供します
  • 手描きスタイルのモジュールは開発中であり、将来リリースされる予定です。
  • 破線で囲まれたモジュールは、ユーザーによる高度なカスタマイズと拡張が可能です。

(ps フレームワークのイメージはhttps://draw.io/で作成されます)

クイックスタート

このクイック スタート ガイドでは、

  1. 完全な Quant 研究ワークフローを構築し、Qlibでアイデアを試すのは非常に簡単です。
  2. 公開データ単純なモデルを使用しますが、機械学習テクノロジーは実際のクオンツ投資で非常にうまく機能します。

以下は、をインストールして LightGBM を実行する方法を示す簡単なデモです。ただし指示に従ってデータが準備されていることを確認してください。

Qlib
qrun

インストール

この表は、サポートされている の Python バージョンを示しています

Qlib

pipでインストール ソースからインストール プロット
パイソン3.7 ✔️ ✔️ ✔️
パイソン3.8 ✔️ ✔️ ✔️
パイソン3.9 ✔️

:

  1. Python 環境の管理にはCondaをお勧めします。
  2. Python 3.6 に cython をインストールすると
    Qlib
    、ソースからインストールするときにエラーが発生することに注意してください。ユーザーがマシンで Python 3.6 を使用している場合は、Python をバージョン 3.7にアップグレード
    conda
    するか、の Python を使用してソースからインストールすることをお勧めします
    Qlib
  3. Python 3.9 の場合、モデルのトレーニング、バックテストの実行、関連する図 (ノートブック
    Qlib
    に含まれるもの) のほとんどのプロットなどのワークフローの実行をサポートします。ただし、モデルのパフォーマンスのプロットは現在サポートされていません。依存パッケージが将来アップグレードされるときにこれを修正します。
  4. Qlib
    tables
    パッケージが必要
    hdf5
    です。表では python3.9 をサポートしていません。

pipでインストール

Qlib
ユーザーは、次のコマンドに従って pip で簡単にインストールできます。

  pip install pyqlib

: pip は最新の安定した qlib をインストールします。ただし、qlib のメイン ブランチは活発に開発中です。メイン ブランチで最新のスクリプトまたは関数をテストする場合。以下の方法でqlibをインストールしてください。

ソースからインストール

Qlib
また、ユーザーは次の手順に従って、ソース コードで最新の開発バージョンをインストールできます。

  • ソースからインストールする前に

    Qlib
    、ユーザーはいくつかの依存関係をインストールする必要があります。

    pip install numpy
    pip install --upgrade  cython
  • リポジトリをクローンして、次のようにインストール

    Qlib
    します。

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

    : Qlib をインストールすることもでき

    python setup.py install
    ます。しかし、それは推奨されるアプローチではありません。スキップ
    pip
    して、あいまいな問題を引き起こします。たとえば、によってインストールされた安定バージョンを上書きできるのは コマンドだけですが、 コマンドはできません
    pip install .
    pip install pyqlib
    python setup.py install

ヒント: お使いの環境でサンプルのインストールまたは実行に失敗した場合は、手順とCI ワークフロー

Qlib
を比較すると、問題を見つけるのに役立つ場合があります。

データ準備

次のコードを実行して、データをロードして準備します。

モジュールで取得

# get 1d data
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# get 1min data
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min

ソースから取得

# get 1d data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# get 1min data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min

このデータセットは、同じリポジトリで公開されているクローラー スクリプトによって収集された公開データによって作成されます。ユーザーはそれを使用して同じデータセットを作成できます。データセットの説明

データはYahoo Financeから収集されたものであり、データが完全ではない可能性があることに注意してください。高品質のデータセットがある場合は、ユーザーが独自のデータを準備することをお勧めします。詳細については、関連ドキュメントを参照してください。

日次頻度データ自動更新(ヤフーファイナンスより)

ユーザーが履歴データでモデルと戦略を試したいだけの場合、このステップはオプションです。

一度データを手動で更新し (--trading_date 2021-05-25)、自動更新するように設定することをお勧めします。

: ユーザーは、Qlib によって提供されるオフライン データに基づいてデータを段階的に更新することはできません (データ サイズを縮小するために一部のフィールドが削除されます)。ユーザーはyahoo コレクターを使用して Yahoo データをゼロからダウンロードし、段階的に更新する必要があります。

詳細については、yahoo コレクターを参照してください。

  • 取引日ごとに「qlib」ディレクトリにデータを自動更新(Linux)

    • crontabを使用します。

      crontab -e

    • 時限タスクを設定します。

      * * * * 1-5 python <script path> update_data_to_bin --qlib_data_1d_dir <user data dir>
      
      • スクリプト パス: scripts/data_collector/yahoo/collector.py
  • データの手動更新

    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>
    
    • Trading_date : 取引開始日
    • end_date : 取引日の終わり (含まない)

自動定量調査ワークフロー

Qlib は、

qrun
ワークフロー全体 (データセットの構築、モデルのトレーニング、バックテスト、評価を含む) を自動的に実行するように名前が付けられたツールを提供します。次の手順に従って、自動定量調査ワークフローを開始し、グラフィカルなレポート分析を行うことができます。

  1. 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

    デバッグ モードで使用

    qrun
    する場合は、次のコマンドを使用してください。

    python -m pdb qlib/workflow/cli.py examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

    の結果

    qrun
    は次のとおりです。結果の詳細については、日中取引を参照してください。

    'The following are analysis results of the excess return without cost.'
                           risk
    mean               0.000708
    std                0.005626
    annualized_return  0.178316
    information_ratio  1.996555
    max_drawdown      -0.081806
    'The following are analysis results of the excess return with cost.'
                           risk
    mean               0.000512
    std                0.005626
    annualized_return  0.128982
    information_ratio  1.444287
    max_drawdown      -0.091078

    qrun
    ワークフローの詳細なドキュメントを次に示します。

  2. グラフィカル レポート分析: で実行

    examples/workflow_by_code.ipynb
    jupyter notebook
    て、グラフィカル レポートを取得します。

    • 予測シグナル(モデル予測)分析

      • グループの累積リターン 累積リターン
      • リターン分布 long_short
      • 情報係数 (IC) 情報係数 マンスリーIC IC
      • 予測信号の自己相関 (モデル予測) 自己相関
    • ポートフォリオ分析

      • バックテストのリターン 報告
    • 上記結果の説明

コードによるカスタマイズされた定量調査ワークフローの構築

自動ワークフローは、すべての Quant 研究者の研究ワークフローに合わない場合があります。柔軟な Quant 研究ワークフローをサポートするために、Qlib はモジュール化されたインターフェースも提供し、研究者がコードによって独自のワークフローを構築できるようにします。これは、コードによるカスタマイズされた Quant 研究ワークフローのデモです

クオンツリサーチにおける主な課題と解決策

クオンツ投資は、解決すべき多くの重要な課題を伴う非常にユニークなシナリオです。現在、Qlib はそれらのいくつかに対していくつかのソリューションを提供しています。

予測: 価値のあるシグナル/パターンを見つける

株価の動向を正確に予測することは、収益性の高いポートフォリオを構築する上で非常に重要な部分です。しかし、金融市場にはさまざまな形式の膨大な量のデータがあり、予測モデルの構築が困難になっています。

複雑な財務データの貴重なシグナル/パターンをマイニングするための予測モデルの構築に焦点を当てた、ますます多くの SOTA Quant 研究作品/論文が、

Qlib

量子モデル (論文) ズー

で構築されたモデルのリストを次に示し

Qlib
ます。

Your PR of new Quant models is highly welcomed.

The performance of each model on the

Alpha158
and
Alpha360
dataset can be found here.

Run a single model

All the models listed above are runnable with

Qlib
. Users can find the config files we provide and some details about the model through the benchmarks folder. More information can be retrieved at the model files listed above.

Qlib
provides three different ways to run a single model, users can pick the one that fits their cases best:

  • Users can use the tool

    qrun
    mentioned above to run a model's workflow based from a config file.

  • Users can create a

    workflow_by_code
    python script based on the one listed in the
    examples
    folder.

  • Users can use the script

    run_all_model.py
    listed in the
    examples
    folder to run a model. Here is an example of the specific shell command to be used:
    python run_all_model.py run --models=lightgbm
    , where the
    --models
    arguments can take any number of models listed above(the available models can be found in benchmarks). For more use cases, please refer to the file's docstrings.

    • NOTE: Each baseline has different environment dependencies, please make sure that your python version aligns with the requirements(e.g. TFT only supports Python 3.6~3.7 due to the limitation of
      tensorflow==1.15.0
      )

Run multiple models

Qlib
also provides a script
run_all_model.py
which can run multiple models for several iterations. (Note: the script only support Linux for now. Other OS will be supported in the future. Besides, it doesn't support parallel running the same model for multiple times as well, and this will be fixed in the future development too.)

The script will create a unique virtual environment for each model, and delete the environments after training. Thus, only experiment results such as

IC
and
backtest
results will be generated and stored.

Here is an example of running all the models for 10 iterations:

python run_all_model.py run 10

It also provides the API to run specific models at once. For more use cases, please refer to the file's docstrings.

Adapting to Market Dynamics

金融市場の環境の非定常性により、データ分布はさまざまな期間で変化する可能性があり、これにより、トレーニング データに基づいて構築されたモデルのパフォーマンスが、将来のテスト データで減衰します。したがって、予測モデル/戦略を市場のダイナミクスに適応させることは、モデル/戦略のパフォーマンスにとって非常に重要です。

に基づいて構築されたソリューションのリストを次に示し

Qlib
ます。

量子データセット動物園

Quant では、データセットが非常に重要な役割を果たします。に基づいて構築されたデータセットのリストは次の

Qlib
とおりです。

データセット 米国市場 中国市場
Alpha360
アルファ158

でデータセットを構築するためのチュートリアルです

Qlib
。新しい Quant データセットを構築するための PR は大歓迎です。

Qlibの詳細

最も頻繁に使用される qlib のコンポーネントを一目で確認したい場合は、ここでノートブックを試すことができます。

詳細なドキュメントはdocsにまとめられています。 HTML 形式のドキュメントを作成するには、 Sphinxと readthedocs テーマが必要です。

cd docs/
conda install sphinx sphinx_rtd_theme -y
# Otherwise, you can install them with pip
# pip install sphinx sphinx_rtd_theme
make html

最新のドキュメントをオンラインで直接表示することもできます。

Qlib は積極的に開発を続けています。私たちの計画はロードマップにあり、github プロジェクトとして管理されています。

オフラインモードとオンラインモード

Qlib のデータ サーバーは、

Offline
モードまたは
Online
モードとしてデプロイできます。デフォルトのモードはオフライン モードです。

モードの下

Offline
では、データはローカルに展開されます。

下の

Online
モードでは、データは共有データ サービスとして展開されます。データとそのキャッシュは、すべてのクライアントで共有されます。キャッシュのヒット率が高くなるため、データ取得のパフォーマンスが向上することが期待されます。消費するディスク容量も少なくなります。オンライン モードのドキュメントはQlib-Server にあります。オンライン モードは、Azure CLI ベースのスクリプトを使用して自動的に展開できます。オンライン データ サーバーのソース コードは、Qlib-Server リポジトリにあります。

Qlib データ サーバーのパフォーマンス

データ処理のパフォーマンスは、AI テクノロジのようなデータ駆動型の手法にとって重要です。AI 指向のプラットフォームとして、Qlib はデータ ストレージとデータ処理のソリューションを提供します。Qlib データ サーバーのパフォーマンスを実証するために、他のいくつかのデータ ストレージ ソリューションと比較します。

株式市場の基本的な OHLCV の毎日のデータ (2007 年から 2020 年まで毎日 800 株) からデータセット (14 の特徴/要素) を作成する同じタスクを完了することによって、いくつかのストレージ ソリューションのパフォーマンスを評価します。このタスクには、データのクエリと処理が含まれます。

HDF5 MySQL モンゴDB 流入DB Qlib -E -D Qlib +E -D クリブ +E +D
合計 (1CPU) (秒) 184.4±3.7 365.3±7.5 253.6±6.7 368.2±3.6 147.0±8.8 47.6±1.0 7.4±0.3
合計 (64CPU) (秒) 8.8±0.6 4.2±0.2
  • +(-)E
    (アウト)で示します
    ExpressionCache
  • +(-)D
    (アウト)で示します
    DatasetCache

ほとんどの汎用データベースは、データのロードに時間がかかりすぎます。基盤となる実装を調べたところ、汎用データベース ソリューションでは、データがインターフェイスの層が多すぎたり、不要な形式変換を行ったりしていることがわかりました。このようなオーバーヘッドにより、データの読み込みプロセスが大幅に遅くなります。Qlib データはコンパクトな形式で保存されます。これは、科学計算用の配列に結合するのに効率的です。

関連レポート

お問い合わせ

IM ディスカッション グループに参加します。

ギッター
画像

貢献する

すべての貢献に感謝し、すべての貢献者に感謝します!

2020 年 9 月に Github で Qlib をオープンソース プロジェクトとしてリリースする前は、Qlib は私たちのグループの内部プロジェクトでした。残念ながら、内部のコミット履歴は保持されません。Ruihua Wang、Yinda Zhang、Haisu Yu、Shuyu Wang、Bochen Pang、 Dong Zhouなど、グループの多くのメンバーも Qlib に多大な貢献をしています。Qlib の最初のバージョンを提供してくれたDong Zhouに特に感謝します。

ガイダンス

このプロジェクトは、貢献と提案を歓迎します。プル リクエストを送信するためのコード標準と開発ガイダンス
を次に示します 。

貢献することは難しいことではありません。問題の解決 (問題リストまたはgitterで提起された質問に答えるだけかもしれません)、バグの修正/発行、ドキュメントの改善、タイプミスの修正は、Qlib への重要な貢献です。

たとえば、Qlib のドキュメント/コードに貢献したい場合は、下図の手順に従ってください。

貢献を開始する方法がわからない場合は、次の例を参照できます。

タイプ
問題の解決 質問に答えてください。 バグの発行または修正
ドキュメント ドキュメントの品質を向上させますタイプミスを修正
特徴 このような要求された機能を実装します。インターフェイスのリファクタリング
データセット データセットを追加する
モデル 新しいモデルの実装、モデルに貢献するためのいくつかの指示

優れた最初の号には、貢献を開始しやすいことを示すラベルが付けられています。

Qlib でいくつかの不完全な実装を見つけることができます。

rg 'TODO|FIXME' qlib

Qlib のメンテナーになってさらに貢献したい場合 (PR のマージ、問題のトリアージなど) は、電子メール ( qlib@microsoft.com ) でご連絡ください。権限のアップグレードをお手伝いできることをうれしく思います。

ライセンス

ほとんどのコントリビューションでは、コントリビューター ライセンス契約 (CLA) に同意する必要があります。これは、あなたがコントリビューションを使用する権利を当社に付与する権利を有し、実際に付与することを宣言するものです。詳細については、https://cla.opensource.microsoft.comをご覧ください。

プル リクエストを送信すると、CLA を提供する必要があるかどうかを CLA ボットが自動的に判断し、PR を適切に装飾します (ステータス チェック、コメントなど)。ボットが提供する指示に従うだけです。これは、CLA を使用してすべてのリポジトリで 1 回だけ行う必要があります。

このプロジェクトは、Microsoft オープン ソース行動規範を採用しています。詳細については、行動規範に関する FAQ を参照するか、 opencode@microsoft.comに連絡して追加の質問やコメントをお寄せください。