polybot

Strategy · Medium risk · Advanced

Calendar spread

Trade mispricings between markets that resolve on different dates but cover the same underlying event. The forward curve, for prediction markets.

Published Apr 10, 2026


The idea

“Will the Fed cut rates by June?” and “Will the Fed cut rates by December?” are distinct markets, but they’re related by construction: P(by June) ≤ P(by December). When that inequality is violated — or when the spread between them is wildly different from what the dated probabilities imply — there’s a trade.

Think of it as the prediction-market version of calendar spreads in options or bond curves.

How polybot implements it

calendar_spread groups markets into “families” based on a shared resolution topic and differing resolution dates. For each family:

  1. Enforce monotonicity: P(earlier) ≤ P(later).
  2. Enforce consistency with a prior model of resolution hazard (e.g. for rate cuts, an exponential hazard model fit to the family).
  3. When any leg deviates beyond threshold, emit paired buy/sell signals.
# conceptual
for family in self.families:
    legs = sorted(family.markets, key=lambda m: m.resolution_date)
    for earlier, later in zip(legs, legs[1:]):
        if earlier.price > later.price + self.config.min_violation:
            self.emit(Signal(earlier.market_id, side="NO", size=size))
            self.emit(Signal(later.market_id, side="YES", size=size))

Why this is subtle

Monotonicity violations are rare but obvious. The bread and butter is the second filter — hazard-model consistency. polybot ships a HazardModel base class with exponential, Weibull, and piecewise constant implementations. For sophisticated markets, a custom hazard model per family is often worthwhile.

Configuration

polybot strategy enable calendar_spread
polybot strategy config calendar_spread \
    --hazard-model exponential \
    --min-violation 0.015 \
    --max-legs 4 \
    --families-include "fed_rates,election_dates"

Families are declared in YAML:

# config/calendar_families.yaml
fed_rates_2026:
  topic: "Fed rate cut in 2026"
  hazard: exponential
  markets:
    - "fed-cut-by-march-2026"
    - "fed-cut-by-june-2026"
    - "fed-cut-by-september-2026"
    - "fed-cut-by-december-2026"

Where it works

Where it fails

FAQ

Is this just options trading? Close in spirit — a bet on the shape of the resolution curve. But discrete-outcome prediction markets don’t have Black-Scholes analogues; you need empirical hazard models.

How do I discover families automatically? polybot’s calendar discover command clusters markets by resolution-topic embeddings (using an AI plugin) and proposes families for human review.

Source: src/polybot/strategies/calendar_spread.py.

Want this strategy tuned for your book?

Cryptuon can adapt polybot strategies to your capital, risk budget, and markets. Shadow-deployed before you go live.