Skew -- Rolling Skewness

Contents


Overview

Rolling Skewness measures the asymmetry of the return distribution over a rolling window. It is computed on log returns (the natural logarithm of price ratios between consecutive candles). Skewness answers a fundamental question: is the market more prone to sudden crashes or sudden rallies?

A symmetric distribution (skewness = 0) means upside moves and downside moves are roughly mirror images of each other. But financial markets are rarely symmetric. Skewness quantifies the direction of that asymmetry:

  • Negative skew means the return distribution has a long left tail. Most returns are clustered slightly positive, but occasional large drops drag the tail to the left. The market is prone to sudden crashes -- "left-tail events." This is the classic risk profile before major crypto selloffs.
  • Positive skew means the return distribution has a long right tail. Most returns are clustered slightly negative or flat, but occasional large rallies push the tail to the right. Upside surprises are more likely than downside surprises.
  • Zero skew means the distribution is roughly symmetric. Neither tail is dominant.

The key insight: skewness tells you WHERE the risk is hiding. In a negatively skewed market, the average return may look fine, but the risk of a sudden crash is elevated. For contrarian strategies, negative skew combined with oversold conditions creates high-probability bounce setups -- the market has already experienced panic, and the left tail has been "spent." For trend-following strategies, positive skew confirms that upside momentum has room to run.


Format

skew_{period}

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

ExamplePeriodUse Case
skew_6060Standard -- captures distribution shape over a meaningful window without excessive smoothing
skew_100100Slower -- more stable reading, better for regime identification
skew_3030Faster -- reacts quicker to distribution shifts, noisier

Period range: 20 to 500.

Value range: Typically -3.0 to +3.0. Values near 0 indicate a symmetric distribution. Values beyond +/-1.0 indicate significant asymmetry. Extreme values beyond +/-2.0 are rare.


Understanding Skewness Values

Skewness values are standardized and universal -- a reading of -1.5 means the same degree of left-tail asymmetry regardless of the asset or timeframe.

Skewness RangeZoneInterpretation
Below -1.0Heavily left-skewedPanic mode. The return distribution has a pronounced left tail -- large drops have dominated. The market is crash-prone. For contrarian traders: if combined with oversold momentum, the crash may be exhausting itself.
-1.0 to -0.3Moderately negativeReturns skew to the downside. Downside risk is elevated but not extreme. Caution is warranted for new long entries without confirmation.
-0.3 to +0.3Roughly symmetricNo significant asymmetry. The distribution of returns is balanced. Neither tail dominates. Neutral reading.
+0.3 to +1.0Moderately positiveReturns skew to the upside. Upside surprises are more likely than downside crashes. Favorable environment for trend-following longs.
Above +1.0Heavily right-skewedStrong upside bias. The return distribution has a pronounced right tail -- large rallies have been occurring. Momentum is heavily bullish. For contrarian traders: the upside may be overextended.

Note

Skewness is a lagging measure -- it describes what the distribution of returns has looked like over the past N candles, not what it will look like in the future. However, skewness regimes tend to persist for meaningful periods, making it a useful regime filter. A market that has been negatively skewed is statistically more likely to experience further left-tail events until the regime shifts.


Understanding Operators with Skewness

Each operator behaves differently with skewness. Because skewness is a distribution shape indicator, it is most powerful as a regime filter combined with directional triggers.

< (Less Than) -- State-Based

What it does: The trigger is true on every candle where skewness is below the threshold. This detects periods when the return distribution is negatively skewed -- crash risk is elevated or a crash has recently occurred.

On the chart: Recent returns have been dominated by sharp drops. The left tail of the distribution is elongated. This trigger stays active for as long as the skewness reading remains below the threshold.

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

Typical use: Contrarian panic-buying. When skewness is deeply negative, the market has been experiencing sharp drops. Combined with oversold RSI, this identifies washout moments where selling pressure is exhausted. Also used as a risk filter to avoid entries during crash-prone regimes.

> (Greater Than) -- State-Based

What it does: The trigger is true on every candle where skewness is above the threshold. This detects periods when the return distribution is positively skewed -- upside surprises are more frequent.

On the chart: Recent returns have included sharp rallies. The right tail of the distribution is elongated. Momentum favors the upside.

[[actions.triggers]]
indicator = "skew_60"
operator = ">"
target = "0.5"
timeframe = "1h"

Typical use: Trend confirmation filter. Positive skewness confirms that the market's return distribution favors upside moves. Combine with trend-following entries (EMA cross, price above SMA) for higher-conviction longs.

cross_below -- Event-Based

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

[[actions.triggers]]
indicator = "skew_60"
operator = "cross_below"
target = "-1.0"
timeframe = "1h"

Typical use: Detect the moment the market enters a crash regime. Skewness has just shifted to heavily negative -- the distribution has tilted toward left-tail events. This can be an exit signal to protect existing positions.

cross_above -- Event-Based

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

[[actions.triggers]]
indicator = "skew_60"
operator = "cross_above"
target = "0"
timeframe = "1h"

Typical use: Detect the moment the market exits a negative skew regime. Skewness returning to zero or positive means the distribution is normalizing -- the crash regime may be ending. This can signal the "all clear" to resume normal entries.

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

Choosing the right operator

  • Use < to detect negative skew regimes -- crash-prone or post-crash environments. The most common skewness operator.
  • Use > to confirm positive skew -- upside momentum in the return distribution.
  • Use cross_below / cross_above to detect regime transitions -- the exact moment the distribution shifts.

TOML Examples

Panic Buyer: Negative Skew + RSI Oversold

The contrarian play: when skewness is deeply negative (the market has been crashing) AND RSI confirms oversold conditions, buy the panic. The logic: left-tail events have already occurred, selling pressure is likely exhausted, and a mean-reversion bounce is probable.

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

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

  [[actions.triggers]]
  indicator = "rsi_14"
  operator = "<"
  target = "25"
  timeframe = "1h"
  max_count = 2

Ride the Positive Skew Upside

When skewness is positive (upside surprises dominate) and the trend is confirmed by EMA, enter long. The return distribution itself confirms that momentum favors buyers.

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

  [[actions.triggers]]
  indicator = "skew_100"
  operator = ">"
  target = "0.5"
  timeframe = "1h"

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

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

Exit on Extreme Negative Skew Shift

Protect existing positions when skewness suddenly plunges below -1.5. This signals a regime shift toward crash-prone conditions -- the distribution is becoming dangerously asymmetric.

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

  [[actions.triggers]]
  indicator = "skew_60"
  operator = "cross_below"
  target = "-1.5"
  timeframe = "1h"

Skewness Combined with Kurtosis

The full distribution picture: buy when skewness is negative (crash has happened) but kurtosis is low (the market is not producing extreme moves anymore -- the volatility storm has passed). This ensures you are buying after the crash, not during it.

[[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"

Tips

Negative skew = crash risk, not crash certainty

A heavily negative skewness reading tells you that the recent return distribution is dominated by left-tail events -- large drops have been happening. This does not guarantee another crash is imminent. It means the environment is crash-prone. For contrarian traders, this is the setup: when combined with oversold indicators, negative skew identifies moments where the crash has already happened and a bounce is probable.

Combine with Kurtosis for the full distribution picture

Skewness tells you which direction the tail risk is. Kurtosis tells you how fat the tails are. Together, they describe the complete shape of the return distribution. Negative skew + high kurtosis = active crash in progress (large, frequent extreme moves to the downside). Negative skew + low kurtosis = crash has exhausted itself (the skew persists in the data but extreme moves have stopped). The second scenario is the higher-probability bounce setup.

Use longer periods for stability

Short-period skewness (20-30 candles) is noisy and can flip rapidly between positive and negative. For regime identification, longer periods (60-100 candles) produce more stable readings that better capture the underlying distribution shape. Reserve short periods for lower timeframes (1m, 5m) where you need faster reaction. For hourly and daily charts, 60-100 periods are recommended.

Skewness is backward-looking

Skewness describes what the return distribution looked like over the past N candles. It does not predict what will happen next. However, distribution regimes tend to be persistent -- a market that has been negatively skewed often remains so for a meaningful period. Use skewness as a regime filter to set context, then rely on real-time indicators (RSI, price crossovers) for precise timing.