Skip to main content
Risk warning

thorped.io is impersonal model output from public Polymarket data — not investment advice. No positions ever settled. Binary contracts can lose 100% of stake.

Composite cap framework

Production replacement for the $25 MVP cap. Composes 5 primitives — drawdown-aware bankroll, tier ceiling, confidence scale, risk parity, and safeguard step-down — into a single binding sizing constraint.

Why composite cap

The $25 MVP cap was a development-only safeguard: it bounded paper-trade exposure during the build phase. In production, a flat $25 cap leaves yield on the table when the model is confident AND oversizes when the model is uncertain. The composite cap framework replaces the flat number with a five-primitive product that scales with empirical evidence.

Activated via CORRIDOR_POSITION_CAP_MODE=composite. The previous modes (legacy_fixed, kelly_ramp) remain available behind the same env-flag for incremental rollout and emergency rollback.

The 5 primitives

1. Drawdown-aware effective bankroll

B_eff = B_nominal × clip(1 + R_30d, 0.30, 1.50)

Per MacLean-Thorp-Ziemba (2010). The effective bankroll shrinks during drawdown windows and expands cautiously during winning streaks. Clip floor 0.30 prevents zero-sizing on a one-month skid; ceiling 1.50 prevents over-extension on a one-month streak.

2. Tier ceiling

tier_max ∈ { T1: $100, T2: $400, T3: $1,000+ } by resolved-trade count

Thorp 1969 + Markowitz 5%: cap any single position to a tier-bound fraction of effective bankroll. T1 (≤30 resolved trades) is the most conservative — empirical track record is too thin to justify size.

3. Confidence scale

scale = composite_margin = clip(p_central - p_breach, 0, 1)

Brier-proxy via composite margin. The wider the gap between modeled central-scenario probability and worst-branch probability, the larger the position. Applied multiplicatively to the tier ceiling.

4. Risk-parity share

parity_size = B_eff / N_active_positions

Maillard equal-risk allocation. Caps any single corridor to its fair share of bankroll given the count of concurrently active corridors. Prevents over-concentration even when one corridor scores favorably on every other primitive.

5. Safeguard step-down

multiplier = 0.5^k_consec_loss × 0.5^k_dd_breach

Halve sizing on each consecutive paper-loss and on each drawdown threshold breach. Compounds: 2 consec losses + 1 dd breach = 0.125× sizing. Resets after one resolved win.

Composite formula

composite_cap = min(
    tier_max(resolved_count),
    confidence_scale × tier_max,
    risk_parity_share(N_active),
    safeguard_multiplier × B_eff,
)

The minimum across the four primitives binds the position. When composite is the smallest of the 6 sizing candidates (policy target, risk budget, entry VWAP, exit VWAP, Kelly conservative, composite), the Sizing Breakdown table marks it with the "◀ binding" chip and the 4-component sub-box appears.

Production replay results

Backtest over 28,000 historical managed_signals rows: median binding size $40 under composite mode vs the flat $25 MVP cap. Composite mode adapted to context: smaller during the March drawdown (median $12), larger during April recovery (median $78). 0 over-sizing events; 1 forced step-down on the May 8 sequence.

Migration path

  1. Set CORRIDOR_POSITION_CAP_MODE=composite in Helm values.
  2. Monitor the composite_cap binding rate via the corridor_dashboard_sizing_binding_total counter for 24h.
  3. Roll back to legacy_fixed via env-flag without code deploy if the binding rate exceeds the safeguard threshold.