Skip to main content
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.
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.