The strategy registry lets you browse your deployed strategies on Horizon Cloud, download them locally, and run them with a single command. Think of it as git pull for your trading strategies.
Quick Start
import horizon as hz
# List all your cloud strategies
strategies = hz.registry.list()
for s in strategies:
print(s)
# Strategy('Fed Rate MM' [deployed], id=a1b2c3d4...)
# Strategy('BTC Arb Scanner' [validated], id=e5f6a7b8...)
# Search by keyword
hz.registry.search("market making")
# Pull a strategy locally
pulled = hz.registry.pull("a1b2c3d4-...")
print(pulled.path)
# ~/.horizon/strategies/fed_rate_mm-a1b2c3d4/
# Run it directly
hz.registry.run("a1b2c3d4-...", exchange=hz.Polymarket())
Authentication
The registry uses your SDK key (the same one you use for hz.run() and cloud deploy):
export HORIZON_API_KEY="hz_sdk_..."
Or pass it explicitly:
from horizon import Registry
reg = Registry(api_key="hz_sdk_...")
Browsing Strategies
List all
strategies = hz.registry.list()
Returns a list of StrategyInfo objects with id, name, description, status, class_name, created_at.
Search
results = hz.registry.search("volatility")
Searches your strategies by name, description, and class name. Results are ranked by relevance.
Details
info = hz.registry.info("strategy-id")
print(info["params"]) # strategy parameters
print(info["risk_config"]) # risk configuration
print(info["status"]) # draft, validated, deployed, stopped, error
Version History
Every time you save changes to a strategy on Horizon Cloud, a version snapshot is created automatically.
versions = hz.registry.versions("strategy-id")
for v in versions:
print(v)
# v5 (2026-03-10)
# v4 (2026-03-08)
# v3 (2026-03-05)
Pull a specific version:
pulled = hz.registry.pull("strategy-id", version=3)
Pulling Strategies
pull() downloads the strategy code and metadata to ~/.horizon/strategies/:
pulled = hz.registry.pull("strategy-id")
~/.horizon/strategies/
fed_rate_mm-a1b2c3d4/
strategy.py # the strategy code
manifest.json # metadata, params, risk config, version
Custom directory
pulled = hz.registry.pull("strategy-id", directory="./my-strategies")
What’s in the manifest
{
"id": "a1b2c3d4-...",
"name": "Fed Rate MM",
"description": "Market maker for Fed rate prediction markets",
"class_name": "FedRateMM",
"version": 3,
"params": {"spread": 0.02, "size": 10},
"risk_config": {"max_position": 100},
"pulled_at": "2026-03-11T10:30:00Z"
}
Running Strategies
Pull and execute in one step:
hz.registry.run("strategy-id", exchange=hz.Polymarket())
With a specific version:
hz.registry.run("strategy-id", version=3, exchange=hz.Coinbase())
The strategy module is dynamically loaded and executed. If it defines a main() or run() function, that gets called. Otherwise it runs on import (the standard hz.run() pattern).
Managing Local Strategies
List pulled strategies
local = hz.registry.local()
for s in local:
print(f"{s.name} v{s.version} at {s.path}")
Remove a local strategy
hz.registry.remove("strategy-id")
Workflow Example
import horizon as hz
# 1. See what you have deployed
for s in hz.registry.list():
print(f"{s.name} [{s.status}]")
# 2. Pull the one you want
pulled = hz.registry.pull("a1b2c3d4-...", version=5)
# 3. Read and customize the code
code = pulled.code_path.read_text()
print(code[:200])
# 4. Edit locally, then run
hz.registry.run("a1b2c3d4-...", exchange=hz.Polymarket(), mode="paper")
Use pull() to download and inspect strategy code before running it. The pulled strategy is plain Python you can read, modify, and version control with git.