Home

/

Library

/

opportunities/same-same.md

Same-same

Same-same

Tl;dr

Cross-venue NBA game markets on Polymarket and Kalshi and generate GO signals when a paired YES/NO position locks a positive edge after fees and execution constraints. Success requires reliable schedule coverage, accurate team/market mappings, timely price polling with escalation, and a simulation path to validate fees and slippage before live execution.

Success criteria checklist (template)

✅ Market exists: Found market: <EVENT_OR_MARKET_ID>
✅ Market is active: Status: <status>
✅ Market not closed: Closes: <ISO_8601>
✅ Valid side: Side: <yes|no>
✅ Order size >= 1 contract(s): Size: <n> contract(s)
✅ Order notional >= $1.00: Order value: <$n.nn> (min: $1.00)
✅ Price in valid range (0-100¢): Price: <n>¢
✅ Market has reasonable spread (<50¢): Spread: <n>¢ (Bid: <n>¢, Ask: <n>¢)
❌ Market has real liquidity (not placeholder prices): Bid: <n>¢, Ask: <n>¢ - appears to be placeholder prices
❌ Price is fillable (>= bid: <n>¢): Your price: <n>¢
✅ Sufficient account balance: Balance: <$n.nn>, Cost: <$n.nn>

Opportunity definition

  • Instruments: NBA game winner markets on Polymarket (binary) and Kalshi (binary). We pair a YES on one venue with a NO on the other.
  • Edge: total cost of paired legs + fees below $1.00 (100 cents), with fillability and liquidity checks.
  • Output: GO/NO-GO signal per game + venue pair with justification and expected edge.

Inputs and data sources

  • NBA schedule: nba-2025-PacificStandardTime.csv (current baseline).
  • Polymarket: market metadata and CLOB top-of-book prices (source to be confirmed).
  • Kalshi: market list and quotes (source to be confirmed).

Schedule ingest

  • Lookahead window: default 48 hours (configurable).
  • Flow: read all games within the window, then derive candidate market identifiers/URLs for each venue.
  • Uncertain timing: game time alignment rules are still open; must account for venue-specific market close times.

Mapping table (teams)

Store a mapping table to align team identifiers across venues and internal references.

Fields:

  • internal_slug (example: nba-la-lakers)
  • common_name (example: L.A. Lakers)
  • polymarket_team_id
  • polymarket_team_name
  • kalshi_team_id
  • kalshi_team_name
  • source_name (where the mapping was obtained)
  • source_key (identifier from the source)
  • last_verified_at

Market matching (game level)

  • Build a canonical game id from schedule: date, home_team, away_team.
  • Generate candidate venue markets using team mapping and venue naming patterns.
  • Keep a one-to-many view until we can confirm the true venue market id for the game.

Pricing and polling

  • Baseline polling: every 60 seconds for all candidate games.
  • Escalation: switch to 10-second polling after volume threshold is met (configurable).
  • Persist every snapshot to the DB with venue, market id, bid/ask, size, and timestamp.

GO signal logic (draft)

  • Pair legs: example Poly YES (Team A) + Kalshi NO (Team A).
  • Compute edge_cents = 100 - (poly_leg_cost + kalshi_leg_cost + fees_cents).
  • Require:
    • market exists and active
    • market not closed
    • valid side
    • size and notional minimums
    • price in valid range
    • spread below threshold
    • real liquidity (not placeholder prices)
    • price is fillable
    • account balance sufficient
  • If all pass and edge_cents >= min_edge_cents, emit GO.

Simulator

  • Run the same signal logic with configurable inputs:
    • fees by venue
    • min order size and notional
    • slippage model
    • rate limits and polling cadence
    • fill probability threshold

Open questions

  • How to normalize market close times relative to scheduled tipoff.
  • The canonical source for schedule (CSV is placeholder vs. future API feed).
  • Polymarket and Kalshi naming conventions for NBA markets (slug/ticker patterns).
  • Venue fee models and minimums for NBA markets.

Implementation references

  • app/agents/ (existing opportunity work; review for compatible patterns)
  • docs/opportunities/time-alignment-approx.md (format reference)