Skip to main content

Nephyr Backtest

Prediction market strategy validation — weather signals and copy trading.

Extracts backtesting capability from Momentai and MoonMirror into a standalone package.

Install

pip install -e ".[dev]"

Quick start

import asyncio
from nephyr_backtest import run_backtest, BacktestConfig, generate_report

config = BacktestConfig(
    start_date="2025-10-01",
    end_date="2026-03-29",
    starting_bankroll=1000.0,
    platform="polymarket",
    strategy="weather_signals",
)

result = asyncio.run(run_backtest(config))
outputs = generate_report(result, output_format="terminal")
print(outputs["terminal"])

Strategies

weather_signals

Replay the Momentai signal pipeline against historical data. Uses GFS ensemble forecasts vs real Polymarket CLOB prices.

copy_trading

Replay historical on-chain trades from top Polymarket wallets. Strategies: baseline, top3, consensus, category-filtered.

custom (Python package only)

Plug in any signal function and backtest it against real Polymarket market data. Your function receives a market_data dict and returns a signal dict (or None to skip).

import asyncio
from nephyr_backtest import run_backtest, BacktestConfig

def mean_reversion_signal(market_data: dict) -> dict | None:
    """Buy when price drops significantly from yesterday."""
    if market_data.get("price_24h_ago") is None:
        return None

    price_change = market_data["market_price"] - market_data["price_24h_ago"]

    # If price dropped >10%, bet it rebounds
    if price_change < -0.10:
        return {"probability": 0.65}

    return None

result = asyncio.run(run_backtest(BacktestConfig(
    start_date="2026-01-01",
    end_date="2026-03-28",
    starting_bankroll=1000.0,
    platform="polymarket",
    strategy="custom",
    signal_fn=mean_reversion_signal,
)))

print(f"Trades: {result.total_trades} | Return: {result.total_return:+.1f}%")

Signal function contract

Your function receives a market_data dict with these keys:

Key Type Description
market_id str Unique market identifier
platform str "polymarket" or "kalshi"
category str "weather", "crypto", "politics", "sports", "other"
market_price float Current YES price in [0, 1]
volume float Total USDC volume traded
date str ISO date "YYYY-MM-DD"
city str | None City name for weather markets (e.g. "NYC")
threshold_f float | None Temperature threshold for weather markets
direction str | None "above" or "below" for weather markets
price_1h_ago float | None YES price 1 hour ago
price_24h_ago float | None YES price 24 hours ago

Return a dict {"probability": float} to place a trade, or None to skip. Optional return keys: "direction" ("YES" / "NO", default "YES"), "confidence" (float, for logging).

The probability must be in (0, 1). Kelly sizing, risk management, and settlement are handled automatically by the engine — identical to the built-in strategies.

MCP server and REST API

Custom strategies require passing a Python callable, which cannot be serialized over MCP or HTTP. The MCP server (nephyr-backtest-mcp) and REST API support weather_signals and copy_trading only. Use the Python package directly for custom strategies.

MCP Server

{
  "mcpServers": {
    "nephyr-backtest": {
      "command": "nephyr-backtest-mcp"
    }
  }
}

Tools: run_weather_backtest, run_copy_backtest, get_available_data

REST API

uvicorn api.app:app --reload
  • POST /v1/backtest/weather
  • POST /v1/backtest/copy
  • GET /v1/data/available
  • GET /v1/health

Tests

pytest tests/ -v

Pricing

Tier Details
Free 1 backtest/month (1 month of data, 1 city)
Paid $49/month — unlimited backtests, all data, all cities, CSV export
Per-run $5/backtest for one-off users
Agent-to-agent $0.05/backtest

License

MIT

Metadata

Release files for nephyr-backtest 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nephyr-backtest 0.1.1
File Size Uploaded
nephyr_backtest-0.1.1.tar.gz 48.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nephyr-backtest 0.1.1
File Interpreter ABI Platform
nephyr_backtest-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 80.5 kB

Release files / nephyr_backtest-0.1.1.tar.gz

Download URL nephyr_backtest-0.1.1.tar.gz
Size 48.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0be63eef2ab5551d03aeef92624cb66e8873a7550d5bbfc62c54afc0122bea05
BLAKE2b-256 checksum
How to use checksums
be9d5e3919fef647dc792a9f65499b1f4d7eac2c872b4d43698888bc0294939b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / nephyr_backtest-0.1.1-py3-none-any.whl

Download URL nephyr_backtest-0.1.1-py3-none-any.whl
Size 32.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5eaab104e82e5fd53d2221899495a32f04d91b1ed4255c79e70b95b28d047aa6
BLAKE2b-256 checksum
How to use checksums
7e0a09f339037dbdcc1021fdccd5cd3a5d3141d03ed200cd7eec2718e382472e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page