Support and resistance levels have always been the main element of technical trading. A support level is a demand zone from where the market is expected to bounce while a resistance is a supply zone from where the market is expected to pause.
For the complete collection of candlestick patterns in detail with back-tests and technical strategies, you can check out my newest book with O’Reilly Media. The book features a huge number of classic and modern candlestick patterns as it dwelves into the realm of technical analysis with different trading strategies. The book comes with its own GitHub and is dynamic in nature as it is continuously updated and questions are answered on the O’Reilly platform promptly.
Mastering Financial Pattern Recognition
Amazon.com: Mastering Financial Pattern Recognition eBook : Kaabar, Sofien: Kindle Storeamzn.to
Introduction to Classic Pivot Points
Pivot points are a way of finding support and resistance levels. They are calculated based on the high, low, and closing prices of the previous trading session to identify potential levels of support and resistance for the current session.
The most commonly used pivot point calculation method is the classic method. It involves the following calculations:
Pivot Point (PP): The pivot point itself is the average of the previous session’s high, low, and closing prices. It represents a potential turning point or level of equilibrium for the current session.
These support and resistance levels are considered potential price levels where the market may reverse its direction, encounter buying or selling pressure, or experience increased volatility.
K’s Pivot Points
K’s Pivot Points try to enhance the classic pivot points by incorporating multiple elements and by applying a re-integration strategy to validate two events:
Found_Support: This event represents a basing market that is bound to recover or at least shape a bounce.
Found_Resistance: This event represents a toppish market that is bound to consolidate or at least shape a pause.
K’s Pivot Points are calculated following these steps:
Calculate the highest of highs for the previous 24 periods (preferably hours).
Calculate the lowest of lows for the previous 24 periods (preferably hours).
Calculate a 24-period (preferably hours) moving average of the close price.
Calculate K’s Pivot Point as the average between the three previous step.
To find the support, use this formula: Support = (Lowest K’s pivot point of the last 12 periods * 2) -Step 1.
To find the resistance, use this formula: Resistance = (Highest K’s pivot point of the last 12 periods * 2) - Step 2.
The re-integration strategy to find support and resistance areas is as follows:
A support has been found if the market breaks the support and shapes a close above it afterwards.
A resistance has been found if the market surpasses the resistance and shapes a close below it afterwards.
The lookback period (whether 24 and 12) can be modified but the default versions work well.
The following chart shows an example of K’s Pivot Points:
The green line refers to the dynamic support and the red line refers to the dynamic resistance. Green arrows show where a buy signal is detected and red arrows show where a sell signal is detected.
The code in Pine Script is as follows (also found on my profile there):
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Sofien-Kaabar
//@version=5
indicator("Smoothed Pivot Points", overlay = true)
lookback_piv = input(defval = 24, title = 'Pivot Lookback')
// Pivot points
// Adjusted highs
adjusted_high = ta.highest(high, lookback_piv)
// Adjusted lows
adjusted_low = ta.lowest(low, lookback_piv)
// Adjusted close
adjusted_close = ta.sma(close, lookback_piv)
// Pivot point
pivot_point = (adjusted_high + adjusted_low + adjusted_close) / 3
first_support = (ta.lowest(pivot_point, 12) * 2) - adjusted_high
first_resistance = (ta.highest(pivot_point, 12) * 2) - adjusted_low
found_support = close > first_support and close[1] < first_support[1]
found_resistance = close < first_resistance and close[1] > first_resistance[1]
plot(first_support, color = color.green)
plot(first_resistance, color = color.red)
plotshape(found_support, style = shape.triangleup, color = color.green, location = location.belowbar, size = size.small)
plotshape(found_resistance, style = shape.triangledown, color = color.red, location = location.abovebar, size = size.small)
It’s worth noting that this technique only finds interesting reactionary zones but guarantees nothing. It may be interesting to combine it with other technical indicators and methods.
The best time frame is hourly with a preference to avoid daily and weekly time horizons.