"""Regime-adaptive market maker using HMM regime detection."""
import horizon as hz
from horizon.context import FeedData
# Markov regime detector: 3 states (calm, volatile, crisis)
regime = hz.markov_regime(
feed_name="polymarket",
n_states=3,
lookback=100,
labels=["calm", "volatile", "crisis"],
)
def quoter(ctx: hz.Context, fair: float) -> list[hz.Quote]:
"""Adjust spread and size based on detected regime."""
current_regime = ctx.params.get("regime_label", "calm")
regime_probs = ctx.params.get("regime_probabilities", [1.0, 0.0, 0.0])
if current_regime == "calm":
# Tight spread, large size - capture spread in quiet markets
spread = 0.02
size = 15.0
elif current_regime == "volatile":
# Wide spread, small size - compensate for adverse selection
spread = 0.06
size = 5.0
else:
# Crisis: don't quote at all
print(f" Crisis regime detected (prob={regime_probs[2]:.2f}), pausing quotes")
return []
print(f" Regime: {current_regime} | probs={[f'{p:.2f}' for p in regime_probs]} | spread={spread}")
return hz.quotes(fair, spread, size=size)
hz.run(
name="regime_adaptive_mm",
markets=["election-winner"],
feeds={
"polymarket": hz.PolymarketBook("election-winner"),
},
pipeline=[regime, quoter],
risk=hz.Risk(max_position=100, max_drawdown_pct=5),
interval=1.0,
mode="paper",
)