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.
| Example | Period | Use Case |
|---|---|---|
kurt_60 | 60 | Standard -- captures tail behavior over a meaningful window |
kurt_100 | 100 | Slower -- more stable regime identification, filters out transient spikes |
kurt_30 | 30 | Faster -- 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 Range | Zone | Interpretation |
|---|---|---|
| Below 0 | Thin tails | Fewer extreme moves than a normal distribution. The market is highly predictable. Ideal environment for systematic strategies -- returns are well-behaved. |
| 0 to 2 | Near-normal | Tail behavior is close to what a normal distribution would produce. Safe for most strategies. Occasional outliers occur but at expected frequency. |
| 2 to 4 | Moderately fat tails | Extreme moves are happening more often than expected. The market is producing occasional surprises. Be cautious with tight stops and leveraged positions. |
| Above 4 | Very fat tails | Danger 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. |
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.
= (Equal) -- Not Recommended for Kurtosis
Why: Kurtosis produces floating-point values that are rarely exactly equal to any specific number. Use < or > instead.
- 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_aboveto 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 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.
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.
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.
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.