Systematic Framework for Prediction Market Portfolio Construction
LAST UPDATED:
2026-01-20
This methodology describes how to systematically construct, maintain, and rebalance prediction market baskets. Each basket represents exposure to a set of risk factors, constructed from contracts on Polymarket and Kalshi.
Risk factors are the atomic building blocks. Every contract maps to exactly one risk factor.
| ID | Risk Factor | Description |
|---|---|---|
| E1 | OPEC Production Policy | OPEC+ production decisions, quotas, compliance |
| E2 | US Oil Policy | Drilling permits, SPR releases, export policy |
| E3 | Oil Sanctions | Iran, Russia, Venezuela export restrictions |
| E4 | Oil Infrastructure | Pipelines, refineries, tanker routes, storage |
| E5 | European Gas Supply | LNG imports, Russian pipeline dependency, storage |
| E6 | Asian Gas Demand | LNG contracts, demand growth, competition |
| E7 | US Gas Policy | LNG export terminals, drilling, pipeline approvals |
| E8 | Nuclear Policy | Restarts, new builds, shutdowns, SMR approvals |
| E9 | Renewable Mandates | Solar/wind targets, subsidies, permitting |
| E10 | EV Policy | ICE bans, EV subsidies, charging infrastructure |
| E11 | Carbon Pricing | Carbon taxes, cap-and-trade, border adjustments |
| E12 | Grid Reliability | Blackouts, capacity shortfalls, transmission |
| ID | Risk Factor | Description |
|---|---|---|
| C1 | Grain Export Policy | Export bans, quotas, tariffs on wheat/corn/soy |
| C2 | Agricultural Weather | El Niño, La Niña, drought, flooding |
| C3 | Fertilizer Supply | Potash, nitrogen export restrictions, prices |
| C4 | Base Metals Mining | Copper, aluminum, zinc strikes, disruptions |
| C5 | Steel/Iron Trade | Tariffs, dumping, capacity cuts |
| C6 | Rare Earth Policy | China export controls, non-China supply |
| C7 | Lithium Supply | Chile, Australia policy, DRC cobalt |
| C8 | Semiconductor Supply | Fab capacity, export controls, shortages |
| C9 | Shipping Chokepoints | Suez, Panama, Hormuz, Malacca passage |
| C10 | Port & Freight | Strikes, congestion, container availability |
| ID | Risk Factor | Description |
|---|---|---|
| P1 | US Government Funding | Shutdowns, continuing resolutions |
| P2 | US Debt Ceiling | Breach, suspension, default risk |
| P3 | US Electoral Process | Contested elections, certification disputes |
| P4 | US Presidential Health | Incapacitation, succession |
| P5 | US Regulatory Shift | Major agency policy changes |
| P6 | EU Treaty Stability | Treaty changes, veto crises, reform |
| P7 | EU Membership | Exit movements, Article 50, referendums |
| P8 | EU Regulatory Shift | Digital, climate, competition enforcement |
| P9 | China Leadership | Transitions, purges, succession |
| P10 | China Tech Regulation | Platform crackdowns, data rules |
| P11 | China Capital Controls | Outflow restrictions, FX policy |
| P12 | China Foreign Business | Restrictions, nationalizations, exits |
| P13 | EM Government Stability | Coups, impeachments, constitutional crises |
| P14 | EM Policy Shift | Nationalizations, populist reversals |
Pull all active contracts from Polymarket and Kalshi.
| Filter | Threshold | Rationale |
|---|---|---|
| Minimum volume | >$50,000 | Ensures executable liquidity |
| Minimum open interest | >$10,000 | Active positions exist |
| Bid-ask spread | <10% | Not too illiquid |
| Time to expiration | 30 - 365 days | Not stale, not too speculative |
| Resolution criteria | Binary, verifiable | No ambiguous outcomes |
| Platform status | Active | Tradeable |
Each contract is scored against each risk factor:
Only contracts with score ≥ 2 are eligible for that risk factor.
Rule:
IF yes_means_disruption = TRUE
THEN basket_holds = NO
ELSE
basket_holds = YES
| YES Outcome Contains | yes_means_disruption |
|---|---|
| "invades," "attacks," "strikes" | TRUE |
| "cuts," "bans," "restricts," "blocks" | TRUE |
| "shuts down," "defaults," "collapses" | TRUE |
| "disrupted," "closes," "fails" | TRUE |
| "recession," "crisis," "outbreak" | TRUE |
| "peace," "deal," "agreement," "ceasefire" | FALSE |
| "avoids," "prevents," "survives" | FALSE |
| "grows," "expands," "stabilizes" | FALSE |
Formula:
Basket_Price = Σ (side_price_i × weight_i)
Where:
side_price = 1 - yes_priceside_price = yes_price| Basket Price | Meaning |
|---|---|
| 0.80 | Market implies 80% probability of stability |
| 0.50 | Market is neutral |
| 0.20 | Market implies 80% probability of disruption |
End of Methodology Document