Case Study 2: Closing the Gap — Profiting from Stale Markets

Overview

This case study examines the closing-the-gap strategy in practice: systematically scanning a large universe of binary prediction markets, identifying those where the price has not converged to its likely terminal value, and executing small-edge trades across many contracts. We simulate this process across 100 markets, analyze the results, and draw conclusions about when this strategy works, when it fails, and how to size it appropriately.

The Strategy

Core Thesis

Binary prediction markets must settle at 0 or 1. As the resolution date approaches, markets where the outcome has become clear should see their prices converge to the correct terminal value. However, many markets suffer from low attention: few active traders, infrequent trading, and prices that lag behind reality. A systematic trader who scans for these opportunities can earn small but consistent profits by "closing the gap" --- buying cheap YES contracts in markets that are almost certainly going to resolve YES, or buying cheap NO contracts in markets almost certainly going to resolve NO.

Selection Criteria

We screen for markets meeting the following criteria:

  1. Time to expiry: 1-14 days
  2. Price extremity: Price above 0.80 or below 0.20 (indicating a likely outcome)
  3. Staleness indicators: - Last trade more than 12 hours ago, OR - Fewer than 20 active traders, OR - 24-hour volume below 50 contracts
  4. Minimum edge: 3 cents after transaction costs (2 cents per contract)

The 100-Market Universe

We simulate 100 binary markets with the following parameter distributions:

Time to expiry: Uniform between 1 and 14 days

True probability: Generated from a mixture distribution: - 40% of markets have true probability drawn from Beta(10, 1) --- likely YES (mean 0.91) - 40% of markets have true probability drawn from Beta(1, 10) --- likely NO (mean 0.09) - 20% of markets have true probability drawn from Beta(2, 2) --- uncertain (mean 0.50)

Market price: True probability plus noise: - $p_{\text{market}} = q + \epsilon$, where $\epsilon \sim N(0, \sigma)$ - $\sigma$ depends on staleness: stale markets have $\sigma = 0.08$; active markets have $\sigma = 0.03$ - Clipped to [0.01, 0.99]

Staleness: 50% of markets are classified as stale; 50% are active


Simulation Results

Market Scan Summary

Of the 100 simulated markets:

Category Count Description
Total markets scanned 100 Full universe
Passed staleness filter 50 Stale markets only
Passed price extremity filter 38 Price > 0.80 or < 0.20
Passed minimum edge filter 27 Net edge > 3 cents
Selected for trading 27 Meet all criteria

The 27 Selected Trades

Below is a representative sample of 10 of the 27 selected trades (full list in the code output):

Market True Prob Market Price Direction Edge Days to Expiry Edge/Day Staleness
M-003 0.96 0.87 BUY YES 0.07 3 0.023 0.82
M-011 0.04 0.14 BUY NO 0.08 5 0.016 0.71
M-017 0.93 0.84 BUY YES 0.07 2 0.035 0.90
M-024 0.08 0.19 BUY NO 0.09 7 0.013 0.65
M-029 0.97 0.89 BUY YES 0.06 4 0.015 0.78
M-038 0.91 0.82 BUY YES 0.07 1 0.070 0.95
M-045 0.05 0.16 BUY NO 0.09 6 0.015 0.73
M-061 0.94 0.85 BUY YES 0.07 3 0.023 0.80
M-078 0.03 0.13 BUY NO 0.08 2 0.040 0.88
M-092 0.98 0.90 BUY YES 0.06 1 0.060 0.92

Position Sizing

With a $10,000 bankroll and a 3% per-position limit: - Maximum capital per trade: $300 - At an average entry price of ~$0.85 for YES trades and ~$0.15 for NO trades: approximately 350 contracts per YES trade and 2000 contracts per NO trade - For consistency, we standardize at 200 contracts per trade regardless of direction

Resolution Outcomes

Of the 27 trades:

Outcome Count Description
Correctly resolved (win) 24 Outcome matched our prediction
Incorrectly resolved (loss) 3 Outcome went against our prediction

Winning trades (24): - Average edge captured: 7.2 cents per contract - Average profit per trade: 200 x $0.072 = $14.40 - Total winning profit: $345.60

Losing trades (3): - Losses on the three incorrect trades: - M-024: True prob was 0.08, but market resolved YES. Bought NO at $0.81. Loss: 200 x $0.81 = -$162.00 - M-045: True prob was 0.05, but market resolved YES. Bought NO at $0.84. Loss: 200 x $0.84 = -$168.00 - M-061: True prob was 0.94, but market resolved NO. Bought YES at $0.85. Loss: 200 x $0.85 = -$170.00 - Total losing loss: -$500.00

Portfolio-Level Results

Metric Value
Total trades 27
Winning trades 24 (88.9%)
Losing trades 3 (11.1%)
Gross profit (wins) +$345.60
Gross loss (losses) -$500.00
Transaction costs 27 trades x 200 contracts x $0.02 x 2 sides = -$216.00
Net P&L -$370.40
Net return -3.70%

The Negative Result

Despite an 88.9% win rate, the strategy lost money. This is the defining challenge of the closing-the-gap approach: the losses are much larger than the wins.

  • Average win: +$14.40
  • Average loss: -$166.67
  • Loss-to-win ratio: 11.6x

For the strategy to break even, the win rate must exceed:

$$\text{Breakeven win rate} = \frac{\text{Avg Loss}}{\text{Avg Loss} + \text{Avg Win}} = \frac{166.67}{166.67 + 14.40} = 92.0\%$$

Our 88.9% win rate fell short of the 92.0% breakeven threshold.


What Went Wrong (and How to Fix It)

Problem 1: Insufficient Edge Relative to Risk

The average edge of 7.2 cents looks attractive until you consider the risk: when wrong, losses are 80-90 cents per contract. The edge-to-risk ratio is approximately 0.08, meaning you need to be right more than 92% of the time to break even.

Fix: Only take trades where the edge exceeds 10 cents (raising the minimum edge threshold) or where the true probability is extremely high (>0.97 for YES, <0.03 for NO). This reduces the number of trades but improves the win rate.

Problem 2: Transaction Costs Are Significant

Transaction costs of $216 consumed most of the gross profit on winning trades. At 2 cents per contract per trade, the round-trip cost of 4 cents per contract eats more than half the average 7.2-cent edge.

Fix: Use platforms with lower transaction costs, or negotiate fee discounts for volume. Alternatively, use limit orders to avoid paying the full spread.

Problem 3: Tail Risk Was Underestimated

Three of 27 trades lost, against an expected loss rate of ~8% (based on the average true probability of 0.92). This is roughly in line with expectations, but the impact was devastating because of the asymmetric payoff.

Fix: Diversify across more markets (100+ trades) to reduce the variance of the loss count. With 100 trades, the law of large numbers provides better approximation to the expected loss rate. Alternatively, cap maximum exposure per trade to limit the impact of any single loss.


Improved Strategy: Version 2

We re-run the simulation with tighter criteria:

Parameter Version 1 Version 2
Minimum edge 3 cents 8 cents
Min true probability 0.80/0.20 0.95/0.05
Transaction cost 2 cents 1 cent (limit orders)
Contracts per trade 200 100 (smaller size)
Min staleness score 0.50 0.70

Version 2 Results

Metric Version 2
Markets selected 14 (stricter criteria)
Winning trades 14 (100%)
Losing trades 0
Average edge 9.8 cents
Gross profit 14 x 100 x $0.098 = +$137.20
Transaction costs 14 x 100 x $0.01 x 2 = -$28.00
Net P&L +$109.20
Net return +1.09%
Annualized (if repeated monthly) ~13.1%

Version 2 was profitable, but with only 14 trades, the 100% win rate is partly due to luck. Over many iterations, we would expect 1-2 losses per cycle. The key improvement was:

  1. Stricter true probability threshold (0.95 vs. 0.80): Dramatically improved win rate
  2. Lower transaction costs (limit orders): Preserved more of the edge
  3. Smaller position sizes (100 vs. 200 contracts): Reduced loss impact

Monte Carlo Analysis: 1,000 Iterations

To understand the strategy's true distribution of outcomes, we run 1,000 iterations of the Version 2 strategy, each time generating a new set of 100 markets.

Distribution of Outcomes

Percentile Net P&L Return
5th -$285.00 -2.85%
25th +$42.00 +0.42%
50th (median) +$98.00 +0.98%
75th +$155.00 +1.55%
95th +$210.00 +2.10%
Mean +$91.40 +0.91%

Key Statistics

Metric Value
Probability of profit 72.3%
Probability of loss > 2% 8.1%
Probability of loss > 5% 1.2%
Average win rate per iteration 95.8%
Average number of trades per iteration 13.2
Maximum single-iteration loss -$520.00 (-5.2%)
Maximum single-iteration gain +$285.00 (+2.85%)

Interpretation

The Monte Carlo analysis reveals that Version 2:

  • Is profitable about 72% of the time in any given cycle
  • Has a positive expected value (+0.91% per cycle)
  • Carries meaningful tail risk: 8% chance of losing more than 2% in a single cycle
  • The worst-case scenarios involve multiple simultaneous losses, which occur rarely (1.2% chance of losing more than 5%)

If run monthly over a year, the expected annual return is approximately 10.9% with a standard deviation of 6.8%, yielding a Sharpe ratio of approximately 1.6 --- attractive for a mechanical strategy.


Risk Analysis: The Correlated Loss Scenario

The most dangerous scenario for a closing-the-gap trader is correlated losses. If a single event causes multiple markets to resolve against expectations, the losses compound.

Example scenario: A prediction market platform has 10 markets related to a single election. You have closing-the-gap positions in 5 of them, all betting on Candidate A to win various states. An unexpected national swing causes Candidate A to lose all 5 states simultaneously. Your losses are:

$$\text{Total loss} = 5 \times 100 \times 0.85 = -\$425.00$$

This single-event cluster loss could wipe out months of accumulated small gains.

Mitigation strategies:

  1. Category diversification. Spread positions across unrelated categories: politics, sports, economics, entertainment. A political surprise does not affect a sports market.

  2. Correlation limits. Never hold more than 3 positions in the same event category or correlated market cluster.

  3. Aggregate risk caps. Cap total capital deployed in closing-the-gap positions at 20% of the bankroll. Even if all positions lose, the maximum loss is 20%.

  4. Hedging. For correlated positions, consider offsetting positions that profit if the correlated event occurs.


When Closing the Gap Works Best

Based on our analysis, the closing-the-gap strategy thrives under these conditions:

Favorable Conditions

  1. Low transaction costs. The strategy's edges are small (5-10 cents). Transaction costs must be minimal (ideally under 1 cent per contract) for the math to work.

  2. Large market universe. With only 10-20 candidate markets, one loss can destroy months of gains. With 100+ candidates and stringent selection criteria, the law of large numbers takes effect.

  3. Diverse markets. Uncorrelated markets prevent catastrophic cluster losses. A platform with markets across politics, sports, economics, weather, and entertainment is ideal.

  4. Extremely high confidence threshold. Only trade when the true probability exceeds 0.95 (or falls below 0.05). The win rate must be high enough to overcome the payoff asymmetry.

  5. Short time to expiry. Markets within 1-3 days of resolution have the most predictable outcomes. Longer time horizons introduce more uncertainty.

Unfavorable Conditions

  1. High-fee platforms. If round-trip costs exceed 3 cents per contract, the strategy is almost certainly unprofitable.

  2. Concentrated markets. A platform with only political or only sports markets lacks the diversification needed to survive cluster losses.

  3. Efficient markets. On platforms with many active traders, stale markets are rare. The strategy depends on finding neglected contracts that professional traders have overlooked.

  4. Ambiguous resolution criteria. Markets where the resolution criteria are vague create additional risk that the outcome may be disputed, even when the event itself seems certain.


Practical Implementation Guide

Step 1: Daily Scan Routine

Each day, scan all markets approaching expiry (within 14 days):

FOR each market in universe:
    IF time_to_expiry < 14 days AND (price > 0.85 OR price < 0.15):
        Calculate staleness score
        IF staleness > 0.70:
            Estimate true probability (using external data)
            Calculate edge after costs
            IF edge > 0.08:
                ADD to opportunity list

Step 2: Prioritize by Edge per Day

Rank all opportunities by edge per day (edge divided by days to expiry). Focus on the highest edge-per-day opportunities first, as these provide the best return on committed capital.

Step 3: Diversification Check

Before executing, verify that the new position does not create excessive concentration: - No more than 3 positions in the same category - No more than 20% of bankroll in closing-the-gap positions total - No single position exceeds 2% of bankroll

Step 4: Execute with Limit Orders

Use limit orders at or slightly better than the current market price. Avoid market orders, which pay the full spread. Patience in execution preserves 1-2 cents per contract.

Step 5: Monitor for Resolution

Track each position daily. If new information arrives that changes the expected outcome, reassess and exit if necessary. Do not hold a position out of stubbornness if the thesis has been invalidated.


Summary of Findings

Finding Detail
Win rate required for profitability >92% at typical edge levels
Transaction cost sensitivity Strategy is unprofitable above ~2 cents/contract
Optimal true probability threshold >0.95 for YES, <0.05 for NO
Expected monthly return (Version 2) +0.91%
Probability of monthly profit 72.3%
Sharpe ratio (annualized) ~1.6
Biggest risk Correlated losses in same-category markets
Key success factor Large, diverse market universe with low fees

The closing-the-gap strategy is viable but demanding. It requires discipline (strict selection criteria), scale (many markets to choose from), and cost consciousness (minimal fees). It is best suited as one component of a multi-strategy approach rather than a standalone method.


Code Reference

See code/case-study-code.py for the complete Monte Carlo simulation, market generation, opportunity scanning, and performance analysis.