Appearance

Personalize your experience

Mode
Accent Color
Direction
MarketplacestrategiesAurora Ignition
QuaScript

Aurora Ignition

Free

First expansion out of ranked volatility compression

0.0(0)
0 installs 0 0 comments
Q
159 listings

The QuaTick team's QuaScript analyses, run by the native C++ engine.

View Profile
quascriptstrategyvolatilitycompressionbreakout
Free
Backtest this strategy Open in QuaTick IDE Edit in IDE
Version
Updated
Compatible

Live engine preview

QuaScriptQuaScript

The QuaScript engine's own output on the chart the terminal uses. Change the settings or edit the code and press Run to recompute it.

Aurora Ignitionengine result
Loading the engine result…
quatick-charts · QuaScript engine on synthetic 1-minute bars · drag to pan · scroll to zoom · Run executes the script on the engine (⌘/Ctrl+Enter while editing)

About

Trades the first expansion out of a quiet market. Volatility (ATR over price) is ranked against its own history; a rank under the quiet level marks stored energy. When, soon after such a compression, price closes outside the second volatility curtain around a two-pole smoothed centre while the rank is rising, the expansion has started. The position rides the centre line: the stop trails at the centre once the trade is a full ATR in profit. Entry: rank below `quiet` within the last `memory` bars, close beyond centre +/- 2 curtains (`width` ATR each), rank rising. Exit: initial stop at the centre (at least 1 ATR), trailing stop at the centre after +1 ATR, close back inside the first curtain on the wrong side, or extreme volatility rank (take the move). Risk: 1 % per trade.


Settings

Centre smoothing: 34

ATR length: 20

Curtain spacing (ATR): 0.6

Volatility rank window: 250

Quiet rank (%): 15

Take-profit rank (%): 97

Compression memory (bars): 20


Measured backtests

Run by the backtest engine on public candles, 2025-11-01 to 2026-11-01, with the script's own commission and slippage, on BTCUSDT 1h (Binance) and ETHUSDT 1h (Binance). The figures per market are in the Measured backtest panel below. Past results do not predict future returns.


Backtest it yourself

Open it on the backtesting page to run it on any symbol, interval and date range, then use Monte Carlo, optimisation, walk-forward and robustness tests.

Strategy Rules

Entry Conditions

  • ▸ rank below `quiet` within the last `memory` bars, close beyond centre +/- 2 curtains (`width` ATR each), rank rising

Exit Conditions

  • ▸ initial stop at the centre (at least 1 ATR), trailing stop at the centre after +1 ATR, close back inside the first curtain on the wrong side, or extreme volatility rank (take the move)

Measured backtest

BTCUSDT 1h (Binance), 2025-11-01 to 2026-11-01 · backtest engine, script costs included

Backtest this strategy

-21.9%

Return

-2.03

Sharpe

-22.4%

Max DD

29.5%

Win Rate

122

Trades

MarketTradesReturnSharpeMax DDWin rateProfit factor
BTCUSDT 1h122-21.9%-2.03-22.4%29.5%0.56
ETHUSDT 1h124-19.7%-1.42-20.6%29.8%0.69

Past results on historical data do not predict future returns.

Source Code

Edit in IDE
quascript
1strategy "Aurora Ignition" {
2 overlay = true
3 capital = 100000
4 commission = 0.05
5 slippage = 1
6 sizing = risk_percent
7 max_leverage = 1
8 size = 1
9 pyramiding = 1
10}
11/// Trades the first expansion out of a quiet market. Volatility (ATR over price) is ranked against
12/// its own history; a rank under the quiet level marks stored energy. When, soon after such a
13/// compression, price closes outside the second volatility curtain around a two-pole smoothed
14/// centre while the rank is rising, the expansion has started. The position rides the centre line:
15/// the stop trails at the centre once the trade is a full ATR in profit.
16/// Entry: rank below `quiet` within the last `memory` bars, close beyond centre +/- 2 curtains
17/// (`width` ATR each), rank rising. Exit: initial stop at the centre (at least 1 ATR), trailing
18/// stop at the centre after +1 ATR, close back inside the first curtain on the wrong side, or
19/// extreme volatility rank (take the move). Risk: 1 % per trade.
20use "viz/premium" as pr
21len = param.int(34, title = "Centre smoothing", min = 5, max = 400, group = "Aurora")
22atr_n = param.int(20, title = "ATR length", min = 2, max = 400, group = "Aurora")
23width = param.float(0.6, title = "Curtain spacing (ATR)", min = 0.1, max = 3, step = 0.05, group = "Aurora")
24rank_n = param.int(250, title = "Volatility rank window", min = 30, max = 5000, group = "Regime")
25quiet = param.float(15, title = "Quiet rank (%)", min = 1, max = 50, group = "Regime")
26hot = param.float(97, title = "Take-profit rank (%)", min = 60, max = 100, group = "Regime")
27memory = param.int(20, title = "Compression memory (bars)", min = 2, max = 200, group = "Signals")
28mid = ta.super_smoother(close, len)
29a = ta.atr(atr_n)
30rank = math.coalesce(stat.percent_rank(a / close, rank_n), 50)
31since_quiet = ta.bars_since(rank < quiet)
32recent = not math.is_na(since_quiet) and since_quiet <= memory
33up2 = mid + 2 * width * a
34dn2 = mid - 2 * width * a
35go_l = recent and close > up2 and rank > rank[1]
36go_s = recent and close < dn2 and rank > rank[1]
37persist used = false
38if rank < quiet { used := false }
39flat = position.size == 0
40if flat and go_l and not used {
41 order.market("L", side.long)
42 exit.bracket("L stop", entry = "L", stop = math.min(mid, close - a))
43 used := true
44}
45if flat and go_s and not used {
46 order.market("S", side.short)
47 exit.bracket("S stop", entry = "S", stop = math.max(mid, close + a))
48 used := true
49}
50// trail at the centre once a full ATR in profit
51if position.size > 0 and close - position.avg_price > a { exit.bracket("L stop", entry = "L", stop = mid) }
52if position.size < 0 and position.avg_price - close > a { exit.bracket("S stop", entry = "S", stop = mid) }
53if position.size > 0 and close < mid - width * a { exit.close("L") }
54if position.size < 0 and close > mid + width * a { exit.close("S") }
55if position.size != 0 and rank > hot { exit.close_all() }
56risk.max_drawdown(25)
57c = render.line(mid, "Centre", color = color.translucent(color.white, 35), width = 1.5)
58o_up = render.line(up2, "Ignition line above", color = color.translucent(color.amber.300, 40), width = 1)
59o_dn = render.line(dn2, "Ignition line below", color = color.translucent(color.amber.300, 40), width = 1)
60glow = color.ramp(rank, 0, 100, "magma", 70)
61render.band(o_up, c, color = glow, opacity = 1, title = "Upper aurora")
62render.band(c, o_dn, color = glow, opacity = 1, title = "Lower aurora")
63render.mark(go_l and flat and not used[1], shape = shape.triangle_up, at = anchor.below_bar, color = color.amber.300, text = "Ignite", title = "Long ignition")
64render.mark(go_s and flat and not used[1], shape = shape.triangle_down, at = anchor.above_bar, color = color.orange.400, text = "Ignite", title = "Short ignition")
65persist t = draw.table.create(anchor.top_right, 5, 2)
66if bar.is_last {
67 pr.heading(t, 2, "Aurora Ignition", "Strategy · compression to expansion")
68 pr.row(t, 2, "Volatility rank", str.format("{:.0f} %", rank), rank < quiet ? color.violet.300 : rank > hot ? pr.WARN : color.white)
69 pr.row(t, 3, "Compression", recent ? str.format("{} bars ago", since_quiet) : "None recent", recent ? pr.BULL : pr.LABEL)
70 pr.row(t, 4, "Armed", recent and not used ? "Yes" : "No", recent and not used ? pr.BULL : pr.LABEL)
71}
72 
Read-only preview. Open in the QuaTick IDE to edit and deploy.

Reviews

No reviews yet. Be the first to review this listing.

Discussion

Sign in to join the discussion. Your posts and replies show up on your profile.