"""Continuous multi-outcome arb scanner."""
import horizon as hz
from horizon.context import FeedData
def fair_value(ctx: hz.Context) -> float:
"""Use Candidate A feed as primary."""
feed = ctx.feeds.get("candidate-a", FeedData())
return feed.price if feed.price > 0 else 0.25
event = hz.Event(
event_id="presidential-election-2028",
outcomes=[
hz.Outcome(market_id="candidate-a", name="Candidate A"),
hz.Outcome(market_id="candidate-b", name="Candidate B"),
hz.Outcome(market_id="candidate-c", name="Candidate C"),
hz.Outcome(market_id="candidate-d", name="Candidate D"),
],
)
scanner = hz.event_arb_sweep
hz.run(
name="multi_outcome_arb",
events=[event],
markets=["candidate-a", "candidate-b", "candidate-c", "candidate-d"],
feeds={
"candidate-a": hz.PolymarketBook("candidate-a"),
"candidate-b": hz.PolymarketBook("candidate-b"),
"candidate-c": hz.PolymarketBook("candidate-c"),
"candidate-d": hz.PolymarketBook("candidate-d"),
},
pipeline=[fair_value],
risk=hz.Risk(max_position=100, max_drawdown_pct=3),
interval=1.0,
mode="paper",
)