Help & Documentation

Everything you need to understand Kestrel Signal: how to build and test strategies, what every metric means, and how to tell a real edge from statistical noise.

Contents
1. Getting Started2. Metrics Explained· Deflated Sharpe Ratio (DSR)· Probabilistic Sharpe Ratio (PSR)· Sharpe Ratio· Sortino Ratio· Calmar Ratio· Maximum Drawdown· Win Rate· CAGR & Total Return3. What Makes a Good Strategy4. Walk-Forward Validation5. CPCV (Combinatorial Cross-Validation)6. Strategy Formats7. FAQ

1. Getting Started

Kestrel Signal lets you backtest trading strategies and immediately see whether the results are statistically meaningful — not just profitable on historical data. Here's the typical workflow:

  1. Create a strategy — Use the visual builder (JSON DSL) or, on Lab/Pro tiers, upload a Python strategy. Every strategy has a name, asset class, and a version history.
  2. Run a backtest — Choose a symbol, timeframe, initial capital, and commission. The engine will run VectorBT under the hood and produce deterministic results (same inputs → identical hash every time).
  3. Read the validity metrics — Before you celebrate the Sharpe ratio, check the DSR and PSR. A high Sharpe with a low DSR means your edge evaporates after accounting for multiple testing.
  4. Walk-forward test (Researcher+) — Split your data into in-sample / out-of-sample windows. If performance collapses out-of-sample, the strategy was curve-fitted.
  5. CPCV analysis (Lab+) — Combinatorial Purged Cross-Validation gives a distribution of out-of-sample Sharpe ratios and a Probability of Backtest Overfitting (PBO) score.
  6. Publish to gallery — Share validated strategies publicly (optional). The gallery shows DSR prominently so readers can immediately assess credibility.

Free tier includes DSR and PSR — statistical validity metrics are never paywalled. You can tell if a strategy has real edge on a free account.

2. Metrics Explained

Deflated Sharpe Ratio (DSR)

The DSR is Kestrel Signal's primary validity signal. It adjusts the Sharpe Ratio downward based on three sources of statistical bias:

  1. Non-normality of returns — Most strategies produce skewed, fat-tailed returns. The Sharpe ratio assumes normality; the DSR corrects for this.
  2. Track record length — A short backtest can produce a high Sharpe by chance. DSR penalises short histories.
  3. Number of trials — If you tested 50 parameter combinations and picked the best one, the DSR inflates the significance threshold accordingly. This is the multiple-testing correction.
DSRInterpretationAction
≥ 0.95Very strong evidence of a real edgeProceed to walk-forward validation
0.80 – 0.95Good signal; worth further investigationWalk-forward, check out-of-sample decay
0.50 – 0.80Marginal — may be noise or mild overfittingRun CPCV before trusting results
< 0.50Statistically insignificant — likely noiseRedesign the strategy; do not trade live

The DSR tier displayed on each backtest ("Strong", "Good", "Marginal", "Weak") maps to these thresholds. Published strategies show DSR prominently in the gallery.

📊Probabilistic Sharpe Ratio (PSR)

The PSR answers a simpler question: What is the probability that the true Sharpe ratio of this strategy is greater than a benchmark Sharpe (typically 0)?

It is derived from the same statistical framework as the DSR but expressed as a probability (0–1). A PSR of 0.95 means there's a 95% probability that the strategy has a positive Sharpe in a new, unseen period — assuming stationarity.

PSRInterpretation
≥ 0.95High confidence in a real positive edge
0.80 – 0.95Reasonably confident; worth further testing
0.50 – 0.80Uncertain — could be random chance
< 0.50Coin-flip territory; no meaningful evidence of edge

📐Sharpe Ratio

The Sharpe Ratio measures risk-adjusted return: how much excess return you earn per unit of volatility. Defined as:

Sharpe = (Mean Return − Risk-Free Rate) / Standard Deviation of Returns

On Kestrel Signal, the risk-free rate is set to 0% for simplicity (appropriate for short-term systematic strategies). The Sharpe is calculated on daily returns and annualised using √252.

Warning: The Sharpe ratio alone is not a reliable quality signal. A Sharpe of 2.0 from a 6-month backtest with 100 parameter sweeps is meaningless. Always check DSR and PSR first.

SharpeRough interpretation (with sufficient sample)
≥ 2.0Exceptional — rare in real markets
1.0 – 2.0Good — typical of quality systematic strategies
0.5 – 1.0Mediocre — may not survive costs and slippage
< 0.5Poor — unlikely to be profitable after costs

📉Sortino Ratio

Like the Sharpe Ratio, but only penalises downside volatility (returns below a target, usually 0%). Upside volatility is not penalised — which is more intuitive for strategies with positive skew.

Sortino = (Mean Return − Target Return) / Downside Deviation

A Sortino Ratio significantly higher than the Sharpe Ratio suggests the strategy has positively-skewed returns — good losses are rare and wins are frequent. This is typical of trend-following and momentum strategies.

🏔️Calmar Ratio

Measures annualised return relative to maximum drawdown. Useful for assessing whether the strategy's gains justify its worst-case losses.

Calmar = Annualised CAGR / |Max Drawdown|
CalmarQuality signal
≥ 3.0Excellent risk-adjusted performance
1.0 – 3.0Good
0.5 – 1.0Mediocre — drawdowns are too deep relative to gains
< 0.5Poor — risk not compensated

🕳️Maximum Drawdown (Max DD)

The largest peak-to-trough decline in portfolio value during the backtest period, expressed as a percentage. Max drawdown is crucial for position sizing and psychological sustainability — can you hold through a 40% decline?

Max DrawdownTypical tolerance
< 10%Very conservative; suitable for most capital
10% – 20%Moderate; sustainable for most traders
20% – 35%High; requires strong conviction and sizing discipline
> 35%Extreme; most retail traders will abandon mid-drawdown

Note: Drawdowns in live trading often exceed backtest drawdowns due to slippage, execution latency, and market regime changes.

🎯Win Rate

The percentage of closed trades that are profitable. Win rate alone tells you very little — a strategy can be highly profitable with a 30% win rate (if winners are large) or be losing money despite a 70% win rate (if losers are large).

The relevant metric is profit factor (gross profit / gross loss) orexpected value per trade = (win rate × avg win) − (loss rate × avg loss). A positive expected value is what matters, not win rate alone.

📈CAGR & Total Return

Total Return is the raw percentage gain from initial capital over the entire backtest period. CAGR (Compound Annual Growth Rate) normalises this to an annualised percentage, making strategies with different test durations comparable.

CAGR = (Final Value / Initial Value)^(1 / Years) − 1

High CAGR with high drawdown is common in backtests but unsustainable live. Aim for CAGR / Max Drawdown (Calmar) ≥ 1.0 as a minimum threshold.

3. What Makes a Good Strategy

There is no single threshold for a "good" strategy — it depends on your capital, trading frequency, and risk tolerance. But here are the minimum bars we recommend before taking a backtest seriously:

MetricMinimumTargetExceptional
DSR≥ 0.50≥ 0.80≥ 0.95
PSR≥ 0.60≥ 0.80≥ 0.95
Sharpe Ratio≥ 0.5≥ 1.0≥ 2.0
Sortino Ratio≥ 0.7≥ 1.5≥ 3.0
Calmar Ratio≥ 0.5≥ 1.0≥ 3.0
Max Drawdown≤ 35%≤ 20%≤ 10%
Sample size (bars)≥ 500 bars≥ 1,000 bars≥ 2,500 bars
# Trades≥ 30 trades≥ 100 trades≥ 500 trades

Small sample warning: Kestrel Signal requires at least 50 data rows for upload and flags strategies with fewer than 30 trades. Short backtests inflate all metrics — a 3-month backtest with 5 trades proves nothing.

4. Walk-Forward Validation

Walk-forward validation splits your data into sequential in-sample (IS) and out-of-sample (OOS) windows to test whether a strategy's parameters generalise to unseen data.

Two modes are supported (Researcher tier and above):

  1. Rolling window — IS and OOS windows slide forward through time. Each IS window is the same length. Good for detecting parameter instability over time.
  2. Anchor window — IS window grows from a fixed start date while OOS window slides forward. Good when you want to use all historical data for fitting.

The key metric is the Walk-Forward Efficiency (WFE):

WFE = Mean OOS Sharpe / Mean IS Sharpe
WFEMeaning
≥ 0.70OOS performance retains ≥70% of IS — very good generalisation
0.50 – 0.70Moderate decay — investigate parameter sensitivity
< 0.50Heavy OOS decay — the strategy is likely overfit
NegativeStrategy loses money OOS — clear overfitting signal

5. CPCV — Combinatorial Purged Cross-Validation

CPCV (Lab tier and above) is the gold standard for backtest validation. It generates every possible combination of training and test splits from your data, producing a full distribution of out-of-sample Sharpe ratios rather than a single number.

The most important output is the Probability of Backtest Overfitting (PBO) — the fraction of CPCV splits where the OOS Sharpe is worse than a benchmark (usually 0).

PBOMeaning
< 0.05Very low overfit probability — strong evidence of real edge
0.05 – 0.15Low-moderate overfit — proceed cautiously
0.15 – 0.40Moderate overfit — reduce parameters, extend data
≥ 0.40High probability of overfitting — do not trade live

CPCV also produces a median OOS Sharpe and a 5th percentile Sharpe — your worst-case expected performance. Size positions to survive the 5th percentile, not the median.

6. Strategy Formats

JSON DSL (All tiers)

The JSON DSL is a declarative strategy format that defines indicators, entry conditions, and exit conditions. The visual builder generates valid DSL automatically.

A minimal DSL strategy looks like this:

{ "schema_version": "1.0", "metadata": { "name": "SMA Crossover", "category": "trend", "asset_class": "equities" }, "indicators": [ { "id": "fast", "type": "sma", "inputs": { "source": "close", "period": 20 } }, { "id": "slow", "type": "sma", "inputs": { "source": "close", "period": 50 } } ], "entries": [{ "id": "e1", "side": "long", "condition": "fast.value[-1] > slow.value[-1] and fast.value[-2] <= slow.value[-2]", "size": { "type": "percent_equity", "value": 95.0 } }], "exits": [{ "id": "x1", "match_entry": "e1", "condition": "fast.value[-1] < slow.value[-1]" }] }

Python Upload (Lab+ only)

Lab and Pro tier users can upload Python strategy files that run in a sandboxed Firecracker microVM. The sandbox enforces strict resource limits and static analysis (Bandit + Semgrep) before execution. Network access, filesystem writes, and subprocess calls are all blocked.

7. Frequently Asked Questions

Q: Why is my DSR lower than my Sharpe Ratio?

A: The DSR deflates the Sharpe Ratio based on how many trials you ran, how short your backtest is, and how non-normal your returns are. A Sharpe of 2.0 from a 3-month backtest with 50 parameter combinations will produce a very low DSR — that's correct behaviour, not a bug.

Q: What symbol/ticker data is available?

A: We provide 5 years of synthetic OHLCV data for 50 instruments covering equities, crypto, and FX. The data is generated from a calibrated GBM model with realistic volatility clustering. Pro tier users can upload their own CSV data (max 10,000 rows per file, 5 MB).

Q: Are the backtest results deterministic?

A: Yes. Every backtest is identified by a SHA-256 hash derived from the strategy version ID, data snapshot ID, engine version, and configuration. Identical inputs always produce byte-identical results. The hash is shown on every result page.

Q: What does 'equity curve' show?

A: The equity curve is the portfolio value over time, starting at your initial capital. Each point represents the portfolio value at the close of that bar. Drawdown is the percentage decline from any peak in this curve.

Q: How is commission/slippage applied?

A: Commission is applied as a percentage of trade value on entry and exit. Slippage is applied as a percentage of price on fills. Both are applied to each trade individually. Default values are 0.1% commission and 0.05% slippage — conservative but realistic for retail traders on liquid instruments.

Q: Can I trade live from this platform?

A: No. Kestrel Signal is a research and backtesting platform only. It does not connect to any broker or exchange, and cannot execute live orders. This is intentional — we're software, not an advisory or execution service.

Q: How do I upload custom price data?

A: Pro tier users can upload CSV files via the Data page. The CSV must include columns: date (YYYY-MM-DD), open, high, low, close, volume. Prices must be positive; volume must be non-negative. OHLC ordering violations (e.g., low > high) are automatically skipped. Max 10,000 rows.

Q: What happens to my account if I cancel my subscription?

A: You drop to the free tier immediately (or at end of billing period, depending on your Paddle subscription settings). Your strategies, backtest history, and exported data are retained. Custom data uploads that exceed free tier limits will no longer be accessible for new backtests, but the data itself is not deleted.

Something unclear? Found a mistake?

Use the feedback button (bottom-right) to send us a suggestion or correction. We update this documentation regularly.