Volatility squeeze
Loading...
Historical market data / choose a provider and download prices
Price / squeeze
Buy a squeeze release with positive momentum. Exit when momentum crosses zero downward. Decisions at completed closes, fills at the next open.
Account value
Drawdown
% below prior peakOriginal rule vs RSI entry filter
| PERIOD / UTC | RULE | NET RETURN | MAX DRAWDOWN | CLOSED TRADES | BLOCKED ENTRY SIGNALS |
|---|
Both periods start flat with the same cash and costs. Earlier prices warm indicators. No position crosses the split. A date split does not prove robustness after repeated testing.
Loading closed trades...
| ENTRY (UTC) | EXIT (UTC) | ENTRY PRICE | EXIT PRICE | NET P&L | RETURN | CHART |
|---|
Net return by lookback and Keltner width
Columns: lookback in bars. Rows: Keltner ATR multiplier. Cell: net return (%).
165 configurations. Bollinger width is held at the current value, with the same data, window, costs, and allocation.
The map is calculated on request.
Click a cell to load its settings. Look for broad regions, then inspect the trades. This is in-sample exploration.
Execution. Signals use completed bars. Market orders execute at the following bar's open. The last bar cannot create a fill without another bar. One long position at a time, no leverage, shorting, stops, or partial-fill model.
Costs. Fee and slippage inputs are basis points per side. One basis point is 0.01%. Slippage moves buys up and sells down. Cash allocation is the fraction of available cash used on entry, including fees.
Accounting. Starting cash is 10,000 account-currency units. Equity includes idle cash and any open position marked at each close. Return and drawdown include open positions. Win rate and profit factor use closed trades only. An undefined profit factor displays n/a.
Benchmark. Buy at the first evaluation bar's open, with the same initial cash allocation, fees, and slippage, then hold. The final position is marked at the last close. Neither benchmark nor strategy forces a final liquidation.
Entry filter. Optional RSI(14), Wilder smoothing. Entry requires RSI strictly above the displayed threshold at the completed signal bar. Exits stay unchanged. The parameter map holds this filter fixed.
Split comparison. Both rules use identical parameters and costs. Each side starts flat, uses earlier data only for indicator warmup, and ends marked to market. At least 100 loaded bars are required on each side. The date split is a comparison tool, not protection against repeated tuning.
Data and warmup. Demo series are synthetic. For CSV input, supply completed conventional OHLC bars in account-currency units. Timestamps label bars, not when their close became knowable. Naive CSV timestamps are interpreted as UTC. Gaps are not filled.
Indicator. Shared lookback for all components. Bollinger = close SMA +/- width times population standard deviation. Keltner = close EMA +/- width times Wilder ATR, both seeded by VBT with adjust=False. Compression requires both Bollinger boundaries strictly inside Keltner. Momentum fits a line over close minus the average of the rolling high/low midpoint and close SMA, evaluated at the current bar. Momentum needs 2 x lookback - 1 bars. This is our specified variant, not a claim of TradingView script parity.
Evaluation. Each selected window starts flat. Indicators use the earlier loaded history. A release requires a valid momentum observation on both bars. The map holds Bollinger width fixed and tests lookback x Keltner width. Keep an untouched test period outside this exploration.
Chart display. Price candles, bands and momentum retain all bars. Equity lines use at most 1,400 regularly spaced observations plus the worst drawdown observation. Metrics and exported trades use the complete simulation.
Timing. The server warms the engine at startup. Simulation timing includes portfolio construction and account-value calculation. Response timing includes the request and JSON download. Update timing also includes updating the chart data and trade table. It does not measure final canvas paint. Network/data loading and first-run warmup are separate.