microsoft/qlib
主な特徴
- 完全なMLパイプライン(データ処理、モデル訓練、バックテスト)
- 定量投資の全チェーンをカバー(アルファ探索からオーダー執行まで)
- 30以上のSOTAモデルを実装(LSTM、GRU、Transformer、LightGBM、XGBoost、HIST、KRNN、TRA等)
- 教師あり学習、市場ダイナミクスモデリング、強化学習をサポート
- 高頻度取引のサポート(1分データ対応)
- Point-in-Timeデータベース
- オンラインサービングと自動モデルローリング
- 実験管理とワークフロー管理
- RD-Agent: LLMベースの自動クォント研究開発エージェント
- 多様なデータソース対応(中国市場、米国市場、暗号通貨等)
リポジトリ解析: microsoft/qlib
基本情報
- リポジトリ名: microsoft/qlib
- 主要言語: Python
- スター数: 26,997
- フォーク数: 4,137
- 最終更新: 活発に更新中(RD-Agent最新リリース含む)
- ライセンス: MIT License
- トピックス: quantitative-trading, machine-learning, deep-learning, quant, finance, reinforcement-learning, artificial-intelligence, investment
概要
一言で言うと
QlibはAI技術を活用して定量投資のポテンシャルを実現し、研究を強化し、価値を創造することを目的としたオープンソースのAI指向定量投資プラットフォームです。
詳細説明
Qlibは、Microsoftが開発したオープンソースのAI指向定量投資プラットフォームで、アイデアの探索から本番実装まで、AI技術を使用した定量投資の全プロセスをサポートします。教師あり学習、市場ダイナミクスモデリング、強化学習など、多様な機械学習モデリングパラダイムをサポートしています。
データ処理、モデル訓練、バックテストを含む完全なMLパイプラインを提供し、アルファ探索、リスクモデリング、ポートフォリオ最適化、注文執行など、定量投資の全チェーンをカバーしています。また、最新のRD-Agentという、LLMベースの自動進化エージェントも提供しており、ファクターマイニングとモデル最適化を自動化します。
主な特徴
- 完全なMLパイプライン(データ処理、モデル訓練、バックテスト)
- 定量投資の全チェーンをカバー(アルファ探索からオーダー執行まで)
- 30以上のSOTAモデルを実装(LSTM、GRU、Transformer、LightGBM、XGBoost、HIST、KRNN、TRA等)
- 教師あり学習、市場ダイナミクスモデリング、強化学習をサポート
- 高頻度取引のサポート(1分データ対応)
- Point-in-Timeデータベース
- オンラインサービングと自動モデルローリング
- 実験管理とワークフロー管理
- RD-Agent: LLMベースの自動クォント研究開発エージェント
- 多様なデータソース対応(中国市場、米国市場、暗号通貨等)
使用方法
インストール
前提条件
- Python 3.8以上(3.12まで対応)
- Linux、Windows、macOS対応(Linuxが推奨)
- メモリ: 16GB以上(ワークフロー実行用)
- ディスク: 5GB以上の空き容量(データ用)
インストール手順
# 方法1: pipでインストール(推奨)
pip install pyqlib
# 方法2: ソースからインストール
pip install numpy
pip install --upgrade cython
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install
# オプション: 強化学習機能を含める場合
pip install pyqlib[rl]
# オプション: 開発環境を含める場合
pip install pyqlib[dev]
基本的な使い方
Hello World相当の例
# Qlibの初期化とデータ取得
import qlib
from qlib.constant import REG_CN
# Qlibの初期化(中国市場のデータを使用)
provider_uri = "~/.qlib/qlib_data/cn_data"
qlib.init(provider_uri=provider_uri, region=REG_CN)
# データの準備
from qlib.tests.data import GetData
GetData().qlib_data(target_dir=provider_uri, region=REG_CN, exists_skip=True)
# 簡単なデータ取得例
from qlib.data import D
# CSI300の2020年のデータを取得
df = D.features(["SH600000"], ["$close", "$volume"], start_time="2020-01-01", end_time="2020-12-31")
print(df.head())
実践的な使用例
# LightGBMモデルを使った株価予測の例
import qlib
from qlib.utils import init_instance_by_config
from qlib.workflow import R
from qlib.tests.config import CSI300_GBDT_TASK
# モデルとデータセットの初期化
model = init_instance_by_config(CSI300_GBDT_TASK["model"])
dataset = init_instance_by_config(CSI300_GBDT_TASK["dataset"])
# 実験開始
with R.start(experiment_name="my_experiment"):
# モデルの訓練
model.fit(dataset)
# 予測の実行
prediction = model.predict(dataset)
# バックテストの設定
port_analysis_config = {
"strategy": {
"class": "TopkDropoutStrategy",
"kwargs": {
"signal": (model, dataset),
"topk": 50, # 上位50銘柄を選択
"n_drop": 5, # 5銘柄をドロップアウト
}
},
"backtest": {
"start_time": "2017-01-01",
"end_time": "2020-08-01",
"account": 100000000, # 初期資金1億
"benchmark": "SH000300", # CSI300をベンチマーク
}
}
高度な使い方
# RD-Agentを使った自動ファクターマイニング(概念的な例)
from qlib.rl.order_execution import *
from qlib.contrib.model.pytorch_hist import HIST
# HIST(Historical Information-aware Stock Trend Forecasting)モデルの使用
model_config = {
"class": "HIST",
"kwargs": {
"d_feat": 6, # 特徴量の次元
"hidden_size": 128,
"num_layers": 2,
"dropout": 0.1,
"n_epochs": 200,
}
}
# 高頻度取引の設定例
hft_config = {
"time_per_step": "1min", # 1分間隔のデータ
"executor": {
"class": "NestedExecutor",
"kwargs": {
"time_per_step": "1min",
"inner_executor": {
"class": "SimulatorExecutor",
"kwargs": {
"time_per_step": "1min",
"generate_portfolio_metrics": True,
}
}
}
}
}
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクトの概要、最新機能、基本的な使い方
- Read the Docs: https://qlib.readthedocs.io - 包括的なAPIドキュメントとチュートリアル
- docs/start/: インストール、初期化、データ準備、統合ガイド
- Paper: "Qlib: An AI-oriented Quantitative Investment Platform" (arXiv:2009.11189)
- RD-Agent Paper: "R&D-Agent-Quant: A Multi-Agent Framework for Data-Centric Factors and Model Joint Optimization" (arXiv:2505.15155)
サンプル・デモ
- examples/workflow_by_code.py: コードベースのワークフロー実装例
- examples/benchmarks/: 30以上のSOTAモデルの実装と設定ファイル
- LightGBM、XGBoost、CatBoost(勾配ブースティング)
- LSTM、GRU、Transformer(深層学習時系列モデル)
- HIST、KRNN、TRA(最新の研究モデル)
- examples/tutorial/: Jupyterノートブックチュートリアル
- examples/rl/: 強化学習の実装例
- examples/highfreq/: 高頻度取引の例
チュートリアル・ガイド
- クイックスタートガイド
- ワークフロー管理チュートリアル
- カスタムモデル実装ガイド
- データハンドラーのカスタマイズ
- バックテストと評価のベストプラクティス
- オンラインサービングとモデルローリング
技術的詳細
アーキテクチャ
全体構造
Qlibは、定量投資研究のエンドツーエンドパイプラインを提供する階層型アーキテクチャを採用しています:
- インフラレイヤー: データストレージ、計算リソース管理
- データレイヤー: データ収集、前処理、特徴エンジニアリング
- モデルレイヤー: ML/DLモデル、予測、シグナル生成
- ポートフォリオレイヤー: リスク管理、最適化、実行戦略
- プラットフォームレイヤー: ワークフロー管理、実験追跡、評価
ディレクトリ構成
qlib/
├── qlib/ # コアライブラリ
│ ├── data/ # データ処理とデータセット管理
│ │ ├── dataset/ # データセットクラスとハンドラー
│ │ ├── filter/ # データフィルタリング
│ │ └── ops.py # データ操作関数
│ ├── model/ # モデル基底クラスとユーティリティ
│ │ └── base.py # BaseModel, Model抽象クラス
│ ├── contrib/ # コントリビューションモデルとツール
│ │ ├── model/ # 実装済みモデル(LSTM、GRU等)
│ │ ├── strategy/ # 取引戦略
│ │ └── evaluate.py # 評価メトリクス
│ ├── backtest/ # バックテストエンジン
│ │ ├── executor.py # 実行エンジン
│ │ └── signal.py # シグナル処理
│ ├── workflow/ # ワークフロー管理
│ │ ├── recorder.py # 実験記録
│ │ └── exp.py # 実験管理
│ └── rl/ # 強化学習フレームワーク
├── examples/ # 使用例とベンチマーク
├── scripts/ # データダウンロードスクリプト
├── tests/ # ユニットテストとインテグレーションテスト
└── docs/ # ドキュメント
主要コンポーネント
-
Data: データ管理とアクセス
- 場所:
qlib/data/ - 依存: cache、filter、ops
- インターフェース: D.features()、D.calendar()、D.instruments()
- 場所:
-
Model: 機械学習モデル基底クラス
- 場所:
qlib/model/base.py - 依存: Dataset、Reweighter
- インターフェース: fit()、predict()、save()、load()
- 場所:
-
Dataset: データセット管理
- 場所:
qlib/data/dataset/ - 依存: DataHandler、Processor
- インターフェース: prepare()、setup_data()
- 場所:
-
Executor: バックテスト実行エンジン
- 場所:
qlib/backtest/executor.py - 依存: Exchange、Account
- インターフェース: execute()、get_portfolio_metrics()
- 場所:
技術スタック
コア技術
- 言語: Python 3.8-3.12(Cython拡張モジュール含む)
- フレームワーク: 独自の定量投資フレームワーク
- 主要ライブラリ:
- pandas (>=0.24): データ操作と時系列処理
- numpy: 数値計算
- LightGBM: 勾配ブースティング決定木
- PyTorch: 深層学習モデル(オプション)
- mlflow: 実験管理とモデル追跡
- cvxpy: ポートフォリオ最適化
- gym: 強化学習環境
- redis: キャッシュとデータストレージ
- pymongo: MongoDB連携
開発・運用ツール
- ビルドツール: setuptools、Cython(高速化モジュール)
- テスト: pytest、統合テストスイート
- CI/CD: GitHub Actions(テスト、パッケージ公開)
- ドキュメント: Sphinx、Read the Docs
- パッケージ配布: PyPI(pyqlib)
設計パターン・手法
- ファクトリーパターン: init_instance_by_config()による動的インスタンス生成
- 戦略パターン: 取引戦略の抽象化と実装
- テンプレートメソッド: モデルとデータハンドラーの基底クラス
- レコーダーパターン: 実験追跡とロギング
- パイプライン: データ処理からバックテストまでの一連の処理
データフロー・処理フロー
- データ取得: 金融データのダウンロードと前処理
- 特徴エンジニアリング: Alpha158/Alpha360などの特徴量生成
- モデル訓練: 訓練データでのモデル学習
- 予測生成: 検証/テストデータでの予測
- 戦略実行: 予測に基づく取引シグナル生成
- バックテスト: 履歴データでのパフォーマンス評価
- 分析・最適化: 結果分析とパラメータ調整
API・インターフェース
公開API
データアクセスAPI
- 目的: 金融データの取得と操作
- 使用例:
from qlib.data import D
# 特定銘柄の価格データ取得
df = D.features(
instruments=["AAPL", "MSFT"],
fields=["$close", "$volume", "$open/$close"],
start_time="2020-01-01",
end_time="2021-01-01"
)
設定・カスタマイズ
設定ファイル(YAML形式)
# ワークフロー設定例
task:
model:
class: LGBModel
kwargs:
n_estimators: 1000
learning_rate: 0.1
dataset:
class: DatasetH
kwargs:
handler:
class: Alpha158
kwargs:
start_time: 2008-01-01
end_time: 2020-08-01
拡張・プラグイン開発
- カスタムモデル: BaseModelを継承してfit()とpredict()を実装
- カスタムデータハンドラー: DataHandlerLPを継承
- カスタム戦略: BaseStrategyを継承
- カスタム評価指標: 評価関数を追加
パフォーマンス・スケーラビリティ
パフォーマンス特性
- データ処理速度: Cython最適化により高速化
- モデル訓練: GPUサポート(PyTorchモデル)
- バックテスト速度: 効率的なベクトル化処理
- メモリ効率: チャンク処理とキャッシング
スケーラビリティ
- 大規模データセット対応(数千銘柄×数十年)
- 分散処理サポート(Dask統合可能)
- Redis/MongoDBによるデータキャッシュ
- マルチプロセッシング対応
制限事項
- リアルタイム取引は別途実装が必要
- 主に日次データに最適化(高頻度データは追加設定要)
- 中国市場データがデフォルト(他市場は追加設定要)
評価・所感
技術的評価
強み
- 包括的な定量投資プラットフォーム
- 豊富なSOTAモデルの実装
- 優れた実験管理とワークフロー
- 活発な開発とMicrosoftのサポート
- 研究から本番まで一貫したパイプライン
- オープンソースで拡張性が高い
改善の余地
- ドキュメントの一部が中国市場中心
- リアルタイム取引機能の標準化
- 初心者向けのより簡潔なチュートリアル
向いている用途
- 定量投資研究と戦略開発
- 機械学習を使った株価予測
- ファクターマイニングとアルファ探索
- バックテストとポートフォリオ最適化
- 学術研究と教育
向いていない用途
- 超高頻度取引(ミリ秒単位)
- 暗号通貨のリアルタイム取引(別途実装要)
- 非構造化データ(ニュース、SNS)の直接分析
総評
Qlibは、Microsoftが開発した本格的なAI指向定量投資プラットフォームとして、研究から本番まで一貫したワークフローを提供する優れたフレームワークです。30以上のSOTAモデルの実装、包括的なバックテスト機能、優れた実験管理システムなど、定量投資研究に必要な機能が網羅されています。特に最新のRD-Agentによる自動ファクターマイニング機能は、LLMを活用した革新的なアプローチとして注目されます。オープンソースかつ活発な開発コミュニティを持つことから、今後も定量投資分野でのデファクトスタンダードとなることが期待されます。