OpenBB-finance/OpenBB
主な特徴
- 50以上のデータプロバイダーを統合(無料・有料含む)
- Python APIとREST APIの両方を提供
- 統一されたインターフェースで異なるデータソースにアクセス
- FastAPIベースの高性能REST APIサーバー
- 株式、オプション、暗号通貨、外国為替、マクロ経済指標など幅広い金融データをカバー
- 拡張可能なアーキテクチャでカスタムプロバイダーの追加が可能
- OpenBB HubとWorkspaceによるエンタープライズUI連携
リポジトリ解析: OpenBB-finance/OpenBB
基本情報
- リポジトリ名: OpenBB-finance/OpenBB
- 主要言語: Python
- スター数: 45,074
- フォーク数: [情報なし]
- 最終更新: 2024年8月
- ライセンス: AGPL-3.0 (GNU Affero General Public License v3.0)
- トピックス: 金融データプラットフォーム、投資リサーチ、オープンソース、REST API、金融分析
概要
一言で言うと
初めてのオープンソース金融プラットフォーム。複数のデータプロバイダーから金融データを統一的に取得できるPythonライブラリとREST APIを提供。
詳細説明
OpenBBは投資リサーチの未来を、誰もがどこからでもアクセスできるオープンソースインフラストラクチャを通じて構築することを目指している。株式、オプション、暗号通貨、外国為替、マクロ経済、債券など幅広い金融データへのアクセスを提供し、ユーザーのニーズに応じた拡張機能で体験を向上させる。
主な特徴
- 50以上のデータプロバイダーを統合(無料・有料含む)
- Python APIとREST APIの両方を提供
- 統一されたインターフェースで異なるデータソースにアクセス
- FastAPIベースの高性能REST APIサーバー
- 株式、オプション、暗号通貨、外国為替、マクロ経済指標など幅広い金融データをカバー
- 拡張可能なアーキテクチャでカスタムプロバイダーの追加が可能
- OpenBB HubとWorkspaceによるエンタープライズUI連携
使用方法
インストール
前提条件
- Python 3.9以上、3.13未満
- pip パッケージマネージャー
インストール手順
# 方法1: 基本インストール(コア機能+主要データプロバイダー)
pip install openbb
# 方法2: 全拡張機能を含むインストール
pip install openbb[all]
# 方法3: 特定の拡張機能を追加
pip install openbb[charting]
pip install openbb-yfinance
# 方法4: ソースからインストール(開発者向け)
git clone https://github.com/OpenBB-finance/OpenBB.git
cd OpenBB/openbb_platform
python dev_install.py
基本的な使い方
Hello World相当の例
from openbb import obb
# 株価の履歴データを取得
output = obb.equity.price.historical("AAPL")
df = output.to_dataframe()
print(df.head())
実践的な使用例
from openbb import obb
# APIキーの設定(実行時)
obb.user.credentials.fmp_api_key = "YOUR_API_KEY"
obb.user.credentials.polygon_api_key = "YOUR_API_KEY"
# 複数の時間枠でデータ取得
# 日次データ
daily_data = obb.equity.price.historical(
symbol="SPY",
start_date="2024-01-01",
end_date="2024-08-01",
provider="yfinance"
)
# 分足データ
minute_data = obb.equity.price.historical(
symbol="SPY",
interval="1m",
provider="polygon"
)
# データをDataFrameに変換
df_daily = daily_data.to_dataframe()
df_minute = minute_data.to_dataframe()
# 複数のプロバイダーからデータを比較
yahoo = obb.equity.price.historical("SPY", provider="yfinance").to_df()
fmp = obb.equity.price.historical("SPY", provider="fmp").to_df()
polygon = obb.equity.price.historical("SPY", provider="polygon").to_df()
高度な使い方
# REST APIサーバーの起動
# ターミナルで実行:
# uvicorn openbb_core.api.rest_api:app --host 0.0.0.0 --port 8000 --reload
# OpenBB Hubとの連携
from openbb import obb
# OpenBB Hubアカウントでログイン
obb.account.login(pat="YOUR_PERSONAL_ACCESS_TOKEN")
# 設定を永続化
obb.account.save()
# 異なる資産クラスのデータ取得
# 為替
currency_data = obb.currency.price.historical(
"EURUSD",
provider="fmp"
)
# 暗号通貨
crypto_data = obb.crypto.price.historical(
"BTCUSD",
provider="polygon"
)
# オプション(個別契約)
option_data = obb.equity.price.historical(
"SPY241220P00400000",
provider="yfinance"
)
# 先物(継続契約)
futures_data = obb.equity.price.historical(
"CL=F", # 原油先物
provider="yfinance"
)
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクトの概要、インストール方法、基本的な使用例
- openbb_platform/README.md: OpenBB Platformの詳細な説明、APIキー設定方法
- 公式ドキュメント: https://docs.openbb.co/platform
- APIリファレンス: https://docs.openbb.co/platform/reference
サンプル・デモ
- examples/loadHistoricalPriceData.ipynb: 様々な金融商品の価格データ取得方法
- examples/financialStatements.ipynb: 財務諸表データの取得と分析
- examples/portfolioOptimizationUsingModernPortfolioTheory.ipynb: ポートフォリオ最適化
- examples/googleColab.ipynb: Google Colabでの使用方法
- examples/streamlit/: Streamlitを使用したWebアプリケーション例
チュートリアル・ガイド
- クイックスタートガイド
- データプロバイダー設定ガイド
- REST API利用ガイド
- OpenBB Workspace統合ガイド
技術的詳細
アーキテクチャ
全体構造
OpenBBはモジュール式のアーキテクチャを採用し、コアプラットフォームと多数のデータプロバイダー拡張を分離。FastAPIベースのREST APIサーバーを内蔵し、Pythonライブラリとしても、HTTPエンドポイントとしても利用可能。
ディレクトリ構成
openbb_platform/
├── core/
│ └── openbb_core/
│ ├── api/ # REST API実装(FastAPI)
│ ├── app/ # アプリケーションロジック
│ ├── provider/ # データプロバイダーインターフェース
│ └── standard_models/ # 200以上の標準金融データモデル
├── providers/ # 各データプロバイダーの実装
├── extensions/ # 追加機能(チャート、CLI等)
└── examples/ # Jupyterノートブックのサンプル集
主要コンポーネント
-
OpenBB Core: プラットフォームの中核機能
- 場所:
openbb_platform/core/openbb_core/ - 役割: データプロバイダーの統合、API提供、認証管理
- インターフェース: Python API、REST API
- 場所:
-
Provider Interface: データプロバイダー抽象層
- 場所:
openbb_core/provider/ - 役割: 異なるデータソースを統一的に扱うためのインターフェース
- 主要クラス:
Provider,Fetcher,QueryParams
- 場所:
-
Standard Models: 金融データの標準モデル定義
- 場所:
openbb_core/provider/standard_models/ - 役割: 200以上の金融データタイプの統一的な定義
- 例:
equity_historical,balance_sheet,options_chains等
- 場所:
-
REST API: HTTPエンドポイント
- 場所:
openbb_core/api/rest_api.py - 役割: FastAPIベースのREST APIサーバー
- エンドポイント:
/docsでSwagger UI利用可能
- 場所:
技術スタック
コア技術
- 言語: Python (>=3.9.21, <3.13)
- Webフレームワーク: FastAPI (^0.116.1) - REST API実装
- 主要ライブラリ:
- pandas (>=1.5.3): データ処理と分析
- pydantic (^2.5.1): データバリデーションとモデル定義
- uvicorn (^0.34.2): ASGIサーバー
- aiohttp (^3.12.12): 非同期HTTPクライアント
- requests (^2.32.4): HTTPクライアント
- websockets (^15.0): WebSocket対応
開発・運用ツール
- パッケージ管理: Poetry
- リンター: Ruff (^0.12)
- ビルドツール: openbb-build コマンド
- 認証: JWT (pyjwt ^2.10.1)
- 環境設定: python-dotenv
設計パターン・手法
- プロバイダーパターン: 異なるデータソースを統一インターフェースで抽象化
- ファクトリーパターン: データモデルの動的生成
- シングルトンパターン: アプリケーション設定の管理
- デコレーターパターン: APIエンドポイントの認証・検証
- 非同期処理: aiohttpを使用した並列データ取得
データフロー・処理フロー
- ユーザーリクエスト(Python API or REST API)
- パラメータバリデーション(Pydantic)
- 適切なプロバイダーの選択
- データ取得(同期/非同期)
- データ標準化(Standard Models)
- レスポンス生成(OBBject)
- 出力形式変換(DataFrame, JSON等)
API・インターフェース
公開API
Python API
- 目的: Pythonコードから直接金融データにアクセス
- 使用例:
from openbb import obb
# 株価データ取得
data = obb.equity.price.historical("AAPL", provider="fmp")
# 財務諸表取得
balance_sheet = obb.equity.fundamental.balance("AAPL")
# マクロ経済データ
gdp_data = obb.economy.gdp(country="US")
REST API
- 目的: 任意の言語からHTTP経由でアクセス
- エンドポイント例:
- GET
/api/v1/equity/price/historical - GET
/api/v1/equity/fundamental/balance - GET
/api/v1/economy/gdp
- GET
設定・カスタマイズ
設定ファイル
// ~/.openbb_platform/user_settings.json
{
"credentials": {
"fmp_api_key": "YOUR_KEY",
"polygon_api_key": "YOUR_KEY",
"benzinga_api_key": "YOUR_KEY",
"fred_api_key": "YOUR_KEY"
},
"preferences": {
"output_type": "dataframe",
"plot_backend": "plotly"
}
}
拡張・プラグイン開発
カスタムプロバイダーの作成:
Provider基底クラスを継承Fetcherクラスでデータ取得ロジック実装- 標準モデルへのマッピング定義
- プロバイダーレジストリへの登録
パフォーマンス・スケーラビリティ
パフォーマンス特性
- 非同期処理によるAPIコールの並列化
- データキャッシュによる重複リクエストの削減
- Pydanticによる高速なデータバリデーション
- pandas DataFrameへの効率的な変換
スケーラビリティ
- REST APIはuvicornで複数ワーカー対応
- データプロバイダーごとの独立した処理
- 水平スケーリング可能なステートレス設計
- 各プロバイダーのレート制限に準拠
制限事項
- 各データプロバイダーのAPI制限に依存
- 無料プランでは取得可能なデータ量に制限
- リアルタイムデータは限定的(プロバイダー依存)
- ライセンス(AGPL-3.0)による商用利用時の制約
評価・所感
技術的評価
強み
- 統一されたインターフェースで50以上のデータプロバイダーにアクセス可能
- 優れた拡張性とモジュール設計
- 充実したドキュメントとサンプルコード
- PythonとREST APIの両方をサポート
- 活発な開発とコミュニティ(45,000以上のスター)
- 金融データモデルの包括的な標準化
改善の余地
- AGPL-3.0ライセンスによる商用利用の制約
- リアルタイムデータのサポートが限定的
- 一部の高度な分析機能は別途実装が必要
- プロバイダーごとのデータ品質のばらつき
向いている用途
- 金融データを統合的に扱うアプリケーション開発
- クオンツ分析・バックテスティング
- 市場調査・投資リサーチ
- 金融データAPIのプロトタイピング
- 教育・研究目的での金融データ分析
向いていない用途
- 超低遅延が必要なHFT(高頻度取引)システム
- AGPL-3.0を受け入れられない商用製品
- リアルタイムストリーミングが必須の用途
- 規制対応が厳格な金融機関での直接利用
総評
OpenBBは金融データアクセスの民主化を実現する画期的なプロジェクト。複数のデータソースを統一的に扱える点は非常に強力で、個人投資家から小規模ヘッジファンドまで幅広く活用できる。特に研究・分析用途では、データ取得の煩雑さから解放され、本質的な分析に集中できる。ただし、AGPLライセンスの制約があるため、商用利用時は慎重な検討が必要。OpenBB Workspaceとの連携により、コーディング不要のUIも提供されており、今後の発展が期待される。