SPB Git

Repository Public

README.md 1.5 KB

# vol_breakout_perp / 1

Hypothesis. A move that is large relative to the volatility that preceded it is information being absorbed, not noise: after a 24-hour move of more than two "normal" 24-hour standard deviations, the price continues in the same direction for the next two days more often than it reverses.

Mechanism. At bar t, move = log(close[t] / close[t − 24]) and sigma = standard deviation of the 168 hourly log-returns that end where the move starts, times √24. A breakout is |move| > 2 · sigma. The position is the side of the most recent breakout among the last 48 bars (long after an upward breakout, short after a downward one), gross / N = 25 % of equity per asset, and flat when no breakout occurred in the last 48 bars. A new breakout in the opposite direction flips the position. The volatility window deliberately excludes the move itself, otherwise a large move would raise its own threshold.

What would refute it. A test Sharpe ratio indistinguishable from zero, or from ts_momentum_perp/1 (then the volatility filter adds nothing to plain momentum). The opposite hypothesis is zscore_reversion_perp/1: both cannot be right at the same horizon, and if neither is distinguishable from zero the honest conclusion is that large hourly-scale moves carry no usable information after costs. Entering after the move means buying high and selling low when the move was a liquidation cascade that reverts.

Parameters were written before any backtest on the Hyperliquid data and are not tuned on the test split.

Files main
Menu

Theme