OpenBB-finance/OpenBB

⭐ 45,074 🍴 0 Python📄 AGPL-3.0 (GNU Affero General Public License v3.0) GitHubで見る →

主な特徴

  • 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"
)

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • 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を使用した並列データ取得

データフロー・処理フロー

  1. ユーザーリクエスト(Python API or REST API)
  2. パラメータバリデーション(Pydantic)
  3. 適切なプロバイダーの選択
  4. データ取得(同期/非同期)
  5. データ標準化(Standard Models)
  6. レスポンス生成(OBBject)
  7. 出力形式変換(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

設定・カスタマイズ

設定ファイル

// ~/.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"
  }
}

拡張・プラグイン開発

カスタムプロバイダーの作成:

  1. Provider基底クラスを継承
  2. Fetcherクラスでデータ取得ロジック実装
  3. 標準モデルへのマッピング定義
  4. プロバイダーレジストリへの登録

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • 非同期処理による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も提供されており、今後の発展が期待される。