Pairs Trading in Prediction Markets
Two event-contract prices may move together, yet their difference need not revert before either contract settles. Pairs research asks whether a specified relationship is useful under observable costs and rules. Calling a pair market neutral does not remove outcome risk, execution risk or the possibility that the relationship was fitted after seeing the answer.
Distinguish logic from statistics
A logical relationship comes from settlement definitions. For example, one precisely defined event may imply another. Verify that implication against the full rules, payout amounts, deadlines and exceptional cases. Related names alone do not prove it. Mutually exclusive outcomes also need to be collectively exhaustive before their final payouts can be assumed to sum to a fixed amount.
A statistical relationship comes from observations. Correlated quotes can share news without maintaining a stable spread. Prices collected at different times can create a relationship or apparent discrepancy that never existed at an executable instant. Cross-venue research adds separate funding, fees, access and settlement procedures.
Describe the proposed spread explicitly
One reference definition is A minus beta times B minus an intercept. State the coefficient and intercept, the data window used to choose them, and the time that choice was frozen. An estimated coefficient is not automatically an executable contract ratio or a hedge against every outcome.
The helper below computes a standardized deviation using earlier paired observations only. It is an illustrative feature calculation, not a cointegration test, a fit, an order-sizing rule or proof that a spread returns to its mean. Inputs are dimensionless prices for two specified one-dollar payout instruments, with a caller-supplied coefficient and intercept.
from decimal import Decimal
def paired_deviation(history, latest, beta="1", intercept="0"):
def finite(value):
value = Decimal(str(value))
if not value.is_finite():
raise ValueError("finite values required")
return value
b, c = finite(beta), finite(intercept)
def spread(pair):
if len(pair) != 2:
raise ValueError("two aligned prices required")
a, d = map(finite, pair)
if not (0 <= a <= 1 and 0 <= d <= 1):
raise ValueError("prices must be in [0, 1]")
return a - b * d - c
past = [spread(pair) for pair in history]
current = spread(latest)
if len(past) < 3:
return None
mean = sum(past) / len(past)
variance = sum((x - mean) ** 2 for x in past) / len(past)
if variance == 0:
return None
return (current - mean) / variance.sqrt()
# Hypothetical aligned observations; latest is excluded from history.
sample = [(".50", ".40"), (".52", ".40"), (".48", ".40")]
assert paired_deviation(sample, (".56", ".40")) > 0The caller must establish alignment, quote side, clocks and contract identity. A standard deviation from three observations is only enough to demonstrate the arithmetic. It is not a recommended research sample size or a significance threshold.
Do not turn a statistical test into a guarantee
The statsmodels cointegration test documents a null of no cointegration and assumptions about integrated input series. Its regression specification matters. Bounded event prices approaching a finite settlement require particular care; a generic stock-pair recipe is not automatically appropriate. Rejecting a null does not guarantee timely reversion, tradability or profit.
Choose evaluation windows without later observations influencing earlier decisions. Record every candidate pair and parameter variant considered. Include pairs that disappeared, settled, lacked data or failed to meet the proposed relationship. A relationship selected from successful examples has a different evidential status from one specified in advance.
Model both legs and their limits
A planned two-leg action can become a one-leg holding when one quote moves, an order is rejected or size is unavailable. Fees, bid-ask spreads and partial fills can exceed a small reference discrepancy. Capital may remain committed until settlement or a possible early sale; neither venue is obliged to offer the exit the model assumed.
Banger can support paper investigations, but its public simulated fills do not prove synchronized real execution or queue priority. Preserve each instrument's identity and the hypothesis in the experiment record. Treat the observed spread, simulated result and eventual payout as different measurements, and report unresolved positions and unsuccessful attempts rather than calling the pair risk free.