Bloomberg API(BLPAPI)開発
Desktop API・Server API・B-PIPE の違いを踏まえた接続設計から、本番運用までを請け負います。
概要
Bloomberg の API は BLPAPI(Bloomberg Open API)という共通のプログラミングインタフェースの上に、Desktop API・Server API・B-PIPE・Platform という製品が乗る構成です。公式のコア開発者ガイドは「すべての API 製品は同じプログラミングインタフェースを共有し、ほぼ同一に動作する」と説明しています。
違いが出るのはアプリケーション側の責務です。Desktop API を除くエンタープライズ製品では、データを配信・受信する前に認証・認可・パーミッショニングをアプリケーション側で行う必要があります。ここを設計に織り込まずに Desktop API 前提で作ると、本番のエンタープライズ環境へ移すときに作り直しになります。
技術仕様
公式ドキュメントで確認した内容です。出典はページ末尾に記載しています。仕様は更新されることがあるため、実装前に一次資料をご確認ください。
- 製品
- Desktop API / Server API / B-PIPE / Platform(共通の BLPAPI 上に構築)
- 対応言語
- Java, C/C++, .NET, Perl, Python。Excel 向けに COM Data Control
- 実装形態
- Java・C・.NET はネイティブ実装(.NET は C# ネイティブ)。C++・Python・Perl・COM は C API 上に構築
- 通信パラダイム
- Request/Response と Subscription の 2 種類。サービスごとにどちらを使うかが決まる
- 主なサービス
- //blp/refdata(価格・ヒストリカル・日中バー/ティック)、//blp/mktdata(ストリーミング配信)、//blp/mktvwap、//blp/mktbar、//blp/mktlist、//blp/apiflds、//blp/instruments、//blp/tasvc、//blp/apiauth
- 製品限定のサービス
- //blp/mktdepthdata は B-PIPE のみ。//blp/mktbar は B-PIPE では利用不可
- Session の主な操作
- start / stop / openService / getService / sendRequest / subscribe / resubscribe / unsubscribe
- SDK の配布
- C++ / Java / Python / .NET。公式の API Library で「Supported Releases」として配布される
- Python の要件
- CPython 3.10 以上、かつ C++ SDK が Python SDK と同じメジャー・マイナーバージョンであること
受託の範囲
- 接続方式の選定(Desktop API / Server API / B-PIPE)と、移行を見込んだ抽象化レイヤの設計
- リファレンスデータ取得のバッチ実装(IntradayTickRequest / IntradayBarRequest を含む)
- ストリーミング配信の購読管理と再購読・切断復帰の設計
- エンタープライズ製品での認証・認可・パーミッショニング実装
- 取得データの正規化と、社内のデータ基盤への取り込みパイプライン
実装で詰まりやすい点
Desktop API で作って B-PIPE へ移せない
プログラミングインタフェースは同じでも、エンタープライズ製品では認証・認可・パーミッショニングがアプリケーション側の責務になります。最初から権限判定を差し替え可能な場所に置いておかないと、移行時に取得部分を書き直すことになります。
サービスによって呼び出し方が違う
購読型のサービス(//blp/mktdata、//blp/mktvwap など)では getService を使いません。Request/Response 型と同じ手順で書くと動かない箇所があり、ここは公式ガイドでも注意書きが付いています。
リアルタイムをリファレンスデータで代用しない
リファレンスデータのリクエストにも現在値は含まれますが、公式ガイドはリアルタイムを多用するアプリケーションにはストリーミングのサービスを使うよう明記しています。ポーリングで代用すると負荷と遅延の両方で不利になります。
Python SDK は C++ SDK と版を揃える必要がある
Python の blpapi は単独では動かず、Bloomberg C++ SDK のライブラリを実行時に必要とします。公式リポジトリは「C++ SDK は Python SDK と同じメジャー・マイナーバージョン」を要件として挙げており、これは推奨ではなく必須条件です。インストール時は BLPAPI_ROOT、実行時は Windows なら PATH、Linux なら LD_LIBRARY_PATH に blpapi3 の共有ライブラリを通します。開発機に Terminal が入っていると PATH に既にあるため気づかず、CI やサーバーへ持っていった段階で初めて落ちる、という順序で問題が出ます。
関連する解説記事
参照元
Bloomberg API についてよくあるご質問
Bloomberg Terminal の契約は必要ですか。
接続方式によります。Desktop API は端末上で動作するため Terminal が前提です。サーバー側で無人稼働させる場合や、複数の利用者へ配信する場合は Server API や B-PIPE の検討が必要になります。どの方式が要件に合うかの切り分けからご相談いただけます。
既存の取得処理を作り直さずに移行できますか。
BLPAPI のインタフェースは製品間で共通なので、取得ロジック自体は流用できることが多いです。作り直しが発生しやすいのは認証・認可の部分です。まず現行実装のどこが製品依存になっているかの棚卸しから入るのが確実です。
BLPAPI の SDK はどの言語で提供されていますか。
C++ / Java / Python / .NET の SDK が、Bloomberg 公式の API Library で「Supported Releases」として配布されています。Python は CPython 3.10 以上が必要で、加えて同じメジャー・マイナーバージョンの C++ SDK を実行環境に置く必要があります。開発機と本番でこのバージョンがずれていると、開発中は動いて本番で落ちる形になります。
ローカルでは動くのにサーバーで動きません。
Python から使っている場合、C++ SDK の共有ライブラリ(blpapi3)にパスが通っていない可能性が高いです。開発機に Bloomberg Terminal が入っていると PATH に既に含まれているため気づきません。サーバーでは Windows なら PATH、Linux なら LD_LIBRARY_PATH に明示的に通します。この切り分けを含めた本番移行の支援も承っています。