markets について
markets は、ESPN の日程と予測市場データをつなぐ sports-skills のワークフローです。市場の検索、取引所間の価格比較、特定イベントの評価に利用できます。
主な機能
- 01当日の市場と日程の表示
- 02チームや対象別の市場検索
- 03イベントのオッズと価格比較
- 04Kalshi と Polymarket の市場照合
- 05価格の正規化と市場評価
活用シーン
- 01今日の NBA 試合と市場価格の確認
- 02特定試合の取引所間オッズ比較
- 03同じ試合の両取引所での検索
- 04市場価格から含意確率への換算
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ machina-sports/ sports-skills --skill marketsインストール後、Claude Code で/marketsを入力して読み込まれたか確認します。
同梱ファイルreferences/api-reference.md
詳細
市場オーケストレーション
ESPN のライブスケジュール(NBA、NFL、MLB、NHL、WNBA、CFB、CBB)を Kalshi および Polymarket の予測市場と連携します。クエリを記述する前に、サポートされているスポーツコード、コマンドのパラメーター、価格の正規化形式について、references/api-reference.md を参照してください。
クイックスタート
sports-skills markets get_todays_markets --sport=nba
sports-skills markets search_entity --query="Lakers" --sport=nba
sports-skills markets compare_odds --sport=nba --event_id=401234567
sports-skills markets compare_market_url --url=https://polymarket.com/event/nfl-sf-sea-2026-10-11
sports-skills markets get_sport_markets --sport=nfl
sports-skills markets get_sport_schedule --sport=nba
sports-skills markets normalize_price --price=0.65 --source=polymarket
sports-skills markets evaluate_market --sport=nba --event_id=401234567 --fee_per_contract=<verified fee>
sports-skills markets match_markets --sport=mlb --date=2026-06-06
sports-skills markets get_market_price --venue=kalshi --ticker=KXMENWORLDCUP-26-FR
sports-skills markets get_price_history --venue=kalshi --ticker=KXMENWORLDCUP-26-FR --interval=1d
Python SDK:
from sports_skills import markets
markets.get_todays_markets(sport="nba")
markets.search_entity(query="Lakers", sport="nba")
markets.compare_odds(sport="nba", event_id="401234567")
markets.compare_market_url(url="https://kalshi.com/markets/kxnflgame/sf-vs-sea/kxnflgame-26oct11sfsea")
markets.get_sport_markets(sport="nfl")
markets.get_sport_schedule(sport="nba", date="2025-02-26")
markets.normalize_price(price=0.65, source="polymarket")
markets.evaluate_market(sport="nba", event_id="401234567", fee_per_contract=fee) # fee: verified (user-stated or documented venue fee)
markets.match_markets(sport="mlb", date="2026-06-06")
markets.get_market_price(venue="kalshi", ticker="KXMENWORLDCUP-26-FR", at_time="2026-05-01T12:00:00+00:00")
markets.get_price_history(venue="polymarket", token_id="<token_id>", interval="1h")
重要:クエリを実行する前に
重要:オーケストレーションコマンドを呼び出す前に、次の点を確認してください。
- スポーツに対応するコマンド(
get_todays_markets、compare_odds、get_sport_markets、evaluate_market)には、sportコードが指定されていること。 - 正規化の前に価格ソースが正しく識別されていること:
espn= アメリカンオッズ、polymarket/novig/gemini= 0~1 の確率、kalshi= 0~100 の整数。
重要な注意事項
- スポーツのコンテキストは引き継がれます。
--sport=nbaは、適切な Polymarket のスポーツコードおよび Kalshi のシリーズティッカーに自動的に対応付けられます。 - コマンドによって対応する取引所が異なります。
get_todays_markets、search_entity、compare_oddsは、対応している場合、Kalshi、Polymarket、ProphetX、Novig、Gemini を含みます。Gemini の検索では、スポーツを指定しないか、nba、wnba、nfl、cfb、mlb、nhl、epl、laliga、mls、ligamx、ufc、f1、golfを指定できます。日次ダッシュボードには、対応する ESPN のスコアボードスポーツ(nba、wnba、nfl、cfb、mlb、nhl)の Gemini が含まれます。**他のスポーツについては決済の同等性が確認されるまで、Gemini との比較は NBA のみです。**これらのスポーツでは、sourcesに Gemini は含まれません。対応していないスポーツの検索では、リクエストを送信せず Gemini をスキップします。normalize_priceはgemini(0~1 の確率)を受け付けます。get_sport_markets、match_markets、evaluate_marketが使用するのは Kalshi と Polymarket のみです。compare_market_url、get_market_price、get_price_historyは Gemini に対応していません。 - スポーツに対応した検索。 Polymarket は
sportをseries_idに対応付けます。Kalshi は、そのスポーツに対応付けられたすべてのシリーズ(試合の勝者、ハンディキャップ、合計、先物)を検索します。 - 価格は正規化されます。 比較のため、すべての値が含意確率に変換されます。
- 検索結果は検証済みではありません。 生の市場リスト(
*_markets、get_sport_markets、search_entity)は検索結果であり、特定の試合の契約と同等であることが確認されたものではありません。同一性が確認されるのは、compare_oddsのside_prices(およびevaluate_market)のみです。
ワークフロー
本日の NBA ダッシュボード
sports-skills markets get_todays_markets --sport=nba
各試合について、ESPN の情報、DraftKings のオッズ、および一致する Kalshi、Polymarket、ProphetX、Novig、Gemini(gemini_markets)の市場を返します。Gemini のダッシュボード検索は NBA、WNBA、NFL、CFB、MLB、NHL に対応していますが、各検索結果が同一の契約であることは検証しません。
特定の試合でアービトラージを見つける
- ESPN のイベント ID を取得します:
get_sport_schedule --sport=nba - オッズを比較します:
compare_odds --sport=nba --event_id=<id> - アービトラージが検出された場合、レスポンスには配分率と ROI が含まれます。これは参照価格(
price_basis: "reference")に基づいて計算されるため、取引する前に各会場のオーダーブックで両方の賭けを確認してください。 sourcesとcompletenessには、実際にこの試合の価格を提示した会場が示されます。プロバイダーのエラーは「マーケットなし」ではなく、errorとして報告されます。- 価格を直接比較するには、
side_prices.home/side_prices.awayを参照してください。それぞれに、この試合の全試合マネーラインとして認められたquotes(venue、implied_probability、price_basis: "reference"、execution_guaranteed: false)と、lowest_reference(そのサイドの価格提示がない場合はnull。同率の場合は最初に記載された会場を採用)が含まれます。最安の参照価格は執行可能な価格提示ではなく、手数料調整もされていません。また、賭けの推奨でもありません。比較が完了したと判断する前に、warningsとcompleteness.completeを確認してください。 - 検索対象の会場は、Kalshi、Polymarket、ProphetX、Novig です。Novig が対象に含まれるのは、イベントの日付が一致し、全試合の
MONEYマーケットに双方向のオーダーブックがある場合のみです。価格は算出されたアスク(1 − 最良の反対サイドのビッド)で、キャッシュされたスナップショットです。カタログにのみ存在するマーケット、スプレッド、期間マーケットはnovig_marketsに表示されますが、サイドの価格には反映されません。search_entityとget_todays_marketsにも、同じ結果を含むnovigセクションがあります。 - Gemini(nba のみ)が対象に含まれるのは、リーグが一致し、
startTimeが ESPN の開始時刻と一致する、アクティブな全試合マネーライン(moneyline/contest/full_contest)がちょうど 1 つあり、さらにサイドが ESPN のチームと一致する、アクティブでオープンな非コンボのコントラクトがちょうど 2 つあり、両方の買い YES 価格が (0, 1) の範囲内にある場合のみです。その価格は、キャッシュされた公開スナップショットから取得した買い YES 価格です。これは参照価格であり、執行可能な価格提示ではありません。また、出来高は流動性を示すものではありません。子マーケット(スプレッド、合計、プロップ、期間)、コンボ、三者間マーケット、クローズ済み/決済済みのコントラクト、価格の欠落や形式不正、異なる開始時刻、候補の重複は理由とともにsources.gemini.detailで拒否されます。それらもgemini_marketsには表示されます。Gemini のエラーはerrorです。部分スキャン(後続ページの取得失敗、またはスキャンの打ち切り)はsources.gemini.warningsに記載されます。
貼り付けたマーケットリンクを比較する
compare_market_url
compare_market_url --url=<link>。対応するリンクは、nfl、nba、mlb、nhl、wnba、cfb、cbb の単一試合を対象とするhttps://polymarket.com/event/<event-slug>[/<market-slug>]およびhttps://kalshi.com/markets/<series>/<slug>/<event-ticker>です(www.も使用できます)。- リンク先は取得されません。ホスト名が完全一致する必要があります。認証情報、ポート、フラグメント、エンコードされたパスセグメントや特殊なパスセグメント、未知のクエリキーは、呼び出し前に拒否されます(
utm_*とその他のクリック追跡キーのみ無視されます)。 - 会場 API は、オープンな全試合の双方向マネーライン(Polymarket)、またはオープンな試合勝者コントラクト 2 つ(Kalshi)を正確に 1 つ解決します。クローズ済み、マネーライン以外、三者間、または曖昧なソースは拒否されます。また、別のスラッグ/ティッカーを示すプロバイダーの応答も拒否されます。
- ソースの日付の前後 1 日分を対象とする ESPN のスコアボードから、チームと日付が一致する試合が正確に 1 つ見つかる必要があります。ダブルヘッダーと複数の一致は拒否されます。スコアボードの取得失敗は「試合なし」ではなく、失敗として報告されます。
compare_oddsのペイロード(side_prices、sources、warnings、…)を変更せずに返し、さらにsource_market(会場、正規化されたurl、イベント/マーケット ID、espn_event_id、in_downstream_search)を含めます。比較時の会場検索にソースコントラクトが見つからない場合は警告が表示され、価格は推測されません。- これは同じ試合のマネーラインを比較するものです。各会場で同じ条件で決済されることを意味するものではなく、執行も保証されません。現時点では Novig、ProphetX、Gemini のリンクは受け付けていませんが、
compare_oddsで検索される場合、これらの会場は比較結果に表示されます。
すべての賭けの評価
evaluate_market --sport=nba --event_id=<id> --outcome=0 --fee_per_contract=<dollars per $1 contract>- 対象の市場が、選択した側のこの試合の全試合勝者市場であることを確認し、注文板から売り気配値を読み取ります。
- 売り気配値と手数料を
betting.evaluate_betに渡します:確率のデビギング → エッジ → ケリー - 公正確率、エッジ、期待値、ケリー比率、推奨を返します。
fee_per_contract が指定されていない場合、売り気配値は報告されますが、手数料なしとは仮定できないため、evaluation は null になります。別のチーム、別の日付、またはデリバティブ(前半戦、ハンディキャップ)の市場を示すティッカーや token_id が渡された場合、代わりの市場は選ばず、処理を拒否します。手数料は CLI(--fee_per_contract=<dollars>)または Python ラッパー経由で渡してください。手数料は明示的に確認された前提である必要があります。ユーザーが明示したもの、または会場が公式に公開している手数料体系を使用し、その場合はどちらかを明記してください。0 を黙って仮定してはいけません。手数料を確認できない場合、evaluation は null のままです。
両方の会場での同一試合
match_markets --sport=mlb --date=2026-06-06- 各試合の組み合わせでは、同じ試合に対応する Kalshi のイベント(市場ティッカーを含む)と Polymarket のイベント(マネーラインのトークン ID を含む)を対応付けます。日付とチームコードで決定的に照合し、フォールバックとしてあいまいなタイトル照合を行います。
kalshi.market_tickers[i]とpolymarket.markets[i].token_ids[j]をそのままget_market_priceに渡して、価格を比較します。
時間経過に伴う価格変動
get_market_price --venue=kalshi --ticker=<ticker> --at_time=2026-05-01で、特定時点の価格(両方のyes/no側、0~1)を取得します。get_price_history --venue=kalshi --ticker=<ticker> --interval=1dで全期間の価格系列を取得します。どちらの会場でも、同じ{timestamp, price}形式です。
使用例
例 1:本日の試合と予測市場のオッズ ユーザーの発言:「今日のNBAの試合と、予測市場のオッズを教えてください」 操作:
get_todays_markets(sport="nba")を呼び出します 結果:各試合のESPN情報とKalshi/Polymarket/ProphetX/Novig/Geminiの市場をまとめたダッシュボードが表示されます
例 2:プラットフォーム横断のチーム検索 ユーザーの発言:「KalshiとPolymarketでLakersの市場を探してください」 操作:
search_entity(query="Lakers", sport="nba")を呼び出します 結果:Kalshi、Polymarket、ProphetX、Novig、GeminiでのLakersの検索結果が表示されます(検索結果のみ。同一の契約であることは確認されていません)
例 3:特定の試合のオッズ比較 ユーザーの発言:「このCelticsの試合のオッズをESPNとPolymarketで比較してください」 操作:
get_sport_schedule(sport="nba")からevent_idを取得しますcompare_odds(sport="nba", event_id="<id>")を呼び出します 結果:各サイドのside_prices(採用された参照気配値とlowest_reference)および参照価格に基づく裁定取引の確認結果が表示されます
例 4:市場の完全な評価 ユーザーの発言:「Chiefsの試合に優位性はありますか?」 操作:
get_sport_schedule(sport="nfl")からevent_idを取得します- 確認済みの手数料(ユーザーが提示したもの、または会場が公開している手数料)を確定してから、
evaluate_market(sport="nfl", event_id="<id>", fee_per_contract=<verified fee>)を呼び出します 結果:公正確率、優位性の割合、EV、ケリー比率、賭けの推奨が表示されます。手数料が確認できない場合は、実行可能な売り気配値が報告され、evaluationはnullになります。
例 5:スポーツの全市場を閲覧 ユーザーの発言:「NFLの予測市場をすべて表示してください」 操作:
get_sport_markets(sport="nfl")を呼び出します 結果:KalshiとPolymarketのすべてのオープン中のNFL市場が表示されます
例 6:価格の換算 ユーザーの発言:「Polymarketの65セントの価格をアメリカンオッズに換算してください」 操作:
normalize_price(price=0.65, source="polymarket")を呼び出します 結果:インプライド確率(0.65)、アメリカンオッズ(-185.7)、小数オッズ(1.54)を含む共通の形式で表示されます
例 7:会場間で試合を対応付ける ユーザーの発言:「Metsの試合をKalshiとPolymarketの両方で探してください」 操作:
match_markets(sport="mlb", date="<game date>")を呼び出します 結果:会場間で対応付けられた試合が表示されます。Kalshiの市場ティッカーとPolymarketのマネーラインのトークンIDが並べて表示されます
例 8:過去の価格 ユーザーの発言:「1か月前のフランスのワールドカップ価格はいくらでしたか?」 操作:
get_market_price(venue="kalshi", ticker="KXMENWORLDCUP-26-FR", at_time="2026-05-03T12:00:00+00:00")を呼び出します 結果:その時点のYes/No価格(0~1)が表示されます。価格推移全体を確認するにはget_price_historyを使用します
存在しないコマンド — 絶対に呼び出さないでください
— 存在しません。ソース間のオッズを確認するにはget_oddscompare_oddsを使用してください。— marketsモジュールには存在しません。代わりにsearch_marketssearch_entityを使用してください。— 存在しません。代わりにget_scheduleget_sport_scheduleを使用してください。
コマンドがreferences/api-reference.mdまたはこのファイルのワークフロー(例:compare_market_url)に記載されていない場合、そのコマンドは存在しません。
トラブルシューティング
エラー:スポーツの市場が返されない
原因:スポーツコードが指定されていないか、正しくない可能性があります
解決方法:有効なスポーツコードはreferences/api-reference.mdで確認してください。正確なコードを使用してください(例:nba、epl、laliga)
エラー:compare_oddsがイベントのデータを返さない
原因:event_idが正しくないか、試合がまだインデックスに登録されていません
解決方法:まずget_sport_schedule(sport=...)を呼び出して、正しいevent_idを取得してください
エラー:応答に1つのソースの警告が表示される 原因:KalshiまたはPolymarketが一時的に利用できません 解決方法:このモジュールは部分的な結果を返します。利用可能なデータを使用してください。利用できないソースについては、kalshiまたはpolymarketのスキルを直接使用して再試行してください
エラー:normalize_priceが予期しないアメリカンオッズ値を返す
原因:sourceパラメーターが正しくありません。Kalshiは0~100の整数、Polymarketは0~1の小数を使用します
解決方法:ソースを確認してください。Kalshiの価格65にはsource="kalshi"、Polymarketの価格0.65にはsource="polymarket"が必要です