Quantitative Finance
Rogers-Satchell Drift-Independent OHLC Volatility Estimator Formula
Estimate unbiased intraday and annualized return volatility on trending assets using the Rogers-Satchell (1991) Open-High-Low-Close variance v_RS = ln(H/C)*ln(H/O) + ln(L/C)*ln(L/O).
Eliminate upward/downward trend bias from OHLC range volatility!
Classical High-Low volatility estimators (Parkinson and Garman-Klass) assume zero underlying price drift (mu = 0), causing them to systematically overestimate true volatility during strong bull rallies or directional sell-offs! Rogers & Satchell (1991) proved that cross-multiplying High and Low excursions relative to BOTH Open and Close—v_RS = LN(H / C) * LN(H / O) + LN(L / C) * LN(L / O)—cancels constant drift mu completely!
Notice the geometric intuition: on a pure straight-line drift day with zero noise where Low = Open = 100 and High = Close = 105, both LN(H / C) = 0 and LN(L / O) = 0, so Rogers-Satchell rightly reports 0% volatility instead of mistaking the 5% trend for noise!
| OHLC Bar Scenario | Daily Variance v_RS | Daily Vol % | Annualized Vol % (252d) |
|---|---|---|---|
| Trending + Wicks (O=100, H=106, L=99, C=104) | 0.001605 | 4.0064% | 63.5993% |
| Pure Monotone Drift (O=100, H=105, L=100, C=105) | 0.000000 | 0.0000% | 0.0000% |
| Symmetric Doji (O=100, H=103, L=97, C=100) | 0.001802 | 4.2446% | 67.3812% |
Annualized Rogers-Satchell Volatility % from Single/Mean Bar OHLC
Validates L <= MIN(O, C) and H >= MAX(O, C), then annualizes v_RS across B6 trading days.
=IF(OR(B2 <= 0, B3 <= 0, B4 <= 0, B5 <= 0, B3 < MAX(B2, B5), B4 > MIN(B2, B5), B6 <= 0), "Invalid OHLC Bar", ROUND(100 * SQRT(B6 * (LN(B3 / B5) * LN(B3 / B2) + LN(B4 / B5) * LN(B4 / B2))), 4))Single-Session Daily Rogers-Satchell Volatility %
Computes 100 * SQRT(LN(H/C)*LN(H/O) + LN(L/C)*LN(L/O)).
=IF(OR(B2 <= 0, B3 < MAX(B2, B5), B4 > MIN(B2, B5)), 0, ROUND(100 * SQRT(LN(B3 / B5) * LN(B3 / B2) + LN(B4 / B5) * LN(B4 / B2)), 4))Try the example
Use the original values or change them to test your understanding.