Case Study 1: The True Cost of Trading on Polymarket
Overview
Maria is a semi-professional prediction market trader who has developed a quantitative model for U.S. political events. Her model identifies opportunities where her estimated probabilities differ from market prices. She has been trading on Polymarket for three months and wants to conduct a thorough cost analysis to understand her true profitability and compare whether Kalshi would be a better choice.
In this case study, we walk through Maria's complete cost analysis, covering spread costs, gas fees, slippage, market impact, and the overall impact on her trading strategy's profitability.
Maria's Trading Profile
| Metric | Value |
|---|---|
| Capital deployed | $25,000 |
| Average trades per week | 15 |
| Average position size | 200 contracts |
| Average contract price | $0.50 |
| Average hold time | 7 days |
| Model edge (estimated) | 4 cents above midpoint |
| Markets traded | U.S. political elections, policy outcomes |
Part 1: Cataloging All Costs on Polymarket
1.1 Spread Costs
Maria records the quoted spread at the time of each trade. Over 60 trades in her most recent month, she observes:
| Market Category | Avg Quoted Spread | Avg Effective Spread | Number of Trades |
|---|---|---|---|
| Presidential election | $0.02 | $0.024 | 20 | |
| Congressional races | $0.04 | $0.052 | 15 | |
| Policy outcomes | $0.05 | $0.068 | 15 | |
| Economic indicators | $0.03 | $0.038 | 10 | |
| Weighted average | $0.033** | **$0.043 | 60 |
The effective spread exceeds the quoted spread by an average of 1 cent, reflecting slippage from order book depth limitations.
Monthly spread cost: $$\text{Spread cost} = \frac{S_{\text{effective}}}{2} \times \text{contracts per trade} \times \text{trades} = \frac{0.043}{2} \times 200 \times 60 = \$258$$
1.2 Gas Fees
Maria's gas fee history on Polygon:
| Transaction Type | Avg Gas Fee | Frequency per Month |
|---|---|---|
| Trade execution (approve + swap) | $0.008 | 60 |
| Position close / claim | $0.005 | 45 |
| USDC deposit | $0.003 | 4 |
| USDC withdrawal | $0.012 | 2 |
Monthly gas cost: $$G = (60 \times 0.008) + (45 \times 0.005) + (4 \times 0.003) + (2 \times 0.012) = 0.48 + 0.225 + 0.012 + 0.024 = \$0.74$$
Gas fees on Polygon are essentially negligible for Maria's trade sizes. Even during periods of congestion (10x normal fees), her monthly gas cost would only reach ~$7.40.
1.3 Slippage Analysis
Maria categorizes her trades by size relative to the available liquidity at the best price:
| Order Size vs. Best Level | Occurrences | Avg Slippage |
|---|---|---|
| < 50% of best level | 25 | $0.000 |
| 50-100% of best level | 20 | $0.003 |
| 100-200% of best level | 10 | $0.008 |
| > 200% of best level | 5 | $0.018 |
Monthly slippage cost: $$\text{Slippage} = (25 \times 0 + 20 \times 0.003 + 10 \times 0.008 + 5 \times 0.018) \times 200 = (0 + 0.06 + 0.08 + 0.09) \times 200 = \$46$$
1.4 Market Impact (Permanent)
Maria estimates permanent market impact by observing the midpoint 1 hour after her trades. On average, the midpoint moves 0.4 cents in the direction of her trade. This represents the market incorporating the information in her order flow.
Monthly impact cost estimate: $$\text{Impact} = 0.004 \times 200 \times 60 = \$48$$
Note: This cost is partially offset by the fact that the price moving in her favor means her position is worth more. However, it increases the cost of building the full position.
1.5 Total Monthly Cost Summary (Polymarket)
| Cost Component | Monthly Amount | Per Trade | Per Contract |
|---|---|---|---|
| Spread (half effective) | $258.00 | $4.30 | $0.0215 | |
| Gas fees | $0.74 | $0.01 | $0.0001 | |
| Slippage | $46.00 | $0.77 | $0.0038 | |
| Market impact | $48.00 | $0.80 | $0.0040 | |
| Total | $352.74** | **$5.88 | $0.0294 |
Total cost as percentage of notional: $352.74 / ($0.50 \times 200 \times 60) = 5.88\%$
Cost per contract: $0.0294 (approximately 3 cents)
Part 2: Calculating Net Edge After Costs
Maria's model estimates an average edge of 4 cents above the midpoint. But she buys at the ask, not the midpoint, so her edge relative to execution price is:
$$\text{Edge vs. execution} = \text{Edge vs. midpoint} - \frac{S_{\text{effective}}}{2}$$ $$= 0.04 - 0.0215 = 0.0185 \text{ cents above her average execution price}$$
After accounting for all other costs (gas + slippage + impact): $$\text{Net edge} = 0.0185 - 0.0001 - 0.0038 - 0.0040 = 0.0106 \text{ per contract}$$
Monthly expected profit: $$\Pi = 0.0106 \times 200 \times 60 = \$127.20$$
Monthly cost-to-edge ratio: $$\frac{\text{Total costs}}{\text{Gross edge}} = \frac{352.74}{0.04 \times 200 \times 60} = \frac{352.74}{480} = 73.5\%$$
Maria is losing 73.5% of her gross edge to transaction costs. Her expected monthly profit of ~$127 on $25,000 of capital represents an annual return of approximately 6.1%.
Edge Sensitivity Analysis
How sensitive is Maria's profitability to her edge estimate?
| True Edge (cents) | Gross Profit | Costs | Net Profit | Annual ROI |
|---|---|---|---|---|
| 2 | $240 | $353 | -$113 | -5.4% | |
| 3 | $360 | $353 | $7 | 0.3% | |
| 4 | $480 | $353 | $127 | 6.1% | |
| 5 | $600 | $353 | $247 | 11.9% | |
| 6 | $720 | $353 | $367 | 17.6% |
Critical finding: If Maria's edge is 3 cents or less instead of her estimated 4 cents, she is approximately breaking even or losing money. Given the uncertainty in her edge estimates, this is a concerning margin of safety.
Part 3: Comparison to Kalshi
Maria now models the same 60 trades per month on Kalshi to compare total costs.
3.1 Kalshi Cost Structure
For taker orders at an average price of $0.50: - Taker fee: $\min(0.01, 0.50/15) = \min(0.01, 0.0333) = 0.01$ per contract - Maker fee: $0.00
Kalshi's quoted spreads tend to be slightly wider than Polymarket's for the same markets:
| Market Category | Polymarket Spread | Kalshi Spread |
|---|---|---|
| Presidential election | $0.02 | $0.03 | |
| Congressional races | $0.04 | $0.05 | |
| Policy outcomes | $0.05 | $0.06 | |
| Economic indicators | $0.03 | $0.04 | |
| Weighted average | $0.033** | **$0.043 |
3.2 Kalshi Cost Calculation (Taker Orders)
| Cost Component | Monthly Amount | Per Contract |
|---|---|---|
| Spread (half effective) | $322.50 | $0.0269 | |
| Taker fee | $120.00 | $0.0100 | |
| Gas fees | $0.00 | $0.0000 | |
| Slippage (estimated similar) | $46.00 | $0.0038 | |
| Market impact (estimated similar) | $48.00 | $0.0040 | |
| Total | $536.50** | **$0.0447 |
3.3 Kalshi Cost Calculation (Maker Orders — 60% fill rate)
If Maria switches to limit orders on Kalshi (zero maker fee, but only 60% fill rate):
- Trades executed as maker: 60 × 60% = 36 trades
- Trades requiring taker fallback: 60 × 40% = 24 trades
- Maker trades: no fee, earn the spread (buy at bid)
- Taker fallback trades: full taker costs
| Scenario | Maker Trades (36) | Taker Trades (24) | Monthly Total |
|---|---|---|---|
| Spread cost | $0 (at bid) | $0.0269 × 200 × 24 = $129 | $129 | ||
| Taker fee | $0 | $0.01 × 200 × 24 = $48 | $48 | ||
| Opportunity cost (missed trades) | Est. $40 | $0 | $40 | |
| Other costs | ~$30 | ~$30 | $60 | |
| Total | $277 |
3.4 Side-by-Side Comparison
| Metric | Polymarket (Taker) | Kalshi (Taker) | Kalshi (Maker-First) |
|---|---|---|---|
| Monthly cost | $353 | $537 | $277 | |
| Cost per contract | $0.029 | $0.045 | $0.023 | |
| Net monthly profit | $127 | -$57 | $203 | |
| Annual ROI | 6.1% | -2.7% | 9.7% |
| Breakeven edge | 2.9¢ | 4.5¢ | 2.3¢ |
3.5 Key Insights
-
Polymarket is significantly cheaper than Kalshi for taker orders due to zero trading fees and generally tighter spreads.
-
Kalshi's maker-first strategy is the cheapest overall if Maria can achieve a 60% fill rate on limit orders. The zero maker fee combined with buying at the bid instead of the ask is powerful.
-
The choice depends on execution patience: If Maria needs to trade immediately (breaking news, time-sensitive information), Polymarket taker orders are best. If she can wait for fills, Kalshi maker orders are optimal.
-
With only 4 cents of edge, platform choice is the difference between profitability and loss. Kalshi taker orders actually produce a negative expected return for Maria's strategy.
Part 4: Optimization Recommendations
Based on the analysis, Maria should:
Recommendation 1: Prioritize Limit Orders
Switch from predominantly market/taker orders to a limit-order-first strategy. Target a 60%+ fill rate by placing orders 1 tick above the bid (for buys) or 1 tick below the ask (for sells).
Expected savings: $76 per month (switching from Polymarket taker to Kalshi maker-first)
Recommendation 2: Filter Low-Edge Trades
Reject any trade where the estimated edge is less than 4 cents (1.5x the breakeven cost). This eliminates unprofitable trades that drag down overall performance.
Expected impact: Fewer trades, but higher average profitability per trade.
Recommendation 3: Concentrate on Liquid Markets
Focus trading on presidential election and economic indicator markets where spreads are tightest. Avoid congressional races and policy outcomes unless the edge is proportionally larger.
Expected savings: ~$30 per month from reduced spread costs.
Recommendation 4: Size Trades to Avoid Slippage
Limit individual trade sizes to 50-75% of the liquidity at the best price level. For markets with thin books, split orders across time.
Expected savings: ~$20 per month from reduced slippage.
Recommendation 5: Use Both Platforms
Maintain accounts on both Polymarket and Kalshi. For each trade, compare the effective cost on each platform and execute on whichever is cheaper for that specific trade.
Part 5: Three-Month Projection
Under the optimized strategy:
| Metric | Current | Optimized | Improvement |
|---|---|---|---|
| Monthly trades | 60 | 45 (filtered) | -25% |
| Avg cost per contract | $0.029 | $0.020 | -31% | |
| Monthly costs | $353 | $180 | -49% | |
| Monthly gross edge | $480 | $400 (fewer but better trades) | -17% | |
| Monthly net profit | $127 | $220 | +73% | |
| Annual ROI | 6.1% | 10.6% | +74% |
| Cost-to-edge ratio | 73.5% | 45.0% | -39% |
The optimized strategy reduces costs by 49% while only reducing gross edge by 17%, resulting in a 73% increase in net profitability.
Discussion Questions
-
Maria's edge estimate of 4 cents has estimation uncertainty. If the true edge were drawn from a normal distribution centered at 4 cents with a standard deviation of 2 cents, what would her expected annual ROI be under the optimized strategy?
-
As more traders adopt similar quantitative models, Maria's edge may decay. At what point should she stop trading altogether? What leading indicators should she monitor?
-
If Polymarket introduced a 0.5% trading fee, how would the platform comparison change? Would Kalshi maker orders become unambiguously better?
-
Maria is considering scaling up to $100,000 in capital. What additional costs would she face (market impact, liquidity constraints)? How should her strategy adapt?
-
How would the analysis change if Maria were trading on Ethereum mainnet (with gas fees of $5-$50 per transaction) instead of Polygon?
Code Reference
See code/case-study-code.py for the complete Python implementation of Maria's cost analysis, including the platform comparison and optimization calculations.