OpenBB-finance/OpenBB
主な特徴
- 30以上のデータプロバイダーを統一APIで利用可能(無料・有料含む)
- Python SDK、CLI、REST APIの3つのインターフェースを提供
- 標準化されたデータモデルによるプロバイダー間の互換性
- プラグインアーキテクチャによる高い拡張性
- 株式、暗号通貨、FX、債券、デリバティブなど幅広い資産クラス対応
- テクニカル分析、定量分析、計量経済分析ツールを内蔵
- Plotlyベースのインタラクティブチャート機能
- AI/LLM統合のためのMCP (Model Context Protocol) サーバー
- OpenBB Workspaceとの統合によるエンタープライズUI利用可能
リポジトリ解析: OpenBB-finance/OpenBB
基本情報
- リポジトリ名: OpenBB-finance/OpenBB
- 主要言語: Python
- スター数: 46,168
- フォーク数: 情報なし
- 最終更新: アクティブに開発中
- ライセンス: AGPLv3 (GNU Affero General Public License v3.0)
- トピックス: 投資リサーチ、金融データ、データ統合、オープンソース、金融プラットフォーム
概要
一言で言うと
オープンソースの金融プラットフォームで、30以上のデータプロバイダーから金融データを統一的に取得・分析できるPythonライブラリとCLI、そしてREST APIを提供する「すべての人のための投資リサーチツール」。
詳細説明
OpenBBは、個人投資家から金融機関まで、誰もが高品質な金融データにアクセスできることを目指したオープンソースプラットフォームです。従来、金融データへのアクセスは高額なサブスクリプションや複雑なAPIの壁に阻まれていましたが、OpenBBは30以上のデータソース(無料・有料)を統一的なインターフェースで提供し、株式、オプション、暗号通貨、外国為替、マクロ経済、債券など幅広い資産クラスのデータを簡単に取得・分析できるようにしています。モジュラーアーキテクチャとプラグインシステムにより、新しいデータソースや機能を簡単に追加できる拡張性も備えています。
主な特徴
- 30以上のデータプロバイダーを統一APIで利用可能(無料・有料含む)
- Python SDK、CLI、REST APIの3つのインターフェースを提供
- 標準化されたデータモデルによるプロバイダー間の互換性
- プラグインアーキテクチャによる高い拡張性
- 株式、暗号通貨、FX、債券、デリバティブなど幅広い資産クラス対応
- テクニカル分析、定量分析、計量経済分析ツールを内蔵
- Plotlyベースのインタラクティブチャート機能
- AI/LLM統合のためのMCP (Model Context Protocol) サーバー
- OpenBB Workspaceとの統合によるエンタープライズUI利用可能
使用方法
インストール
前提条件
- Python 3.9.21 - 3.12(Python 3.13はまだサポート外)
- pip(Pythonパッケージマネージャー)
- (オプション)Docker(コンテナベースの実行環境)
- (オプション)Git(ソースからのインストール時)
インストール手順
# 方法1: PyPI経由(基本インストール)
pip install openbb
# 方法2: すべての拡張機能を含むインストール
pip install "openbb[all]"
# 方法3: CLI版のインストール
pip install openbb-cli
# 方法4: 特定の拡張機能のみインストール
pip install openbb-charting # チャート機能
pip install openbb-technical # テクニカル分析
# 方法5: ソースからビルド
git clone https://github.com/OpenBB-finance/OpenBB.git
cd OpenBB
pip install -e .
基本的な使い方
Hello World相当の例
# OpenBBのインポートと株価データの取得
from openbb import obb
# Appleの株価履歴を取得
data = obb.equity.price.historical("AAPL")
# DataFrameに変換して表示
df = data.to_dataframe()
print(df.head())
実践的な使用例
# 複数のデータソースを使った分析例
from openbb import obb
import pandas as pd
# 異なるプロバイダーから株価データを取得
yahoo_data = obb.equity.price.historical("SPY", provider="yfinance")
fmp_data = obb.equity.price.historical("SPY", provider="fmp")
# テクニカル指標の計算
rsi_data = obb.technical.rsi(yahoo_data.results)
# 経済指標データの取得
gdp_data = obb.economy.gdp(provider="fred")
# チャートの表示(openbb-chartingが必要)
yahoo_data.charting.show()
高度な使い方
# REST APIサーバーの起動と利用
# ターミナル1で実行:
# openbb-api
# ターミナル2またはスクリプトで:
import requests
# APIエンドポイントからデータ取得
response = requests.get(
"http://127.0.0.1:6900/api/v1/equity/price/historical",
params={"symbol": "AAPL", "provider": "yfinance"}
)
data = response.json()
# LLM統合の例(openbb-mcp-serverが必要)
# MCPサーバーを起動してLLMツールとして利用可能
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要、インストール方法、基本的な使い方
- openbb_platform/README.md: プラットフォームアーキテクチャの詳細
- cli/README.md: CLIの使用方法とコマンドリファレンス
- 公式ドキュメントサイト: https://docs.openbb.co/ (包括的なAPIリファレンス)
- データプロバイダーリファレンス: https://docs.openbb.co/platform/reference
サンプル・デモ
- examples/loadHistoricalPriceData.ipynb: 株価履歴データの取得方法
- examples/portfolioOptimizationUsingModernPortfolioTheory.ipynb: ポートフォリオ最適化
- examples/sectorRotationStrategy.ipynb: セクターローテーション戦略
- examples/openbbPlatformAsLLMTools.ipynb: LLM統合の実装例
- examples/streamlit/: Streamlitを使ったWebダッシュボード例
- examples/googleColab.ipynb: Google Colabでの使用例
チュートリアル・ガイド
- Getting Started Guide
- OpenBB Hub - APIキー管理とプレミアムデータアクセス
- Discord Community - 活発なコミュニティサポート
- YouTube Channel - ビデオチュートリアル
- GitHub Discussions - Q&Aフォーラム
技術的詳細
アーキテクチャ
全体構造
OpenBBはモジュラーアーキテクチャを採用し、コアプラットフォーム、拡張機能、データプロバイダー、ユーザーインターフェースの4層構造で設計されています。コアは抽象的なプロバイダーインターフェースとルーターシステムを提供し、拡張機能が資産クラス別の機能を追加、プロバイダーが実際のデータ取得を担当します。すべてのデータは標準化されたモデルに変換され、Python SDK、CLI、REST APIの3つのインターフェースから利用可能です。
ディレクトリ構成
OpenBB/
├── openbb_platform/ # プラットフォームコア
│ ├── core/ # コアライブラリ(API、ルーター、プロバイダー管理)
│ ├── extensions/ # 機能拡張モジュール
│ │ ├── commodity/ # 商品先物データ
│ │ ├── crypto/ # 暗号通貨データ
│ │ ├── currency/ # 外国為替データ
│ │ ├── derivatives/ # デリバティブ(オプション、先物)
│ │ ├── economy/ # マクロ経済データ
│ │ ├── equity/ # 株式データ
│ │ ├── etf/ # ETFデータ
│ │ ├── fixedincome/ # 債券データ
│ │ ├── technical/ # テクニカル分析
│ │ └── mcp_server/ # AI/LLM統合サーバー
│ ├── providers/ # データプロバイダー実装
│ │ ├── yfinance/ # Yahoo Finance
│ │ ├── fmp/ # Financial Modeling Prep
│ │ ├── fred/ # FRED(Federal Reserve)
│ │ └── ... # 30+プロバイダー
│ └── obbject_extensions/ # OBBject拡張(チャート等)
├── cli/ # コマンドラインインターフェース
├── examples/ # Jupyterノートブックとサンプルコード
└── frontend-components/ # フロントエンドコンポーネント(Plotly、Tables)
主要コンポーネント
-
OpenBB Core (
openbb_platform/core/): プラットフォームの中核機能- 場所:
openbb_core/app/ - 依存: なし(最下層)
- インターフェース: Router, Provider Interface, Command Runner
- 場所:
-
Router System (
openbb_core/app/router.py): エンドポイント管理- 場所:
openbb_core/app/router.py - 依存: Extension Loader, Provider Interface
- インターフェース: @router.command デコレーター
- 場所:
-
Provider Interface (
openbb_core/provider/): データプロバイダー抽象化- 場所:
openbb_core/provider/ - 依存: Standard Models
- インターフェース: Fetcher基底クラス、Registry
- 場所:
-
Standard Models: 標準化されたデータモデル(200+モデル)
- 場所: 各拡張機能内
- 依存: Pydantic
- インターフェース: BaseModel継承クラス
-
OBBject: 統一的な結果オブジェクト
- 場所:
openbb_core/app/model/ - 依存: Standard Models
- インターフェース: to_df(), to_dict(), charting属性
- 場所:
技術スタック
コア技術
- 言語: Python 3.9.21 - 3.12(型ヒント、async/await、データクラス活用)
- フレームワーク:
- FastAPI(REST APIサーバー)
- Uvicorn(ASGIサーバー)
- Poetry(依存関係管理とビルド)
- 主要ライブラリ:
- pandas (^2.2.0): データ処理と時系列分析
- numpy: 数値計算
- pydantic: データバリデーションとモデル定義
- plotly: インタラクティブチャート
- pandas_ta: テクニカル分析指標
- prompt-toolkit: CLI用のリッチターミナルUI
- httpx/aiohttp: 非同期HTTPクライアント
- PyWry: スタンドアロンチャートウィンドウ
開発・運用ツール
- ビルドツール:
- Poetry(モノレポ構造での依存関係管理)
- Poetry plugins(拡張機能の動的ロード)
- テスト:
- pytest(単体テスト、統合テスト)
- 包括的な統合テストスイート(全エンドポイント)
- プロバイダー別テスト
- CI/CD:
- GitHub Actions(自動テスト、リリース)
- 自動バージョニング
- PyPIへの自動公開
- デプロイ:
- PyPIパッケージ配布
- Dockerイメージ提供
- REST APIのセルフホスティング対応
設計パターン・手法
- ファクトリーパターン: プロバイダーとルーターの動的生成
- 抽象基底クラス: Fetcherクラスによるプロバイダー実装の統一
- デコレーターパターン: @router.commandによるエンドポイント定義
- プラグインアーキテクチャ: Poetry pluginsによる拡張機能の動的ロード
- シングルトンパターン: 設定管理とレジストリ
- 依存性注入: FastAPIの依存性注入システム活用
- アダプターパターン: 各プロバイダーAPIの統一インターフェース化
データフロー・処理フロー
- ユーザーリクエスト: Python/CLI/REST APIからコマンド実行
- ルーティング: Router Systemがコマンドを適切な拡張機能にルーティング
- パラメータ検証: Pydanticモデルによる入力検証
- プロバイダー選択: 指定されたプロバイダーまたはデフォルトプロバイダーを選択
- データ取得: Fetcherクラスがプロバイダー固有のAPIを呼び出し
- データ変換: プロバイダー固有のレスポンスを標準モデルに変換
- 後処理: 必要に応じて追加の計算や変換(テクニカル指標など)
- OBBject生成: 統一的な結果オブジェクトの作成
- レスポンス: DataFrame、JSON、チャートなど要求された形式で返却
API・インターフェース
公開API
Python SDK
- 目的: Pythonからの直接的なデータアクセスと分析
- 使用例:
from openbb import obb
# 株価データ取得
aapl = obb.equity.price.historical("AAPL", start_date="2023-01-01")
# ファンダメンタルデータ
financials = obb.equity.fundamental.income("AAPL", provider="fmp")
# マクロ経済データ
gdp = obb.economy.gdp(countries=["united_states", "japan"])
REST API
- 目的: 言語非依存のHTTPベースアクセス
- エンドポイント例:
# APIサーバー起動
openbb-api
# データ取得
GET http://127.0.0.1:6900/api/v1/equity/price/historical?symbol=AAPL
GET http://127.0.0.1:6900/api/v1/economy/gdp?countries=united_states
# OpenAPI仕様書
GET http://127.0.0.1:6900/openapi.json
CLI
- 目的: ターミナルからのインタラクティブな利用
# CLIの起動
openbb
# コマンド例
/equity/price/historical AAPL --provider yfinance
/economy/gdp --countries united_states japan
設定・カスタマイズ
設定ファイル
# ~/.openbb/user_settings.json
{
"defaults": {
"provider": "yfinance" # デフォルトプロバイダー
},
"credentials": {
"fmp_api_key": "YOUR_API_KEY",
"polygon_api_key": "YOUR_API_KEY"
}
}
# 環境変数での設定も可能
export OPENBB_FMP_API_KEY="YOUR_API_KEY"
拡張・プラグイン開発
カスタムプロバイダーの作成:
# 1. Fetcherクラスを継承
from openbb_core.provider.abstract.fetcher import Fetcher
class MyCustomFetcher(Fetcher):
@staticmethod
def transform_query(params: dict) -> dict:
# クエリパラメータの変換
return params
@staticmethod
async def aextract_data(query: dict) -> dict:
# データの取得
return data
@staticmethod
def transform_data(data: dict) -> StandardModel:
# 標準モデルへの変換
return StandardModel(**data)
カスタム拡張機能の作成:
- Poetry pluginとして実装
- router.pyでエンドポイント定義
- pyproject.tomlでエントリーポイント設定
パフォーマンス・スケーラビリティ
パフォーマンス特性
- レスポンスタイム: プロバイダー依存だが、キャッシュ機能により2回目以降は高速
- 並行処理: 非同期処理対応により複数リクエストを効率的に処理
- メモリ効率: 大規模データセットはストリーミング処理で対応
- 最適化手法:
- HTTP接続プーリング
- 結果キャッシング
- 遅延評価(必要時のみデータ変換)
- pandas最適化(convert_dtypes使用)
スケーラビリティ
- 水平スケーリング: REST APIサーバーの複数インスタンス起動対応
- プロバイダー並列化: 複数プロバイダーからの同時データ取得
- バッチ処理: 複数銘柄の一括取得対応
- レート制限対応: プロバイダー別のレート制限管理
制限事項
- プロバイダー依存: データの品質・速度は各プロバイダーに依存
- APIレート制限: 無料プロバイダーは厳しいレート制限あり
- リアルタイムデータ: ほとんどのプロバイダーは遅延データ(15-20分)
- 履歴データの深さ: プロバイダーとサブスクリプションによって制限
- Python GIL: CPU集約的な処理では制限あり
評価・所感
技術的評価
強み
- 統一的なインターフェースで30以上のデータソースにアクセス可能
- プロバイダー間でのシームレスな切り替えが可能
- 優れたドキュメントとサンプルコード
- 活発なコミュニティと継続的な開発
- オープンソース(AGPLv3)で透明性が高い
- モジュラー設計により必要な機能のみ利用可能
- AI/LLM統合のための先進的なサポート
改善の余地
- AGPLv3ライセンスは商用利用時に制約となる可能性
- リアルタイムデータへのアクセスは限定的
- 一部のプロバイダーはAPIキーが必須
- 大規模なバックテストには別途ツールが必要
向いている用途
- 個人投資家の投資リサーチとデータ分析
- 金融教育・研究目的でのデータ収集
- プロトタイピングと概念実証
- 複数データソースの比較分析
- 自動化された投資レポート生成
- AI/LLMベースの金融アプリケーション開発
向いていない用途
- 高頻度取引(HFT)システム
- ミッションクリティカルな本番環境
- 厳格なコンプライアンス要件がある金融機関
- リアルタイム取引執行システム
総評
OpenBBは「金融データの民主化」という理念を見事に実現したプラットフォームです。統一的なAPIで多数のデータソースにアクセスできる点は革新的で、個人投資家から研究者まで幅広いユーザーに価値を提供しています。特に、標準化されたデータモデルとモジュラーアーキテクチャは技術的に優れており、新しいデータソースの追加も容易です。AI/LLM統合のためのMCPサーバーなど、将来を見据えた機能も評価できます。一方で、AGPLv3ライセンスは商用利用時の課題となり得るため、利用前に十分な検討が必要です。総じて、投資リサーチの入門から中級レベルまでのユーザーには最適なツールと言えるでしょう。