"""Chainlink oracle feed for BTC price markets."""
import horizon as hz
from horizon.context import FeedData
def fair_value(ctx: hz.Context) -> float:
"""Price a BTC > $100k market using Chainlink oracle."""
chainlink = ctx.feeds.get("btc_oracle", FeedData())
if chainlink.price <= 0:
return 0.50
# Simple proximity model: how close is BTC to $100k?
btc_price = chainlink.price
distance = (btc_price - 100_000) / 100_000
# Sigmoid-like mapping
import math
fair = 1.0 / (1.0 + math.exp(-distance * 10))
return max(0.05, min(0.95, fair))
def quoter(ctx: hz.Context, fair: float) -> list[hz.Quote]:
return hz.quotes(fair, spread=0.04, size=5)
hz.run(
name="chainlink_mm",
markets=["btc-100k"],
feeds={
"btc_oracle": hz.ChainlinkFeed(
contract_address="0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419", # ETH mainnet BTC/USD
rpc_url="https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY",
poll_interval=60, # poll every 60 seconds
),
},
pipeline=[fair_value, quoter],
risk=hz.Risk(max_position=50, max_drawdown_pct=5),
interval=5.0,
mode="paper",
)