Skip to main content
A json result has six parts. Amounts are in coin unless the field name says usd; returns and rates are decimals (0.089 is 8.9%).

strategy

Check this first: it confirms the engine understood your spec.

stats

number
Return over the run, and annualised.
number
Annualised volatility of daily returns, and the usual risk-adjusted ratios.
object
max_drawdown, avg_drawdown, longest_underwater_days, and the dates the worst drawdown started (max_drawdown_start) and bottomed (max_drawdown_trough).
object
Per-leg statistics: count, winners, losers, win_rate, avg_pnl, avg_win, avg_loss, best, worst, profit_factor, avg_holding_days and total_fees.
object
The same statistics per position. For multi-leg strategies this is the figure that matters: a condor whose short legs win and long legs lose is one winning position, not a 50% win rate.
object
Return per calendar year, keyed by year.
mixed
The span actually reported. With trim_to_first_trade on, start is the first trade, not your requested start.

equity

equity = cash + positions_value. equity_usd is equity × spot.

positions

One per structure, with the rule that closed it in reason, or expiry and end_of_run:

trades

One per leg, with the instrument actually traded:
Prices are in coin per contract, as Deribit quotes inverse options.

warnings and diagnostics

Treat these as part of the answer. diagnostics counts the same things as numbers: fills_total, fills_degraded and fills_degraded_pct (fills priced from a fallback), stale_marks, structure_unresolved (times the structure couldn’t be built, such as a missing strike or expiry) and bars_before_first_trade.
A run with fills_degraded_pct above a few percent, or many structure_unresolved, is telling you the market couldn’t have supported the strategy as specified. Move strikes closer to the money or choose a more liquid expiry.