Understanding Optimizer Results
How to interpret the metrics in create_strategy / get_strategy_status
output. Each strategy in top_strategies is a Pareto-optimal configuration
-- no other strategy in the search space beats it on all metrics
simultaneously.
Key Metrics
CAGR (Compound Annual Growth Rate)
What it is: The annualized return rate, expressed as a decimal.
0.22 means 22% per year.
What's good:
| CAGR | Assessment |
|---|---|
| < 0.10 | Low. Barely beating risk-free rate after fees |
| 0.10 - 0.20 | Solid. Typical for conservative IC strategies |
| 0.20 - 0.35 | Strong. Good capital utilization |
| > 0.35 | Very aggressive. Check max_drawdown and p_ruin carefully |
Caveat: CAGR is from simulated backtesting. Real-world performance may differ due to slippage, execution gaps, and regime changes.
win_rate
What it is: Fraction of trades that are profitable. 0.81 means 81% of
trades make money.
What's good:
| Win rate | Assessment |
|---|---|
| < 0.50 | Low; the strategy loses more trades than it wins |
| 0.50 - 0.65 | Normal for balanced presets with data-derived deltas |
| 0.65 - 0.80 | Good; typical for conservative presets |
| > 0.80 | Very high; may indicate overfitting -- check OOS gap |
Win rate vs Avg PoP: Both metrics are computed from the same simulation. Avg PoP is the average fraction of profitable outcomes across the candidate pool. Win rate is the fraction of executed trades that finish profitable after exit rules, rolls, and costs. They should be close (within a few percentage points); a large gap indicates a problem with the simulation or config.
max_drawdown
What it is: The worst peak-to-trough loss as a fraction of capital,
measured on a mark-to-market basis. 0.09 means the portfolio lost
9% from its highest point at some time during the simulation.
Mark-to-market means open positions contribute their estimated unrealised P&L to the drawdown calculation. A market crash that puts your open ICs deep underwater will show up as a drawdown immediately -- not just when the positions eventually close.
What's good:
| Max drawdown | Assessment |
|---|---|
| < 0.05 | Very conservative. Capital is well protected |
| 0.05 - 0.10 | Low. Comfortable for most investors |
| 0.10 - 0.20 | Moderate. Expect some painful weeks |
| > 0.20 | Aggressive. Can test emotional discipline |
Key insight: max_drawdown is the most important risk metric for IC strategies. A strategy with 22% CAGR and 8% max drawdown is fundamentally different from one with 22% CAGR and 18% max drawdown -- the second one will be much harder to stick with.
p_ruin
What it is: Probability that portfolio capital drops below the ruin
threshold at any point during the simulation. 0.03 means a 3% chance
of hitting the ruin level over the simulation period.
The ruin threshold is configurable per preset:
| Preset | Ruin threshold | Meaning (on $15K) |
|---|---|---|
| Conservative | 10% | Ruin = dropping below $13,500 |
| Balanced | 15% | Ruin = dropping below $12,750 |
| Aggressive | 25% | Ruin = dropping below $11,250 |
What's good:
| p_ruin | Assessment |
|---|---|
| < 0.01 | Excellent. Very unlikely to hit the ruin level |
| 0.01 - 0.05 | Acceptable for most risk profiles |
| 0.05 - 0.10 | Elevated. Conservative users should avoid |
| > 0.10 | Red flag. Strategy is too aggressive for the capital allocation |
Why it matters: p_ruin is the "tail risk" metric. A strategy might have great CAGR and win rate but still have high p_ruin if its losing trades are catastrophic (e.g. wide wings with low protection). Unlike max_drawdown (which reports the median worst case), p_ruin tells you the probability of hitting a dangerous level.
sharpe_ratio
What it is: Annualized Sharpe ratio — excess return divided by return volatility across Monte Carlo paths. Uses a configurable risk-free rate (default 4.5%). Zero in EV simulation mode.
Sharpe and Sortino are NSGA-II objectives: the optimizer actively selects for risk-adjusted return, not just raw CAGR.
What's good:
| Sharpe | Assessment |
|---|---|
| < 0.5 | Low. Returns do not compensate for volatility |
| 0.5 - 1.0 | Typical for conservative IC strategies |
| 1.0 - 2.0 | Strong risk-adjusted return |
| 2.0 - 3.0 | Excellent. Verify with OOS validation |
| > 3.0 | Suspicious. Likely a simulation artefact |
Note: The engine clamps Sharpe to ±10.0. Trials with Sharpe above 5.0 are pruned during optimisation and will not appear in results.
sortino_ratio
What it is: Annualized Sortino ratio — excess return divided by downside deviation (only negative returns are penalised). More relevant than Sharpe for IC strategies because profitable trades should not count as "risk." Zero in EV simulation mode.
What's good:
| Sortino | Assessment |
|---|---|
| < 1.0 | Low. Downside losses are large relative to returns |
| 1.0 - 3.0 | Solid downside-adjusted return |
| 3.0 - 5.0 | Strong. Losses are rare and small relative to gains |
| > 5.0 | Suspicious. Near-zero downside deviation is unrealistic |
Note: The engine clamps Sortino to ±10.0. A strategy reporting 10.0 means the cap was hit — downside deviation was effectively zero, which is not realistic over multi-year horizons.
cvar_drawdown (CVaR / Expected Shortfall)
What it is: Mean of the worst 5% of drawdown paths, scaled by
sqrt(n_concurrent_lanes). More tail-sensitive than median drawdown
because it focuses on the worst outcomes, not the typical case. Zero in
EV simulation mode.
What's good:
| CVaR | Assessment |
|---|---|
| < 0.05 | Very conservative tail risk |
| 0.05 - 0.15 | Moderate. Worst-case losses are contained |
| 0.15 - 0.30 | Elevated. The 5% worst paths are painful |
| > 0.30 | Aggressive. Tail risk is substantial |
Why it matters: max_drawdown is the median worst case. CVaR captures the tail — what happens when things go really wrong. A strategy with 8% max_drawdown but 25% CVaR has a long left tail that only shows up in extreme scenarios.
dd_floor (Drawdown Floor)
What it is: Theoretical minimum drawdown from position sizing:
max_loss_per_entry / initial_capital. If median drawdown is below this
floor, the simulation never experienced a single full-position loss,
which is statistically implausible over multi-year horizons. Zero in EV
simulation mode.
Red flag: When max_drawdown < dd_floor, the simulation is
suspiciously optimistic — every single trade exited profitably or at
a partial loss, which does not happen in practice.
capital_efficiency
What it is: Fraction of the max_capital budget that is actively
deployed in positions at any given time. 0.65 means 65% of capital is
working. This is a diagnostic metric (not an optimisation objective).
What's good:
| Efficiency | Assessment |
|---|---|
| < 0.30 | Low. Most capital sits idle. Safe but not productive |
| 0.30 - 0.60 | Moderate. Reasonable balance of deployment and reserve |
| 0.60 - 0.80 | High. Good capital utilization with manageable risk |
| > 0.80 | Very high. Little reserve for margin calls or drawdowns |
Trade-off: Higher efficiency = higher CAGR but less safety margin.
annualized_ror
What it is: Annualised return on risk — annualized_pnl / max_capital.
A linear rescaling of annual P&L by capital. This is a diagnostic metric
(not an optimisation objective — Sharpe and Sortino replaced it).
n_lanes
What it is: Number of concurrent IC positions the strategy runs.
Context: More lanes means more diversification across expiry dates and strike levels. A 3-lane strategy has 3 ICs open simultaneously, staggered by entry date. If one IC takes a loss, the others may still be profitable.
| n_lanes | Description |
|---|---|
| 1 | Single position. All-or-nothing each cycle |
| 2-3 | Moderate. Staggered entries reduce per-trade impact |
| 4-6 | Higher diversification. Each position is a smaller % of capital |
| > 6 | Requires sufficient capital. Diminishing diversification returns |
entry_freq_days
What it is: Average calendar days between opening new positions.
| Frequency | Description |
|---|---|
| 7 | Weekly entries |
| 14 | Biweekly entries |
| 21-30 | Monthly entries |
More frequent entries combined with more lanes creates a "conveyor belt" of overlapping positions, smoothing P&L.
avg_days_held
What it is: Average holding period per position in calendar days. IC strategies typically hold 21-45 days.
Shorter holds (< 21 days) indicate more active management (early exits, tight profit targets). Longer holds (> 45 days) indicate a more passive approach.
total_trades
What it is: Total number of simulated trades. More trades means more statistical confidence in the other metrics.
| Trades | Confidence |
|---|---|
| < 50 | Low. Results are noisy. Treat with caution |
| 50-200 | Moderate. Reasonable for decision-making |
| > 200 | High. Metrics are statistically meaningful |
Effect of Effort Level on Result Quality
Higher effort levels produce tighter confidence intervals on all metrics. The key driver is n_paths (Monte Carlo paths) and oos_seeds:
| Effort | Paths | OOS Seeds | Est. time | Effect on metrics |
|---|---|---|---|---|
| free | 1,000 | 3 | ~45s | Noisy estimates. p_ruin and drawdown have wide bands |
| low | 3,000 | 3 | ~40s | 3x tighter. Suitable for quick scans |
| medium | 5,000 | 10 | ~2 min | Reliable for trade decisions. 10-seed OOS catches most overfitting |
| high | 10,000 | 20 | ~8 min | Tight estimates. 10-year horizon captures rare regimes |
| ultra | 10,000 | 50 | ~12 min | Highest confidence. 50-seed OOS gives publication-grade validation |
If you see a strategy with win_rate=0.82 on low effort, re-running on
high or ultra will give you a more precise estimate -- it might
tighten to 0.80 or widen to 0.84, but you'll know it's real.
Robustness (Out-of-Sample Validation)
The robustness field contains OOS validation results, which measure
whether the strategy's performance holds up outside the training data.
oos_cagr_median
Median CAGR across out-of-sample seeds. This is the "realistic" CAGR -- what you might expect in production, stripped of in-sample bias.
oos_cagr_p5
5th percentile CAGR across OOS seeds. This is the worst-case scenario from the validation. If this number is positive, the strategy survived even the worst resample.
overfit_gap
In-sample CAGR minus OOS median CAGR. Measures how much of the in-sample performance is "real" versus "overfit."
| Overfit gap | Assessment |
|---|---|
| < 0.02 | Excellent. In-sample and OOS performance are nearly identical |
| 0.02 - 0.05 | Acceptable. Modest overfitting |
| 0.05 - 0.10 | Elevated. The strategy may have overfit to training data |
| > 0.10 | Red flag. In-sample performance is unreliable |
Free vs premium OOS
| Aspect | Free | Premium |
|---|---|---|
| Seeds | 3 | 3-50 (effort-dependent) |
| Mode | Bootstrap resample | Full GARCH Monte Carlo |
| Gap metric | 3-seed median | Median over N seeds (statistically robust) |
The free tier provides a basic sanity check with 3 OOS seeds. Premium tiers increase seeds with effort level (up to 50 at ultra), and use parametric GARCH simulation for higher fidelity.
How to Compare Strategies
When reviewing top_strategies, focus on these trade-offs:
CAGR vs max_drawdown
The most important trade-off. A strategy with lower CAGR but much lower drawdown may be the better choice for most users. The Pareto front presents the optimal trade-off boundary -- no strategy below the front beats one on the front on both metrics.
win_rate vs CAGR
Higher win rate often comes at the cost of smaller per-trade profit. A 90% win-rate strategy with 8% CAGR is more predictable but slower growing than a 75% win-rate strategy with 20% CAGR.
capital_efficiency vs p_ruin
Deploying more capital increases CAGR but also increases exposure. If p_ruin is above your comfort threshold, the strategy is too aggressive for your capital allocation.
Overfit gap as a tie-breaker
When two strategies have similar CAGR and drawdown, prefer the one with a lower overfit gap. It is more likely to perform consistently in live trading.
Red Flags
Risk metrics
- p_ruin > 0.10 -- strategy is too aggressive
- max_drawdown > 0.25 -- hard to recover from psychologically
- capital_efficiency > 0.90 -- no safety margin for adverse moves
- overfit_gap > 0.10 -- in-sample results are unreliable
- total_trades < 50 -- insufficient sample size
Ratio warnings (automated sanity checks)
The backend flags these automatically in the response warnings array:
- Sharpe > 5.0 -- no IC strategy sustains this; likely a simulation artefact
- Sharpe > 2.5 -- high for an IC strategy; verify with OOS before trading
- Sortino = 10.0 (engine cap) -- downside deviation is near zero, meaning the simulation produced almost no losing paths. Not realistic.
- Sortino > 5.0 -- near-zero downside deviation is suspicious
Consistency checks
The backend also flags impossible metric combinations:
- Low win rate (< 55%) with near-zero CVaR -- a strategy that loses half its trades cannot avoid tail drawdowns
- Win rate < 70% with 0% P(Ruin) and positive CAGR -- losing streaks over multi-year simulations should produce nonzero ruin probability
- High CAGR (> 10%) with near-zero CVaR -- high returns without measurable tail risk are likely a simulation artefact
- max_drawdown < dd_floor -- the simulation never experienced a full-position loss, which is implausible over multi-year horizons
- Avg PoP and win rate disagree by > 10pp -- both come from the same simulation and should track closely
Cross-references
- Create Strategy -- running the optimizer
- Find Iron Condors -- turning strategies into trades
- Free vs Premium -- algorithm and OOS differences by tier
- Full Trading Workflow -- complete workflow