OpenBB-finance/OpenBB

⭐ 46,168 🍴 0 Python📄 AGPLv3 (GNU Affero General Public License v3.0) GitHubで見る →

主な特徴

  • 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での使用例

チュートリアル・ガイド

技術的詳細

アーキテクチャ

全体構造

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の統一インターフェース化

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

  1. ユーザーリクエスト: Python/CLI/REST APIからコマンド実行
  2. ルーティング: Router Systemがコマンドを適切な拡張機能にルーティング
  3. パラメータ検証: Pydanticモデルによる入力検証
  4. プロバイダー選択: 指定されたプロバイダーまたはデフォルトプロバイダーを選択
  5. データ取得: Fetcherクラスがプロバイダー固有のAPIを呼び出し
  6. データ変換: プロバイダー固有のレスポンスを標準モデルに変換
  7. 後処理: 必要に応じて追加の計算や変換(テクニカル指標など)
  8. OBBject生成: 統一的な結果オブジェクトの作成
  9. レスポンス: 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ライセンスは商用利用時の課題となり得るため、利用前に十分な検討が必要です。総じて、投資リサーチの入門から中級レベルまでのユーザーには最適なツールと言えるでしょう。