alpaca-broker-market-data について
Alpaca の米国株式マーケットデータ API を利用する開発者向けのリファレンススキルです。REST クエリ、WebSocket 配信、認証、フィード権限、ページネーション、キャッシュの要点を扱います。
主な機能
- 01株価スナップショット、バー、約定、気配値
- 02REST API のホストと認証の説明
- 03WebSocket の購読とメッセージ処理
- 04フィード権限とページネーションの詳細
- 05アセット、市場クロック、カレンダーのエンドポイント
- 06キャッシュとレート制限の運用方法
活用シーン
- 01米国株式の過去または現在のデータ取得
- 02リアルタイムの約定、気配値、バーの受信
- 03データ処理のページネーションとキャッシュ設計
- 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-docsMCP →list-endpointsタイトル"Market Data API"
0. ホストと認証
| サーフェス | ホスト |
|---|---|
| Market data REST | https://data.alpaca.markets(sandbox data.sandbox.alpaca.markets) |
| Market data WebSocket | wss://stream.data.alpaca.markets/{version}/{feed} |
| Assets/clock/calendar | https://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/clock200 200 /v1/calendar— 200 /v2/calendar200 404 /v1/assets— 200 /v2/assets200 404 つまり、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 / end | RFC3339 または YYYY-MM-DD。指定した日付を含みます |
limit | デフォルトは 1000、最大 10000 — シンボルごとではなく、全シンボルを通じたデータポイント数です |
page_token | ページネーションカーソル(next_page_token から取得) |
adjustment | raw(デフォルト)、split、dividend、spin-off、all — カンマ区切りで組み合わせ可能 |
feed | §3 を参照 |
sort | asc(デフォルト) / 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 を使用)。
接続フロー:
- 接続 →
[{"T":"success","msg":"connected"}] - 10 秒以内に認証:
{"action":"auth","key":"…","secret":"…"}→[{"T":"success","msg":"authenticated"}] - 購読:
{"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. キャッシュ戦略(コストとレート制限から学んだこと)
マーケットデータは、最もデータ量が多く、コストも高い領域です。本番環境で得られた教訓:
- 過去のバーを
(symbol, timeframe, timestamp)をキーとして独自のストアに保存し、upsert/重複スキップを行って、そこからチャートを提供します。Alpaca から取得するのは不足分だけにします。 - スナップショット/気配値を 短い TTL のキャッシュに保存します(TTL は市場の開場中か閉場中かに応じて調整します)。
- ユーザーリクエストごとに取得するのではなく、検索可能な銘柄を対象とする一括バックフィルジョブをスケジュールに従って 1 つ実行します。
- 常に
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。