"""Oracle pipeline: inject edge for downstream quoting."""
import horizon as hz
from horizon.context import FeedData
oracle_pipe = hz.oracle(
config=hz.OracleConfig(
edge_threshold_bps=200,
),
forecast_interval_cycles=10,
)
def quoter(ctx: hz.Context, fair: float) -> list[hz.Quote]:
"""Quote only when oracle detects edge."""
oracle_edge = ctx.params.get("oracle_edge", 0.0)
oracle_conf = ctx.params.get("oracle_confidence", 0.0)
if abs(oracle_edge) < 0.02 or oracle_conf < 0.5:
return [] # no edge or low confidence
# Tighter spread when oracle is confident
spread = 0.02 + (1.0 - oracle_conf) * 0.04
size = hz.kelly_size(fair, fair - oracle_edge, 5000.0, 0.25, 30.0)
return hz.quotes(fair, spread, size=max(1.0, size))
hz.run(
name="oracle_trader",
markets=["election-winner"],
feeds={
"polymarket": hz.PolymarketBook("election-winner"),
},
pipeline=[oracle_pipe, quoter],
risk=hz.Risk(max_position=100, max_drawdown_pct=5),
interval=2.0,
mode="paper",
)