mcpField
K
kalshi

kalshi

github.com/outsharpその他465 回インストール32 週間前に更新
リポジトリ

kalshi について

Kalshi APIは、予測市場取引所Kalshiとの連携向けリファレンススキルです。公開市場データと認証が必要な取引・ポートフォリオAPIを扱い、署名、ページネーション、SDKの情報もまとめています。

主な機能

  1. 01市場、イベント、オーダーブックの参照
  2. 02認証が必要な注文・ポートフォリオへのアクセス
  3. 03WebSocketとREST APIのガイド
  4. 04RSA-PSSによるリクエスト署名
  5. 05公式Python・TypeScript SDKの利用

活用シーン

  1. 01市場データ連携の構築
  2. 02注文の作成と管理
  3. 03ポジション、約定、決済の追跡
  4. 04過去の市場データAPIの確認

インストール

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

$npx skills add https://github.com/outsharp/shipp-skills --skill kalshi

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

同梱ファイルREADME.md

詳細

Kalshi API

Kalshi は、CFTC の規制を受ける予測市場取引所で、ユーザーは現実世界の出来事の結果を取引できます。

このスキルと公式ドキュメントを 頻繁に 確認してください。すべてのドキュメントを網羅した正規の機械可読インデックスは、次の場所にあります。

https://docs.kalshi.com/llms.txt

構築を始める前に、必ず llms.txt を参照して、利用可能なすべてのページを確認してください。エンドポイントのリファレンス、SDK ドキュメント、WebSocket チャネル、FIX プロトコルの詳細、スタートガイドについては、ここが唯一の信頼できる情報源です。


主な概念(用語集)

用語定義
マーケット単一の二者択一の結果を扱う契約(Yes/No)で、価格はセント単位(1~99¢)です。
イベント現実世界で起こる事象(選挙、気象観測値など)を表す、関連するマーケットの集合です。
シリーズ同じ構成とルールを共有する、繰り返し発生するイベントのテンプレートです(例:「NYC の日次最高気温」)。
オーダーブック買い注文のみを扱います。二者択一のマーケットでは、X¢の YES 買い注文は(100−X)¢の NO 売り注文と同等です。
約定自分の注文の一つにマッチした取引です。
決済判定後に行われる、マーケットの最終的な結果確定(Yes または No)です。
多変量イベント多変量イベントコレクションから動的に作成されるコンボイベントです。

用語集全体:https://docs.kalshi.com/getting_started/terms.md


ベース URL

環境REST APIWebSocket
本番環境https://api.elections.kalshi.com/trade-api/v2wss://api.elections.kalshi.com/trade-api/ws/v2
デモ環境https://demo-api.kalshi.co/trade-api/v2wss://demo-api.kalshi.co/trade-api/ws/v2

注: elections サブドメインですが、本番 URL は経済、天気、テクノロジー、エンターテインメントなど、Kalshi のすべてのマーケットを提供します。

デモ環境の情報:https://docs.kalshi.com/getting_started/demo_env.md


ドキュメントとリファレンス

詳細な例、リクエスト/レスポンスのスキーマ、手順ガイドはすべて公式ドキュメントに記載されています。構築を始める前に、必ずこれらを参照してください。

リソースURL
ドキュメント全体のインデックス(llms.txt)https://docs.kalshi.com/llms.txt
はじめにhttps://docs.kalshi.com/welcome/index.md
最初のリクエストを送信するhttps://docs.kalshi.com/getting_started/making_your_first_request.md
クイックスタート:マーケットデータhttps://docs.kalshi.com/getting_started/quick_start_market_data.md
クイックスタート:認証済みリクエストhttps://docs.kalshi.com/getting_started/quick_start_authenticated_requests.md
クイックスタート:最初の注文を作成するhttps://docs.kalshi.com/getting_started/quick_start_create_order.md
クイックスタート:WebSocketshttps://docs.kalshi.com/getting_started/quick_start_websockets.md
API キーガイドhttps://docs.kalshi.com/getting_started/api_keys.md
レート制限とティアhttps://docs.kalshi.com/getting_started/rate_limits.md
ページネーションhttps://docs.kalshi.com/getting_started/pagination.md
オーダーブックのレスポンスhttps://docs.kalshi.com/getting_started/orderbook_responses.md
過去データhttps://docs.kalshi.com/getting_started/historical_data.md
1 セント未満の価格設定https://docs.kalshi.com/getting_started/subpenny_pricing.md
固定小数点コントラクトhttps://docs.kalshi.com/getting_started/fixed_point_contracts.md
OpenAPI 仕様(YAML)https://docs.kalshi.com/openapi.yaml
API 変更履歴https://docs.kalshi.com/changelog/index.md
Kalshi プラットフォームhttps://kalshi.com
デモプラットフォームhttps://demo.kalshi.co

認証

Kalshi では、Bearer トークンではなく、RSA-PSS 署名付きリクエストを使用します。認証が必要なリクエストには、次の 3 つのヘッダーが必要です。

ヘッダー値
KALSHI-ACCESS-KEYAPI キー ID
KALSHI-ACCESS-TIMESTAMP現在の Unix タイムスタンプ(ミリ秒単位)
KALSHI-ACCESS-SIGNATURE{timestamp}{METHOD}{path} の RSA-PSS 署名を Base64 エンコードした値

重要: 署名する際は、クエリパラメーターを含まないパスを使用してください。たとえば、リクエスト URL が /trade-api/v2/portfolio/orders?limit=5 でも、/trade-api/v2/portfolio/orders に署名します。

API キーの生成
  1. ログイン → アカウント設定 → API キーセクションに移動します。
  2. 「Create New API Key」をクリックして RSA キーペアを生成します。
  3. 秘密鍵はすぐに保管してください。 再取得できません。

詳しいガイド:https://docs.kalshi.com/getting_started/api_keys.md

Python の署名例
import base64, datetime, requests
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding

def load_private_key(file_path):
    with open(file_path, "rb") as f:
        return serialization.load_pem_private_key(f.read(), password=None)

def sign_pss(private_key, text: str) -> str:
    sig = private_key.sign(
        text.encode("utf-8"),
        padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.DIGEST_LENGTH),
        hashes.SHA256(),
    )
    return base64.b64encode(sig).decode("utf-8")

def kalshi_headers(key_id, private_key, method, path):
    ts = str(int(datetime.datetime.now().timestamp() * 1000))
    path_no_qs = path.split("?")[0]
    sig = sign_pss(private_key, ts + method + path_no_qs)
    return {
        "KALSHI-ACCESS-KEY": key_id,
        "KALSHI-ACCESS-SIGNATURE": sig,
        "KALSHI-ACCESS-TIMESTAMP": ts,
    }
JavaScript の署名例
const crypto = require("crypto");
const fs = require("fs");

function signPss(privateKeyPem, text) {
  const sign = crypto.createSign("RSA-SHA256");
  sign.update(text);
  sign.end();
  return sign.sign({
    key: privateKeyPem,
    padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
    saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST,
  }).toString("base64");
}

function kalshiHeaders(keyId, privateKeyPem, method, path) {
  const ts = Date.now().toString();
  const pathNoQs = path.split("?")[0];
  const sig = signPss(privateKeyPem, ts + method + pathNoQs);
  return {
    "KALSHI-ACCESS-KEY": keyId,
    "KALSHI-ACCESS-SIGNATURE": sig,
    "KALSHI-ACCESS-TIMESTAMP": ts,
  };
}

SDK

Kalshi は公式 SDK を提供しています。本番環境との統合には、こちらの利用を推奨します。

SDKインストールドキュメント
Python(同期)pip install kalshi_python_synchttps://docs.kalshi.com/sdks/python/quickstart.md
Python(非同期)pip install kalshi_python_asynchttps://docs.kalshi.com/sdks/python/quickstart.md
TypeScriptnpm install kalshi-typescripthttps://docs.kalshi.com/sdks/typescript/quickstart.md

旧 kalshi-python パッケージは非推奨です。kalshi_python_sync または kalshi_python_async に移行してください。

SDK の概要:https://docs.kalshi.com/sdks/overview.md

本番アプリケーションでは、OpenAPI 仕様から独自のクライアントを生成することも検討してください。


レート制限

ティア読み取り書き込み
Basic20/s10/s
Advanced30/s30/s
Premier100/s100/s
Prime400/s400/s

書き込みが制限されるエンドポイント:CreateOrder、CancelOrder、AmendOrder、DecreaseOrder、BatchCreateOrders、BatchCancelOrders。バッチ API では各項目が 1 トランザクションとしてカウントされます(ただし、BatchCancelOrders ではキャンセル 1 件につき 0.2 トランザクションです)。

詳しくは、https://docs.kalshi.com/getting_started/rate_limits.md をご覧ください。


ページネーション

API ではカーソルベースのページネーションを使用します。レスポンスには cursor フィールドが含まれます。次のリクエストでは、これを ?cursor={value} として渡してください。カーソルが空または null の場合、続きのページはありません。デフォルトのページサイズは 100 です(通常、最大 1000)。

詳しいガイド:https://docs.kalshi.com/getting_started/pagination.md


REST API エンドポイントの概要

以下に、ドメイン別に整理した概要を示します。リクエスト/レスポンスのスキーマ全体については、リンク先のドキュメントを参照するか、https://docs.kalshi.com/llms.txt をご覧ください。

マーケット
エンドポイントメソッド認証説明
/marketsGET不要フィルター(ステータス、シリーズ、タイムスタンプ)を指定してマーケットを一覧表示します。ドキュメント:マーケットの取得
/markets/{ticker}GET不要ティッカーを指定して単一のマーケットを取得します。ドキュメント:マーケットの取得
/markets/{ticker}/orderbookGET不要現在のオーダーブック(Yes の買い注文+No の買い注文)を取得します。ドキュメント:マーケットのオーダーブックの取得
/markets/{ticker}/candlesticksGET不要ローソク足データ(1m、1h、1d)を取得します。ドキュメント:マーケットのローソク足の取得
/markets/candlesticksPOST不要最大 100 個のティッカーについて、ローソク足データを一括取得します。ドキュメント:マーケットのローソク足の一括取得
/markets/tradesGET不要すべての公開取引を取得します。ドキュメント:取引の取得
/series/{ticker}GET不要シリーズを取得します。ドキュメント:シリーズの取得
/seriesGET不要シリーズを一覧表示します。ドキュメント:シリーズ一覧の取得
イベント
エンドポイントメソッド認証説明
/eventsGETNoイベントを一覧表示します(多変量イベントを除く)。ドキュメント:イベントの取得
/events/{ticker}GETNo単一のイベントを取得します。ドキュメント:イベントの取得
/events/{ticker}/metadataGETNoイベントのメタデータのみを取得します。ドキュメント:イベントメタデータの取得
/events/{ticker}/candlesticksGETNoイベントの集計ローソク足データを取得します。ドキュメント:イベントのローソク足データの取得
/events/{ticker}/forecast/percentile_historyGETNo予測パーセンタイルの履歴を取得します。ドキュメント:イベント予測パーセンタイル履歴の取得
/events/multivariateGETNo多変量イベントを一覧表示します。ドキュメント:多変量イベントの取得
注文(認証必須)
エンドポイントメソッド認証説明
/portfolio/ordersPOSTYes注文を作成します。ドキュメント:注文の作成
/portfolio/ordersGETYes注文(未約定/キャンセル済み/約定済み)を一覧表示します。ドキュメント:注文の取得
/portfolio/orders/{order_id}GETYes単一の注文を取得します。ドキュメント:注文の取得
/portfolio/orders/{order_id}DELETEYes注文をキャンセルします。ドキュメント:注文のキャンセル
/portfolio/orders/{order_id}/amendPOSTYes価格/数量を変更します。ドキュメント:注文の変更
/portfolio/orders/{order_id}/decreasePOSTYes契約数を減らします。ドキュメント:注文数量の削減
/portfolio/orders/{order_id}/queue_positionGETYesキュー内の順位を取得します。ドキュメント:注文のキュー順位の取得
/portfolio/orders/queue_positionsGETYesすべての未約定注文のキュー内順位を取得します。ドキュメント:注文のキュー順位一覧の取得
/portfolio/orders/batchedPOSTYes注文を一括作成します(最大20件)。ドキュメント:注文の一括作成
/portfolio/orders/batchedDELETEYes注文を一括キャンセルします(最大20件)。ドキュメント:注文の一括キャンセル
ポートフォリオ(認証必須)
エンドポイントメソッド認証説明
/portfolio/balanceGETYes口座残高(セント)を取得します。ドキュメント:残高の取得
/portfolio/positionsGETYes市場ポジションを取得します。ドキュメント:ポジションの取得
/portfolio/fillsGETYes約定履歴を取得します。ドキュメント:約定履歴の取得
/portfolio/settlementsGETYes清算履歴を取得します。ドキュメント:清算履歴の取得
/portfolio/resting_order_valueGETYes未約定注文の合計金額(FCM)を取得します。ドキュメント:未約定注文の合計金額の取得
サブアカウント(認証済み)
エンドポイントメソッド認証説明
/portfolio/subaccountsPOSTYesサブアカウントを作成します(最大32件)。ドキュメント:サブアカウントの作成
/portfolio/subaccounts/balancesGETYesすべてのサブアカウントの残高です。ドキュメント:すべてのサブアカウント残高の取得
/portfolio/subaccounts/transfersGETYesサブアカウントの振替履歴です。ドキュメント:サブアカウントの振替履歴の取得
/portfolio/subaccounts/transferPOSTYesサブアカウント間で振り替えます。ドキュメント:サブアカウント間の振替
注文グループ(認証済み)

注文グループには、15秒間のローリング契約数制限が適用されます。制限に達すると、グループ内のすべての注文が自動的にキャンセルされます。

エンドポイントメソッド認証説明
/portfolio/order_groupsPOSTYesグループを作成します。ドキュメント:注文グループの作成
/portfolio/order_groupsGETYesグループの一覧を取得します。ドキュメント:注文グループの取得
/portfolio/order_groups/{id}GETYesグループを取得します。ドキュメント:注文グループの取得
/portfolio/order_groups/{id}DELETEYesグループを削除します。ドキュメント:注文グループの削除
/portfolio/order_groups/{id}/resetPOSTYesカウンターをリセットします。ドキュメント:注文グループのリセット
/portfolio/order_groups/{id}/triggerPOSTYes手動でトリガーします。ドキュメント:注文グループのトリガー
/portfolio/order_groups/{id}/limitPUTYes制限を更新します。ドキュメント:注文グループの制限の更新
通信/RFQ(認証済み)
エンドポイントメソッド認証説明
/communications/idGETYes自分の通信 ID を取得します。ドキュメント:通信 ID の取得
/rfqsPOSTYesRFQ を作成します(未完了は最大100件)。ドキュメント:RFQ の作成
/rfqsGETYesRFQ の一覧を取得します。ドキュメント:RFQ の取得
/rfqs/{id}GETYesRFQ を取得します。ドキュメント:RFQ の取得
/rfqs/{id}DELETEYesRFQ を削除します。ドキュメント:RFQ の削除
/quotesPOSTYes見積もりを作成します。ドキュメント:見積もりの作成
/quotesGETYes見積もりの一覧を取得します。ドキュメント:見積もりの取得
/quotes/{id}GETYes見積もりを取得します。ドキュメント:見積もりの取得
/quotes/{id}DELETEYes見積もりを削除します。ドキュメント:見積もりの削除
/quotes/{id}/acceptPOSTYes見積もりを受け入れます。ドキュメント:見積もりの受け入れ
/quotes/{id}/confirmPOSTYes見積もりを確定します。ドキュメント:見積もりの確定
過去のデータ(認証が必要)

過去のデータは、カットオフ時刻を過ぎたアーカイブ済みの市場、注文、約定に関するものです。

エンドポイントメソッド認証説明
/historical/cutoff_timestampsGETYesカットオフ境界です。ドキュメント:過去のカットオフ時刻を取得
/historical/marketsGETYesアーカイブ済みの市場です。ドキュメント:過去の市場を取得
/historical/markets/{ticker}GETYes単一のアーカイブ済み市場です。ドキュメント:過去の市場を取得
/historical/markets/{ticker}/candlesticksGETYesアーカイブ済みのローソク足データです。ドキュメント:過去の市場のローソク足データを取得
/historical/fillsGETYesアーカイブ済みの約定です。ドキュメント:過去の約定を取得
/historical/ordersGETYesアーカイブ済みの注文です。ドキュメント:過去の注文を取得

過去のデータに関するガイド:https://docs.kalshi.com/getting_started/historical_data.md

多変量コレクション
エンドポイントメソッド認証説明
/multivariate/collectionsGETNoコレクションの一覧です。ドキュメント:多変量イベントコレクションを取得
/multivariate/collections/{ticker}GETNoコレクションを取得します。ドキュメント:多変量イベントコレクションを取得
/multivariate/collections/{ticker}/marketsPOSTYesコレクションに市場を作成します。ドキュメント:多変量イベントコレクションに市場を作成
/multivariate/collections/{ticker}/lookupGETNoティッカーを検索します。ドキュメント:多変量イベントコレクション内の市場のティッカーを検索
/multivariate/collections/{ticker}/lookup_historyGETNo最近の検索履歴です。ドキュメント:多変量イベントコレクションの検索履歴を取得
マイルストーンと構造化ターゲット
エンドポイントメソッド認証説明
/milestonesGETNoマイルストーンの一覧です。ドキュメント:マイルストーンを取得
/milestones/{id}GETNoマイルストーンを取得します。ドキュメント:マイルストーンを取得
/structured_targetsGETNo構造化ターゲットの一覧です。ドキュメント:構造化ターゲットを取得
/structured_targets/{id}GETNo構造化ターゲットを取得します。ドキュメント:構造化ターゲットを取得
ライブデータ
エンドポイントメソッド認証説明
/live_data/{milestone_id}GETNoマイルストーンのライブデータです。ドキュメント:ライブデータを取得
/live_dataGETNo複数のマイルストーンのライブデータです。ドキュメント:複数のライブデータを取得
検索と検出
エンドポイントメソッド認証説明
/search/sports/filtersGETNoスポーツのフィルター。ドキュメント:Get Filters for Sports
/search/tagsGETNoカテゴリ別のタグ。ドキュメント:Get Tags for Series Categories
取引所とアカウント
エンドポイントメソッド認証説明
/exchange/statusGETNo取引所のステータス。ドキュメント:Get Exchange Status
/exchange/scheduleGETNo取引所のスケジュール。ドキュメント:Get Exchange Schedule
/exchange/announcementsGETNoお知らせ。ドキュメント:Get Exchange Announcements
/exchange/data_timestampGETYesデータの鮮度を示すタイムスタンプ。ドキュメント:Get User Data Timestamp
/exchange/series_fee_changesGETNo手数料の変更。ドキュメント:Get Series Fee Changes
/account/api_limitsGETYesご利用のレート制限ティア。ドキュメント:Get Account API Limits
/account/api_keysGETYesAPI キーの一覧。ドキュメント:Get API Keys
/account/api_keysPOSTYesAPI キーの作成。ドキュメント:Create API Key
/account/api_keys/generatePOSTYesキーペアの生成。ドキュメント:Get API Keys
/account/api_keys/{id}DELETEYesAPI キーの削除。ドキュメント:Delete API Key
インセンティブプログラム
エンドポイントメソッド認証説明
/incentivesGETNoインセンティブの一覧。ドキュメント:Get Incentives

WebSocket API

認証済みの WebSocket 接続を 1 つ確立すると、リアルタイムのストリーミングを利用できます。JSON コマンドを送信してチャネルを購読します。

接続
wss://api.elections.kalshi.com/trade-api/ws/v2      (production)
wss://demo-api.kalshi.co/trade-api/ws/v2            (demo)

認証ヘッダー(KALSHI-ACCESS-KEY、KALSHI-ACCESS-SIGNATURE、KALSHI-ACCESS-TIMESTAMP)は、ハンドシェイク時に含める必要があります。文字列 {timestamp}GET/trade-api/ws/v2 に署名してください。

利用可能なチャンネル
チャンネル認証が必要説明ドキュメント
tickerいいえ*市場価格/出来高/OI の更新マーケットティッカー
tradeいいえ*公開取引の通知公開取引
market_lifecycle_v2いいえ*市場/イベントの状態変更市場とイベントのライフサイクル
multivariateいいえ*多変量検索の通知多変量検索
orderbook_deltaはいリアルタイムのオーダーブック更新オーダーブックの更新
fillはい自分の約定通知ユーザーの約定
orderはい自分の注文の更新ユーザーの注文
market_positionsはい自分のポジションの更新市場ポジション
communicationsはいRFQ/見積もりの通知通信
order_group_updatesはい注文グループのライフサイクル注文グループの更新

*公開チャンネルでも、接続自体には常に認証が必要です。

購読コマンド
{
  "id": 1,
  "cmd": "subscribe",
  "params": {
    "channels": ["ticker", "orderbook_delta"],
    "market_tickers": ["KXHIGHNY-24JAN01-T60"]
  }
}
キープアライブ

Kalshi は 10 秒ごとに、本文が heartbeat の Ping フレームを送信します。クライアントは Pong フレームで応答する必要があります。ドキュメント:接続のキープアライブ

WebSocket の完全ガイド:https://docs.kalshi.com/getting_started/quick_start_websockets.md


オーダーブックの構造

Kalshi のオーダーブックが返すのは買い注文のみです(売り注文はありません)。二値市場では、次のようになります。

  • X¢の YES 買い注文 = (100−X)¢の NO 売り注文
  • Y¢の NO 買い注文 = (100−Y)¢の YES 売り注文

各エントリは [価格, 数量] で、昇順に並んでいます。最良買い注文は最後の要素です。

スプレッドの計算:

  • 最良 YES 売り注文 = 100 - 最良のno買い注文
  • スプレッド = 最良 YES 売り注文 − 最良 YES 買い注文

完全ガイド:https://docs.kalshi.com/getting_started/orderbook_responses.md


FIX プロトコル

Kalshi は、低遅延取引向けに Financial Information eXchange(FIX)プロトコルもサポートしています。

トピックドキュメント
概要https://docs.kalshi.com/fix/index.md
接続https://docs.kalshi.com/fix/connectivity.md
セッション管理https://docs.kalshi.com/fix/session-management.md
注文入力https://docs.kalshi.com/fix/order-entry.md
注文グループhttps://docs.kalshi.com/fix/order-groups.md
ドロップコピーhttps://docs.kalshi.com/fix/drop-copy.md
市場決済https://docs.kalshi.com/fix/market-settlement.md
RFQ メッセージhttps://docs.kalshi.com/fix/rfq-messages.md
エラー処理https://docs.kalshi.com/fix/error-handling.md
サブペニー価格設定https://docs.kalshi.com/fix/subpenny-pricing.md

よくあるパターン

シリーズのすべてのオープン市場を取得する
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?series_ticker=KXHIGHNY&status=open" | jq '.markets[] | {ticker, title, yes_price, volume}'
市場のオーダーブックを取得する
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets/KXHIGHNY-24JAN01-T60/orderbook" | jq '.orderbook'
すべての結果をページネーションで取得する
# First page
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?limit=100" > page1.json
# Extract cursor for next page
CURSOR=$(jq -r '.cursor' page1.json)
# Next page
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?limit=100&cursor=$CURSOR" > page2.json

使用上のヒント

  • 最初に必ず llms.txt を確認してください: https://docs.kalshi.com/llms.txt には、すべてのエンドポイントとガイドが掲載されています。
  • テストにはデモ環境を使用してください。認証情報は本番環境とは別です。
  • API キーをハードコードしないでください。 環境変数または安全なキー保管を使用してください。
  • 価格の単位はセントです(1~99)。WebSocket のポジションチャネルにおける金額の単位はセントの百分の一です(ドルに換算するには10,000で割ります)。
  • クエリパラメーターを含めずにパスに署名してください。 署名する前に、? 以降をすべて削除してください。
  • ページネーションを処理してください。 cursor が null でないことを必ず確認し、すべてのデータを取得するまでループしてください。
  • レート制限を守ってください。 429 レスポンスに対して指数バックオフを実装してください。
  • REST と WebSocket を組み合わせると、最も正確な状態を把握できます。 初期スナップショットには REST を、リアルタイムの差分には WebSocket を使用してください。
  • オーダーブックに含まれるのは買い注文のみです。 100−価格の補数から売り注文を算出してください。
  • 過去データとライブデータ: カットオフタイムスタンプを確認し、ライブエンドポイントと履歴エンドポイントのどちらに問い合わせるかを判断してください。
  • 市場ステータスの値には、unopened、open、closed、settled を使用してください。
  • 一括操作は、項目ごとに毎秒の書き込み制限にカウントされます。

エラー処理

標準的な HTTP エラーコードが適用されます。API は、説明的なメッセージを含む JSON エラーボディを返します。429(レート制限)および 5xx(サーバーエラー)に対して、バックオフ付きの再試行を実装してください。

WebSocket エラーコード
コード意味
1メッセージを処理できません
2パラメーターが必要です
3チャネルが必要です
5不明なコマンドです
8不明なチャネル名です
9認証が必要です
14市場ティッカーが必要です
16市場が見つかりません
17内部エラーです
18コマンドがタイムアウトしました

エラーコードの一覧:https://docs.kalshi.com/getting_started/quick_start_websockets.md


プロジェクト例:Alph Bot

Alph Bot は、Kalshi API と、リアルタイムのスポーツデータを提供する Shipp、確率推定を行う Claude AI を連携させた、本番環境品質の統合を実証するオープンソースの自動取引ボットです。

Alph Bot による Kalshi の利用方法
  1. 市場の検出 — ライブのスポーツ試合に関連する Kalshi のイベント契約(例:NBA の点差、合計得点)を検索します。
  2. オーダーブックの読み取り — オーダーブックのデータを取得し、現在の市場が示唆する確率を特定します(セント単位の価格は、そのまま確率の%に対応します)。
  3. 優位性の検出 — Kalshi の市場価格と、Claude と Shipp のリアルタイム試合データを活用して AI が推定した確率を比較します。
  4. 注文の執行 — 十分な優位性が見つかった場合、ケリー基準を用いてポジションサイズを決定し、指値注文を行います。
  5. リスク管理 — サーキットブレーカー(1日の最大損失)、ポジションサイズの上限、単一市場へのエクスポージャー上限、最低口座残高のしきい値を適用します。
Alph Bot の Kalshi 設定

.env.example より:

ALPH_BOT_KALSHI_API_KEY_ID=abc123
ALPH_BOT_KALSHI_PRIVATE_KEY_PATH=./keys/kalshi-private.pem

# Strategy
ALPH_BOT_MIN_EDGE_PCT=5
ALPH_BOT_MIN_CONFIDENCE=medium
ALPH_BOT_KELLY_FRACTION=0.25

# Risk controls
ALPH_BOT_MAX_TOTAL_EXPOSURE_USD=10000
ALPH_BOT_MAX_POSITION_SIZE_USD=1000
ALPH_BOT_MAX_SINGLE_MARKET_PERCENT=20
ALPH_BOT_MAX_DAILY_LOSS_USD=500
ALPH_BOT_MAX_DAILY_TRADES=50
ALPH_BOT_MIN_ACCOUNT_BALANCE_USD=100
試してみる
git clone https://gitlab.com/outsharp/shipp/alph-bot.git
cd alph-bot
cp .env.example .env
# Add your Kalshi, Shipp, and Anthropic API keys

yarn migrate

# Find a game to trade on
./index.ts available-games --sport NBA

# Run value betting in demo mode (uses Kalshi demo environment)
./index.ts value-bet -d --game <GAME_ID>

# Run in paper mode (no real orders executed)
./index.ts value-bet --paper --game <GAME_ID>

警告: デモ/ペーパーモード以外で Kalshi を利用して取引すると、実際のお金が関わります。必ずデモ口座から始めてください。

設定手順の詳細は、Alph Bot の READMEをご覧ください。


バージョン管理

現在の API バージョンは、/trade-api/v2 配下の v2 です。更新情報はAPI 変更履歴でご確認ください。SDK のバージョンはOpenAPI 仕様に準拠しており、通常は毎週公開されます。

コメント