backtesting
Test versioned rules against real history.
Config-based, reproducible, version-pinned runs return aggregate results. Live channels and REST history expose different payload shapes, so validate the exact fields your execution system consumes.
the moat
One engine, offline and in real time.
Historical replay and live enrichment share versioned signal definitions where documented. Backtests return aggregates rather than a live event stream, and forward deployment remains your responsibility.
backtest contract
resultaggregate
↔
live contract
resultevent payload
configure a run
Describe entry and exit. Get a reproducible result.
Post a config, get a jobId, and poll until the result is ready. Runs are reproducible against the pinned historical contract. The configured run cost is published by GET /v1/pricing (current default: 25 credits).
json · POST /v1/backtest
{
"dex": "pumpfun",
"chain": "sol",
"interval": { "min": 1730419200000, "max": 1731024000000 },
"buyParams": {
"time": { "max": 60000 },
"mc": { "min": 8000 },
"nBuy": { "min": 20 },
"signals": {
"buyVelocity10s": { "min": 2 },
"sniperCount": { "max": 12 },
"creatorGraduates": { "min": 1 }
}
},
"sellParams": {
"takeProfit": [{ "percent": 60, "sellAmount": 50 }],
"stopLoss": [{ "percent": 35, "sellAmount": 100 }],
"trailingStopProfit": [{ "percent": 100, "sellAmount": 100, "drawdown": 20 }],
"timeDecay": [{ "windowSec": 300, "sellPercent": 50, "overrideIfProfitPct": 40 }]
}
}Limit Window limits are plan-configured; current defaults are PAYG 3 · Builder 5 · Pro 7 · Quant 10 days. Read GET /v1/pricing for current values. The API publishes no completed-result retention duration, so store the result you need instead of assuming a job remains pollable indefinitely.
Validate the config you tested.
Poll for an aggregate result, then implement the validated rules in your execution system.