Price-derived horizontal levels that mark a central pivot plus support and resistance bands for the current period.
Pivot Points are a set of horizontal price levels calculated from the previous period's high, low, and close (commonly the prior day for intraday charts, or the prior week/month for higher timeframes). The set centers on a single "pivot" level, with several support levels below it (S1, S2, S3) and resistance levels above it (R1, R2, R3). Because they are computed once per period and stay fixed until the next period begins, traders often use them as reference points for the session rather than as a continuously updating line. They originated with floor traders who wanted quick, objective levels to watch during the day.
The most common ("Classic" or "Floor") version starts with the central pivot: P = (High + Low + Close) / 3, using the previous period's values. Resistance and support are then derived from P and the prior range. For example, R1 = 2P - Low and S1 = 2P - High, while R2 = P + (High - Low) and S2 = P - (High - Low). The third levels extend the same logic: R3 = High + 2 * (P - Low) and S3 = Low - 2 * (High - P). There are several variants (Woodie's, Camarilla, Fibonacci, DeMark) that change the weighting or the arithmetic, but they all share the idea of projecting fixed reference levels from the previous period's price action. The levels do not adapt to intra-period price movement; they are drawn and held until the next period resets them.
Anchor timeframe: Daily is the most common for intraday charts; Weekly and Monthly are used on higher-timeframe charts. Calculation method: Classic/Floor is the typical default, with Camarilla, Woodie's, Fibonacci, and DeMark as alternatives. Number of levels shown: commonly the pivot plus R1-R3 and S1-S3.
//@version=6
indicator("Classic Pivot Points (Daily)", overlay = true)
// Pull the PREVIOUS daily high, low, close as a confirmed tuple.
// [1] takes the prior daily bar; lookahead_on is the standard no-repaint idiom here.
[ph, pl, pc] = request.security(syminfo.tickerid, "1D", [high[1], low[1], close[1]], lookahead = barmerge.lookahead_on)
p = (ph + pl + pc) / 3
r1 = 2 * p - pl
s1 = 2 * p - ph
r2 = p + (ph - pl)
s2 = p - (ph - pl)
plot(p, "P", color = color.orange, linewidth = 2)
plot(r1, "R1", color = color.red)
plot(s1, "S1", color = color.green)
plot(r2, "R2", color = color.red)
plot(s2, "S2", color = color.green)Pro tip: Match the pivot's anchor timeframe to how you actually view the chart: daily pivots for intraday charts, weekly or monthly for swing-style charts. And treat the levels as reference zones rather than exact prices: many traders watch how price behaves around a level instead of expecting it to turn on the tick. No indicator is predictive, and all trading carries risk of loss.
Educational only — not financial advice, not a recommendation to trade. No indicator is predictive; trading involves substantial risk of loss.