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:
- Time to expiry: 1-14 days
- Price extremity: Price above 0.80 or below 0.20 (indicating a likely outcome)
- Staleness indicators: - Last trade more than 12 hours ago, OR - Fewer than 20 active traders, OR - 24-hour volume below 50 contracts
- 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:
- Stricter true probability threshold (0.95 vs. 0.80): Dramatically improved win rate
- Lower transaction costs (limit orders): Preserved more of the edge
- 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:
-
Category diversification. Spread positions across unrelated categories: politics, sports, economics, entertainment. A political surprise does not affect a sports market.
-
Correlation limits. Never hold more than 3 positions in the same event category or correlated market cluster.
-
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%.
-
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
-
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.
-
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.
-
Diverse markets. Uncorrelated markets prevent catastrophic cluster losses. A platform with markets across politics, sports, economics, weather, and entertainment is ideal.
-
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.
-
Short time to expiry. Markets within 1-3 days of resolution have the most predictable outcomes. Longer time horizons introduce more uncertainty.
Unfavorable Conditions
-
High-fee platforms. If round-trip costs exceed 3 cents per contract, the strategy is almost certainly unprofitable.
-
Concentrated markets. A platform with only political or only sports markets lacks the diversification needed to survive cluster losses.
-
Efficient markets. On platforms with many active traders, stale markets are rare. The strategy depends on finding neglected contracts that professional traders have overlooked.
-
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.