Covered Pair Arbitrage (CPA)

Math-edge strategy — buy both sides below $1 total, redeem for $1 on-chain

What It Is

CPA buys both the YES and NO tokens of the same binary market when their combined ask price is below $1. Since every Polymarket binary market resolves to exactly $1 total, holding both tokens guarantees a $1 payout regardless of outcome. The profit is the gap between what you paid and $1.

This is a pure arbitrage: no directional bet, no market view required. The edge exists when combined ask prices are inefficient — typically in lower-volume markets where the bid-ask spread is wider.

When It Fires

AntFlow monitors 10,000+ Polymarket markets via a live order book WebSocket. CPA fires when all of the following are true:

  • YES ask + NO ask ≤ max_pair_cost_usd — combined cost is below your threshold
  • Market has ≥ $10k 24h trading volume
  • No other CPA pair is currently executing (one pair at a time)
  • Strategy is not paused and daily loss cap is not hit

Both legs are submitted simultaneously as Fill-or-Kill orders. If both fill, the pair is complete and queued for on-chain redemption. If one leg rejects, the filled leg is held as a one-sided position until manually recovered or exited.

Setup

  1. Go to Automation and enable Covered Pair Arb.
  2. Set max_pair_cost_usd — the sum-asks gate (default 0.90, range 0.50–1.00).

    0.90 is the research-validated setpoint from a 180-day backtest across 4,500 markets.

    Lower (0.85–0.89) → rarer opportunities, higher edge per pair.

    Higher (0.91–0.99) → more frequent activity, smaller margin per trade.

  3. Set target_shares_per_leg — shares to buy per leg (default 25). Actual cost depends on current ask prices.
  4. Confirm your wallet has enough pUSD to cover both legs.
  5. Optionally start in simulation mode to observe behavior before committing capital.
  6. Disable dry-run in Settings to go live.

Tip

The research found that markets with $10k–$50k 24h volume are the most productive for CPA — 40% hit rate vs 16% for larger markets. The default scanner minimum of $10k is intentional.

Risk Controls

CPA auto-pauses when any of these conditions are met:

  • Consecutive pair rejections exceed the configured threshold
  • Daily loss cap hit
  • Total strategy exposure limit reached
  • Fill anomaly detected — partial-leg accumulation above threshold
  • Order fill rate drops below the minimum threshold
  • 3 auto-pause events in 24h — hard cap, requires manual resume

After a pause, CPA auto-resumes after a configurable cooldown unless the 3-event hard cap was hit. If the funnel widget shows paused, check Logs → Risk Events for the trigger reason.

Reading the Funnel

The CPA funnel widget on the Dashboard shows the pipeline in real time:

StageWhat it means
UNIVERSEAll markets passing the $10k volume + open status filter (~15 min refresh)
WATCHLISTMarkets with a chance of hitting the threshold based on recent book snapshots (~60s refresh)
HOTMarkets subscribed via live WebSocket — real-time book updates trigger preflight checks
ATTEMPTSPairs submitted to the CLOB in the last 24h
FILLSCompleted pairs where both FOK orders filled

Tip

In a healthy idle state, the top rejection reason is preflight_sum_asks_above_max — market is fully priced, gate is correctly set below the floor. If book_updates shows 0 for more than 90 seconds, the WebSocket feed has dropped — check Logs → Workers.

Backtest note

In historical backtests, every completed CPA pair was profitable — the math guarantees it when both legs fill below $1 total. Live execution risk is partial-leg failure: if one FOK order fills and the other does not, you hold a one-sided position until recovery. See FAQ — What is a partial leg?