Skip to main content
POST
/
api
/
v1
/
research
/
backtest
cURL
curl --request POST \
  --url 'https://api.forecast.example/api/v1/research/backtest' \
  --header 'Authorization: Bearer USER_JWT' \
  --header 'Content-Type: application/json' \
  --data '{
    "entry_executable": {
      "name": "sample strategy"
    },
    "objective": "avg_pnl"
  }'
{
  "schemaVersion": 2,
  "strategy": {
    "name": "sample strategy",
    "kind": "signal_filter",
    "featuresUsed": 12,
    "candidatesUsed": 8
  },
  "metrics": {
    "n": 184,
    "avg_pnl": 4.28
  },
  "verdict": {
    "grade": "B"
  }
}
cURL
curl --request POST \
  --url 'https://api.forecast.example/api/v1/research/backtest' \
  --header 'Authorization: Bearer USER_JWT' \
  --header 'Content-Type: application/json' \
  --data '{
    "entry_executable": {
      "name": "sample strategy"
    },
    "objective": "avg_pnl"
  }'
{
  "schemaVersion": 2,
  "strategy": {
    "name": "sample strategy",
    "kind": "signal_filter",
    "featuresUsed": 12,
    "candidatesUsed": 8
  },
  "metrics": {
    "n": 184,
    "avg_pnl": 4.28
  },
  "verdict": {
    "grade": "B"
  }
}
Use this endpoint to run a concrete strategy against the R2-backed research stack. This is an execution endpoint, not just an object read.

Body fields

entry_executable
object
required
Strategy definition to evaluate. The current implementation requires this field.
objective
string
Optimization objective, such as avg_pnl.
since
number
Optional lower time bound in epoch milliseconds.
until
number
Optional upper time bound in epoch milliseconds.
tradeSizeUsd
number
Optional fixed trade size normalization for report output.

Response fields

schemaVersion
number
required
Schema version for the analytics report.
strategy
object
required
Summary of the tested strategy and feature usage.
metrics
object
Core report metrics for the tested strategy.
verdict
object
Final report verdict for the run.