Data Analytic Investments
Price StructureBeginner

Pivot Points

Mathematically derived support and resistance levels calculated from the prior period's OHLC.

Daily, Weekly, Monthly
Crypto, Forex, Equities, Futures
Pine Script v5

What is it?

Pivot Points are calculated from the previous period's high (H), low (L), and close (C). The central pivot: PP = (H + L + C) / 3. From this, support and resistance levels are derived: R1 = 2×PP − L, R2 = PP + (H − L), R3 = H + 2×(PP − L), S1 = 2×PP − H, S2 = PP − (H − L), S3 = L − 2×(H − PP). These levels reset at the start of each new period. Camarilla, Woodie, and Fibonacci pivot variants use different formulas. Pivot Points are most widely used by day traders and intraday algorithms as objective, formula-based S/R levels.

When to use it

  • Intraday S/R levels: the daily pivot (PP) is the most-watched intraday level — price above PP is bullish for the day; below is bearish.
  • Profit targets: use R1, R2, R3 as sequential profit targets in a long trade; S1, S2, S3 for short trades.
  • Reversal setups: a rejection at R1 or R2 with a bearish candlestick pattern is a potential short entry; a bounce from S1 or S2 is a potential long.
  • Weekly pivots for swing trading: weekly pivot levels provide broader S/R zones for multi-day trades.
  • Confluence: a daily pivot level that coincides with a Fibonacci level or VWAP is a high-probability zone.

Common pitfalls

  • Pivot Points are calculated from the prior period's data. In crypto's 24/7 market, the choice of 'session close' (UTC midnight, NY close, etc.) significantly affects the levels.
  • The standard formula uses the arithmetic average of H, L, C. In a day with extreme wicks, this can produce pivot levels that are far from the actual price action.
  • Pivot Points work best in liquid, heavily-traded markets where many participants are watching the same levels. In thin altcoin markets, they are less reliable.
  • There are many pivot variants (Standard, Camarilla, Woodie, Fibonacci, DeMark). Using multiple variants simultaneously creates too many levels and analysis paralysis.
  • Pivot levels are static for the entire period — they do not adapt to intraday price action. Always combine with dynamic indicators (VWAP, EMAs) for context.

Free code template

Paste directly into TradingView Pine Editor → Add to chart.

Pine Script v5
/indicator("Pivot Points — DAI Template", overlay=true)

pivotType = input.string("Traditional", "Pivot Type", options=["Traditional", "Camarilla", "Fibonacci"])
resolution = input.timeframe("D", "Pivot Timeframe")

// Fetch prior period OHLC
pH = request.security(syminfo.tickerid, resolution, high[1],  lookahead=barmerge.lookahead_on)
pL = request.security(syminfo.tickerid, resolution, low[1],   lookahead=barmerge.lookahead_on)
pC = request.security(syminfo.tickerid, resolution, close[1], lookahead=barmerge.lookahead_on)

pp = (pH + pL + pC) / 3
range_ = pH - pL

// Traditional
r1 = 2 * pp - pL
r2 = pp + range_
r3 = pH + 2 * (pp - pL)
s1 = 2 * pp - pH
s2 = pp - range_
s3 = pL - 2 * (pH - pp)

plot(pp, "PP",  color=#f59e0b, linewidth=2, style=plot.style_linebr)
plot(r1, "R1",  color=color.new(#ef4444, 20), linewidth=1, style=plot.style_linebr)
plot(r2, "R2",  color=color.new(#ef4444, 40), linewidth=1, style=plot.style_linebr)
plot(r3, "R3",  color=color.new(#ef4444, 60), linewidth=1, style=plot.style_linebr)
plot(s1, "S1",  color=color.new(#22c55e, 20), linewidth=1, style=plot.style_linebr)
plot(s2, "S2",  color=color.new(#22c55e, 40), linewidth=1, style=plot.style_linebr)
plot(s3, "S3",  color=color.new(#22c55e, 60), linewidth=1, style=plot.style_linebr)

alertcondition(ta.cross(close, pp), "PP Cross", "Price crossed the daily pivot point")
alertcondition(ta.cross(close, r1), "R1 Cross", "Price crossed R1")
alertcondition(ta.cross(close, s1), "S1 Cross", "Price crossed S1")