mcpField
A
alpaca-broker-market-data

alpaca-broker-market-data

github.com/alpacahqデータ・データベース157135 回インストール1 週間前に更新
リポジトリ

alpaca-broker-market-data について

Alpaca の米国株式マーケットデータ API を利用する開発者向けのリファレンススキルです。REST クエリ、WebSocket 配信、認証、フィード権限、ページネーション、キャッシュの要点を扱います。

主な機能

  1. 01株価スナップショット、バー、約定、気配値
  2. 02REST API のホストと認証の説明
  3. 03WebSocket の購読とメッセージ処理
  4. 04フィード権限とページネーションの詳細
  5. 05アセット、市場クロック、カレンダーのエンドポイント
  6. 06キャッシュとレート制限の運用方法

活用シーン

  1. 01米国株式の過去または現在のデータ取得
  2. 02リアルタイムの約定、気配値、バーの受信
  3. 03データ処理のページネーションとキャッシュ設計
  4. 04取引可能状態と市場時間の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alpacahq/alpaca-skills --skill alpaca-broker-market-data

インストール後、Claude Code で/alpaca-broker-market-dataを入力して読み込まれたか確認します。

同梱ファイルreference.md

詳細

Alpaca Market Data API — Stocks (REST + WebSocket)

米国株式のリアルタイムデータと過去データです。Broker エンドポイントとは異なり、マーケットデータは独自のホストと認証方式を使用し、リアルタイムフィードは SSE ではなくWebSocketです。

先に alpaca-broker-integration をお読みください。Assets/clock/calendar はTrading APIホストにあり、それ以外はすべてMarket Data APIホストにあります。

リファレンス

  • ガイド:https://docs.alpaca.markets/docs/historical-stock-data、https://docs.alpaca.markets/docs/streaming-market-data
  • ライブスキーマ:alpaca-docs MCP → list-endpoints タイトル "Market Data API"

0. ホストと認証

サーフェスホスト
Market data RESThttps://data.alpaca.markets(sandbox data.sandbox.alpaca.markets)
Market data WebSocketwss://stream.data.alpaca.markets/{version}/{feed}
Assets/clock/calendarhttps://api.alpaca.markets(Trading API)— paper:paper-api.alpaca.markets

認証: Broker パートナーはクライアント認証情報アクセストークン(POST https://authx.alpaca.markets/v1/oauth2/token — フローは alpaca-broker-integration を参照)で認証します。REST と WS ハンドシェイクでは Authorization: Bearer <token> を送信するか、WS で {"action":"auth","key":"access_token","secret":"<token>"} を使用して認証します(access_token という文字列がキーです)。トークンの有効期間は15 分です。キャッシュして更新し、呼び出しごとに新規発行しないでください。キー/シークレット(APCA-API-* ヘッダー、または WS で {"action":"auth","key":"…","secret":"…"})は Trading API の方式であり、Broker 向けに文書化されているレガシー方式です。

1. REST エンドポイント

パス目的
GET /v2/stocks/snapshots?symbols=… · GET /v2/stocks/{symbol}/snapshotスナップショット(最新の取引/気配値+バー)
GET /v2/stocks/bars?symbols=… · GET /v2/stocks/{symbol}/bars過去の OHLCV バー
GET /v2/stocks/bars/latest · …/{symbol}/bars/latest最新のバー
GET /v2/stocks/trades[/latest] · GET /v2/stocks/quotes[/latest]過去/最新の取引と気配値
GET /v2/stocks/auctions寄り付き/大引けのオークション
GET /v2/stocks/meta/conditions/{trade|quote} · /meta/exchangesコードの照会
GET /v1beta1/news?symbols=…ニュース(limit の最大値は 50)
GET /v1beta1/screener/stocks/most-actives · /screener/{stocks|crypto}/moversスクリーナー
GET /v2/assets (Trading API host) · GET /v1/assets (Broker API host)資産マスター/取引可否
GET /v2/clock · GET /v2/calendar (Trading API host)市場営業時間

Clock/calendar/assets のパスはホストによって異なります — sandbox に対してライブで検証済みです:

パスTrading API ホスト(api.alpaca.markets)Broker API ホスト(broker-api.*)
/v1/clock—200
/v2/clock200200
/v1/calendar—200
/v2/calendar200404
/v1/assets—200
/v2/assets200404

つまり、Trading/Market-Data API ホストでは /v2/clock、/v2/calendar、/v2/assets を使用します。Broker API ホストでは /v1/clock、/v1/calendar、/v1/assets を使用します(このホストでは /v1/clock と /v2/clock のどちらも動作しますが、/v2/calendar と /v2/assets は 404 になります)。Broker API 統合で /v1/clock を呼び出すのは正しい動作であり、古い仕様ではありません。

2. バー — パラメーター

パラメーター備考
timeframe[1-59]Min/T、[1-23]Hour/H、1Day/D、1Week/W、[1,2,3,4,6,12]Month/M。大文字と小文字は区別されます。例:1Min、5Min、1Hour、1Day
start / endRFC3339 または YYYY-MM-DD。指定した日付を含みます
limitデフォルトは 1000、最大 10000 — シンボルごとではなく、全シンボルを通じたデータポイント数です
page_tokenページネーションカーソル(next_page_token から取得)
adjustmentraw(デフォルト)、split、dividend、spin-off、all — カンマ区切りで組み合わせ可能
feed§3 を参照
sortasc(デフォルト) / desc
asofシンボル/名称変更のマッピングに使用する YYYY-MM-DD。- を指定するとマッピングをスキップします

ページネーションに関する注意: 結果はシンボル、次にタイムスタンプの順に並びます。複数シンボルのリクエストが limit に達すると、最初のシンボルのみが返される場合があります。すべて取得するには、next_page_token が空になるまで続けて取得する必要があります。1ページですべてのシンボルが取得できるとは限りません。

3. フィード(利用資格が重要です)

  • iex — 単一取引所(出来高の約2.5%)。有料サブスクリプションなしで利用できる唯一のフィードです。 開発/テストに適しています。
  • sip — 全取引所を統合(出来高の100%)。有料データプランが必要です。
  • delayed_sip — 15分遅延の SIP(最新データ/スナップショットのエンドポイント)。
  • otc、boats(Blue Ocean の夜間 ATS)、overnight(Alpaca 由来で、より低価格)。

注意点:

  • feed=iex を固定しないでください — 最新データ/スナップショットのエンドポイントは、サブスクリプションで利用資格のある最良のフィードをデフォルトで使用します。また、履歴データのエンドポイントは sip をデフォルトで使用しますが、リアルタイムアクセスがない場合は end が15分前に設定されます。そのため、end が15分以上前であれば、サブスクリプションがなくても過去の SIP データをクエリできます。403({"code":42210000,"message":"subscription does not permit querying recent SIP data"})は、利用資格のないデータに対して feed=sip を明示的に指定した場合に発生します。
  • リアルタイムアクセスがない場合、start/end の期間では直近15分間のデータは取得できません。
  • 2025-11-03 時点で、取引/気配値のサイズは株数単位です(それ以前はラウンドロット単位でした)。

4. オブジェクトの形式(簡潔なキー)

シンボルごとのスナップショット:latestTrade、latestQuote、minuteBar、dailyBar、prevDailyBar。複数シンボルのレスポンスは { "AAPL": {…} } のようなマップです。

  • バー: t は時刻、o は始値、h は高値、l は安値、c は終値、v は出来高、n は取引件数、vw は VWAP です。
  • 取引: t は時刻、p は価格、s はサイズ、x は取引所、c は条件、z はテープ、i は ID です。
  • 気配値: bp/bs/bx は買値/サイズ/取引所、ap/as/ax は売値/サイズ/取引所、c は条件、z はテープです。(価格 0 は、有効な買値/売値がないことを示します。)

5. WebSocket プロトコル

URL: wss://stream.data.alpaca.markets/{version}/{feed} — 例:v2/iex、v2/sip、v2/delayed_sip、v1beta1/boats、v1beta1/overnight、または v2/test(常時稼働。シンボル FAKEPACA を使用)。

接続フロー:

  1. 接続 → [{"T":"success","msg":"connected"}]
  2. 10 秒以内に認証: {"action":"auth","key":"…","secret":"…"} → [{"T":"success","msg":"authenticated"}]
  3. 購読:{"action":"subscribe","trades":["AAPL"],"quotes":["AMD"],"bars":["*"]} → サーバーが購読状態全体をエコーします。* = すべてのシンボル。unsubscribe で購読を解除します。

メッセージタイプ(すべてのメッセージは JSON 配列です。T がタイプを示します):t は約定、q は気配値、b は分足、d は日足、u は更新されたバー、s は取引状態(停止/再開)、l は LULD、c は訂正、x はキャンセル/エラー、i は不均衡。制御メッセージ:success、error、subscription。trades を購読すると、corrections と cancelErrors も自動的に追加されます。

WebSocket での注意点:

  • 接続数の上限はアカウントごとに設定され、実行中のすべてのプロセスで共有されます — Broker のプランでは、同時ストリーム数は 5(Standard、StandardPlus3000、StandardPlus5000)または 10(StandardPlus10000)です。上限を超えると → [{"T":"error","code":406,"msg":"connection limit exceeded"}]。ストリームは単一のプロセスに集約し、そこから独自のクライアントに配信してください(ユーザーごとにソケットを開かないでください)。
  • 10 秒以内に認証しないと接続が切断されます(404)。
  • その他のエラーコード:401 認証されていない、402 認証失敗、405 シンボル数の上限超過、407 クライアントの処理速度が遅い、409 購読が不十分(フィードを利用する権限がない)、410 フィードに対して無効なアクション。
  • メッセージはバッチ化されています — 必ず配列を反復処理してください。1 フレーム = 1 イベントと想定しないでください。
  • u(更新されたバー)と c/x(訂正/キャンセル)を処理してください:ストリーミングされたバー/約定は、後から修正される場合があります。

6. 資産、クロック、カレンダー

ホストに適したパスを使用してください(§1 の表を参照):Trading API ホストでは /v2/...、Broker API ホストでは /v1/... を使用します。

  • 資産(Trading ホストの GET /v2/assets・Broker ホストの GET /v1/assets および /v1/assets/{symbol})— 取引可能性に関するメタデータ:tradable、fractionable、marginable、shortable、borrow_status(非推奨の easy_to_borrow に代わるもの)、status(active/inactive)、class(us_equity/us_option/crypto/ipo)、exchange、attributes[](例:has_options、overnight_tradable)。Broker の /v1/assets は status、asset_class、attributes で絞り込めますが、exchange フィルターはありません。Trading の /v2/assets では exchange も指定できます。この情報はキャッシュしてください — 変更頻度が低いためです。取引前に照会し、tradable/fractionable を確認してください(alpaca-broker-trading-orders を参照)。
  • クロック(Trading ホストの /v2/clock・Broker ホストの /v1/clock)— is_open、next_open、next_close、timestamp。9:30~16:00 ET をハードコードするのではなく、これを使って市場時間に関する処理を制御してください。
  • カレンダー(Trading ホストの /v2/calendar・Broker ホストの /v1/calendar — Broker ホストには /v2/calendar がない点に注意してください)— 日ごとの open/close(HH:MM)、session_open/session_close(延長取引時間、HHMM)、settlement_date。祝日の判定にはカレンダーを使用してください — 単純に「平日のみ」とするチェックでは、市場の休場日にジョブが実行され(問題はありませんが無駄です)、「直近の取引日」の計算も誤ります。

7. キャッシュ戦略(コストとレート制限から学んだこと)

マーケットデータは、最もデータ量が多く、コストも高い領域です。本番環境で得られた教訓:

  1. 過去のバーを (symbol, timeframe, timestamp) をキーとして独自のストアに保存し、upsert/重複スキップを行って、そこからチャートを提供します。Alpaca から取得するのは不足分だけにします。
  2. スナップショット/気配値を 短い TTL のキャッシュに保存します(TTL は市場の開場中か閉場中かに応じて調整します)。
  3. ユーザーリクエストごとに取得するのではなく、検索可能な銘柄を対象とする一括バックフィルジョブをスケジュールに従って 1 つ実行します。
  4. 常に next_page_token に従い、X-RateLimit-Remaining を監視します(alpaca-broker-rate-limits-resilience を参照)。

関連スキル: 注文前の取引可能性確認 → alpaca-broker-trading-orders;レート制限/ページネーション → alpaca-broker-rate-limits-resilience;ブローカーのイベントストリーム(SSE。この WS とは別のもの) → alpaca-broker-sse-events。

コメント