Kurt -- Rolling Kurtosis

Contents


Overview

Rolling Kurtosis measures how fat the tails of the return distribution are over a rolling window. It is computed on log returns using excess kurtosis (kurtosis relative to the normal distribution). Kurtosis answers a critical risk question: is the market producing more extreme moves than expected?

The formula computes the fourth moment of the return distribution, normalized by its variance, minus 3:

Kurtosis = E[(r - mean)^4] / std^4 - 3

The subtraction of 3 makes the result relative to the normal distribution (which has a kurtosis of 3). This means a reading of 0 indicates the tails match what you would expect from a normal distribution. Positive values mean the tails are fatter -- extreme moves are happening more often than a bell curve would predict.

  • High kurtosis (fat tails) means the market is producing extreme moves -- both up and down -- more frequently than normal. This is the domain of gap opens, flash crashes, and "impossible" events. Stop-losses get blown through because price jumps past them.
  • Low kurtosis (thin tails) means the market is behaving predictably. Returns cluster near the mean with few outliers. This is a safe, stable environment where systematic strategies perform well.
  • Zero kurtosis means the tails match the normal distribution exactly. This is the theoretical baseline.

The key insight: kurtosis is a risk indicator. It does not tell you which direction the market will move -- it tells you how extreme the moves are likely to be. High kurtosis environments are dangerous because they produce the outsized moves that destroy positions. Low kurtosis environments are where systematic strategies thrive because price behavior is predictable and well-behaved.


Format

kurt_{period}

The period defines the rolling lookback window -- how many candles of log returns are included in the kurtosis calculation.

ExamplePeriodUse Case
kurt_6060Standard -- captures tail behavior over a meaningful window
kurt_100100Slower -- more stable regime identification, filters out transient spikes
kurt_3030Faster -- reacts quicker to changing tail behavior, noisier

Period range: 20 to 500.

Value range: Typically -2.0 to +10.0. 0 = normal distribution tails. Positive = fat tails (more extremes than normal). Negative = thin tails (fewer extremes than normal). Values above 4 indicate a highly volatile, tail-heavy environment.


Understanding Kurtosis Values

Kurtosis values are standardized (excess kurtosis relative to the normal distribution), making them universal across assets and timeframes.

Kurtosis RangeZoneInterpretation
Below 0Thin tailsFewer extreme moves than a normal distribution. The market is highly predictable. Ideal environment for systematic strategies -- returns are well-behaved.
0 to 2Near-normalTail behavior is close to what a normal distribution would produce. Safe for most strategies. Occasional outliers occur but at expected frequency.
2 to 4Moderately fat tailsExtreme moves are happening more often than expected. The market is producing occasional surprises. Be cautious with tight stops and leveraged positions.
Above 4Very fat tailsDanger zone. Extreme moves are frequent and large. This is when "impossible" events occur -- gap moves, flash crashes, violent whipsaws. Risk management is critical. Reduce position size or avoid new entries entirely.

Note

Crypto markets tend to have higher baseline kurtosis than traditional markets because of their 24/7 nature, thin order books, and susceptibility to news-driven events. A kurtosis of 2-3 is relatively common for crypto on hourly timeframes. Calibrate your thresholds through backtesting on your specific pair.


Understanding Operators with Kurtosis

Each operator behaves differently with kurtosis. Because kurtosis is a risk/environment indicator, it is almost always used as a filter to gate entries and exits, not as a standalone signal.

< (Less Than) -- State-Based

What it does: The trigger is true on every candle where kurtosis is below the threshold. This detects periods when the return distribution has thin or normal tails -- a safe, predictable trading environment.

On the chart: Returns are well-behaved. There are no extreme outliers in the recent lookback window. Price moves are consistent and predictable.

[[actions.triggers]]
indicator = "kurt_60"
operator = "<"
target = "2.0"
timeframe = "1h"

Typical use: Safety filter for entries. Only enter new positions when kurtosis is low -- the environment is predictable and stop-losses are likely to function as intended. This protects against opening positions right before extreme events.

> (Greater Than) -- State-Based

What it does: The trigger is true on every candle where kurtosis is above the threshold. This detects periods when the return distribution has fat tails -- extreme moves are happening more often than expected.

On the chart: Price has been making sharp, unexpected moves. The recent return history includes large outliers -- spikes, crashes, or violent reversals.

[[actions.triggers]]
indicator = "kurt_60"
operator = ">"
target = "4.0"
timeframe = "1h"

Typical use: Risk management exit. When kurtosis spikes above 4, the market is in a dangerous state. Existing positions may need to be closed or reduced. Can also be used as a negative filter -- "do NOT enter when kurtosis > 4."

cross_below -- Event-Based

What it does: Fires once, at the exact candle where kurtosis transitions from above the threshold to below it. The previous candle had kurtosis >= the target, and the current candle has kurtosis < the target.

[[actions.triggers]]
indicator = "kurt_60"
operator = "cross_below"
target = "2.0"
timeframe = "1h"

Typical use: Detect the moment the market transitions from a fat-tail regime to a normal regime. The volatility storm has passed. This can signal that it is safe to resume systematic trading.

cross_above -- Event-Based

What it does: Fires once, at the exact candle where kurtosis transitions from below the threshold to above it. The previous candle had kurtosis <= the target, and the current candle has kurtosis > the target.

[[actions.triggers]]
indicator = "kurt_60"
operator = "cross_above"
target = "4.0"
timeframe = "1h"

Typical use: Detect the moment the market enters a fat-tail regime. Kurtosis has just spiked -- extreme moves have started. This is an early warning signal to tighten stops, reduce exposure, or exit positions entirely.

Why: Kurtosis produces floating-point values that are rarely exactly equal to any specific number. Use < or > instead.

Choosing the right operator

  • Use < to identify safe trading environments -- low kurtosis means predictable markets. The most common kurtosis operator.
  • Use > to detect dangerous environments -- high kurtosis means extreme moves are likely. Use for exits or as a negative filter.
  • Use cross_below / cross_above to detect the exact moment a risk regime changes.

TOML Examples

Low Kurtosis Safe Entry

Enter long positions only when the market is in a predictable, low-kurtosis environment. Combined with a bullish trend filter, this ensures you are trading in calm conditions where systematic strategies perform best.

[[actions]]
type = "open_long"
amount = "100 USDC"

  [[actions.triggers]]
  indicator = "kurt_60"
  operator = "<"
  target = "2.0"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "ema_20"
  operator = ">"
  target = "ema_50"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "rsi_14"
  operator = "<"
  target = "40"
  timeframe = "1h"

High Kurtosis Exit

Exit existing positions when kurtosis spikes above 4. The market is producing extreme moves and the risk of a catastrophic loss increases dramatically. This is a defensive risk management action.

[[actions]]
type = "sell"
amount = "100%"

  [[actions.triggers]]
  indicator = "kurt_60"
  operator = "cross_above"
  target = "4.0"
  timeframe = "1h"

Full Distribution: Kurtosis + Skewness

The complete distribution picture. Buy when: (1) skewness is negative (crash has occurred), (2) kurtosis is low (extreme moves have stopped -- the storm has passed), and (3) RSI confirms recovery. This is the highest-conviction contrarian setup.

[[actions]]
type = "open_long"
amount = "100 USDC"

  [[actions.triggers]]
  indicator = "skew_60"
  operator = "<"
  target = "-0.8"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "kurt_60"
  operator = "<"
  target = "2.0"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "rsi_14"
  operator = "cross_above"
  target = "30"
  timeframe = "1h"

Kurtosis Volatility Regime Filter

Use kurtosis as a volatility regime gate. Only enter DCA positions when the market is calm (low kurtosis) and price is at a discount to VWAP. This avoids accumulating during chaotic markets where prices can gap unpredictably.

[[actions]]
type = "open_long"
amount = "50 USDC"

  [[actions.triggers]]
  indicator = "kurt_100"
  operator = "<"
  target = "2.5"
  timeframe = "4h"

  [[actions.triggers]]
  indicator = "price"
  operator = "<"
  target = "vwap"
  timeframe = "4h"

  [[actions.triggers]]
  indicator = "rsi_14"
  operator = "<"
  target = "45"
  timeframe = "4h"
  max_count = 5

Tips

Kurtosis is a risk management tool, not an entry signal

Kurtosis does not tell you which direction to trade -- it tells you whether the market is safe to trade at all. Low kurtosis means the market is well-behaved and your stop-losses, position sizes, and strategy assumptions are likely to hold. High kurtosis means the market is producing moves that violate normal assumptions. Use kurtosis to decide whether to trade, then use directional indicators (RSI, EMA, MACD) to decide how to trade.

Low kurtosis = your strategies work as designed

Systematic trading strategies are typically developed and backtested under normal market conditions. When kurtosis is low, the market matches those conditions -- your strategies are operating within their design parameters. When kurtosis is high, the market has shifted to a regime your strategy was not designed for. Using kurtosis as a gate filter ensures your strategy only runs in the environment it was built for.

Combine with Skewness for the full picture

Kurtosis tells you how fat the tails are. Skewness tells you which direction the tail risk is. Together: high kurtosis + negative skew = active crash in progress (extreme downside moves). High kurtosis + positive skew = explosive rally with blow-off-top risk. Low kurtosis + negative skew = post-crash calm, high-probability bounce setup. The combination of both gives you the complete distribution shape.

Beware of high-kurtosis environments

When kurtosis exceeds 4, the market is in "fat tail" territory. This means: stop-losses may not execute at your target price (gaps and slippage), position sizing models underestimate risk, and "impossible" events become possible. During these regimes, reduce position sizes, widen stop-losses, or step aside entirely. The goal is capital preservation. You can always re-enter when kurtosis drops back to normal levels.