Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // © Infinity_Trading_
- // Last Modified: 5/13/2022
- //@version=5
- indicator(title="Automatic Pivot Points", shorttitle="_AutoPivots", overlay=true)
- // Purpose: Draws Traditional Pivots lines at the timeframe specified.
- // Has logic that only displays the next pivot instead of all the pivots (for the purpose of chart de-cluttering).
- // TradingView has a limit of 40 security calls per script. Due to this limitation this script can only display pivots a max of 7 time periods back.
- // Usage: Add indicator. Choose timeframe, number of timeframes back in the past to display, line color, line weight
- ///////////////////////////////////////////////////////////////////////////////// INPUTS
- AUTO = "Auto"
- DAILY = "Daily"
- WEEKLY = "Weekly"
- MONTHLY = "Monthly"
- QUARTERLY = "Quarterly"
- YEARLY = "Yearly"
- var string GP1 = "Pivots"
- i_auto_pivots = input.bool(defval=true, title="Auto Pivots", group=GP1)
- i_pivot_time_frame = input.string(title=" Timeframe", defval=AUTO, options=[AUTO, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY], group=GP1)
- i_pivots_back = input.int(defval=1, minval=1, maxval=7, title=" Pivots Back", group=GP1)
- var string GP2 = "Pivot Style"
- i_pivot_labels = input.bool(defval=true, title="Labels", group=GP2, inline = "pivot_label")
- i_pivot_label_pos = input.string(defval="Left", options=["Left", "Right"], title="", group=GP2, inline = "pivot_label")
- i_pivot_color = input.color(defval=color.new(#fb8c00, 0), title="Pivot Line", group=GP2, inline = "pivot_line")
- i_line_width = input.int(defval=2, minval=1, maxval=10, title="", group=GP2, inline = "pivot_line")
- i_pivot_line_style = input.string(defval="solid (─)", title="", options=["solid (─)", "dotted (┈)", "dashed (╌)"], group=GP2, inline="pivot_line")
- i_pivot_res_color = input.color(defval=color.new(#fb8c00, 0), title="Resistance Lines", group=GP2, inline = "resistance")
- i_res_line_width = input.int(defval=2, minval=1, maxval=10, title="", group=GP2, inline = "resistance")
- i_res_line_style = input.string(defval="solid (─)", title="", options=["solid (─)", "dotted (┈)", "dashed (╌)"], group=GP2, inline="resistance")
- i_pivot_sup_color = input.color(defval=color.new(#fb8c00, 0), title="Support Lines", group=GP2, inline = "support")
- i_sup_line_width = input.int(defval=2, minval=1, maxval=10, title="", group=GP2, inline = "support")
- i_sup_line_style = input.string(defval="solid (─)", title="", options=["solid (─)", "dotted (┈)", "dashed (╌)"], group=GP2, inline="support")
- ///////////////////////////////////////////////////////////////////////////////// HELPER FUNCTIONS
- timeOpenPeriod(tf, period) => request.security(syminfo.tickerid, tf, time[period])
- timeClosePeriod(tf, period) => request.security(syminfo.tickerid, tf, time_close[period])
- highPeriod(tf, period) => request.security(syminfo.tickerid, tf, high[period])
- lowPeriod(tf, period) => request.security(syminfo.tickerid, tf, low[period])
- closePeriod(tf, period) => request.security(syminfo.tickerid, tf, close[period])
- // Traditional Pivots Formulas
- PP(h, l, c) => (h + l + c) / 3
- R1(h, l, c) => PP(h, l, c) * 2 - l
- S1(h, l, c) => PP(h, l, c) * 2 - h
- R2(h, l, c) => PP(h, l, c) + (h - l)
- S2(h, l, c) => PP(h, l, c) - (h - l)
- R3(h, l, c) => PP(h, l, c) * 2 + (h - 2 * l)
- S3(h, l, c) => PP(h, l, c) * 2 - (2 * h - l)
- R4(h, l, c) => PP(h, l, c) * 3 + (h - 3 * l)
- S4(h, l, c) => PP(h, l, c) * 3 - (3 * h - l)
- R5(h, l, c) => PP(h, l, c) * 4 + (h - 4 * l)
- S5(h, l, c) => PP(h, l, c) * 4 - (4 * h - l)
- // Function the converts string inputs to line style code
- line_style_function(input_var) =>
- switch input_var
- "dotted (┈)" => line.style_dotted
- "dashed (╌)" => line.style_dashed
- => line.style_solid
- draw_line(ln, i, pivot, tmo, tc, col, line_style, line_width) =>
- array.push(ln, line.new(x1 = array.get(tmo, i), y1 = array.get(pivot, i), x2 = array.get(tc, i), y2 = array.get(pivot, i), xloc=xloc.bar_time, color=col, style=line_style, width=line_width))
- draw_label(lb, i, pivot, tmo, tc, txt, txt_color) =>
- if i_pivot_labels
- offset = ' '
- labels_align_str_left= i_pivot_label_pos == "Left" ? txt + offset : offset + txt
- x_pos = i_pivot_label_pos == "Left" ? array.get(tmo, i) : array.get(tc, i)
- array.push(lb, label.new(x = x_pos, y = array.get(pivot, i), text=labels_align_str_left, textcolor=txt_color, style=label.style_label_center, color=#00000000, xloc=xloc.bar_time))
- get_pivot_resolution() =>
- resolution = "M"
- if i_pivot_time_frame == AUTO
- if timeframe.isintraday
- resolution := timeframe.multiplier <= 15 ? "D" : "W"
- else if timeframe.isweekly or timeframe.ismonthly
- resolution := "12M"
- else if i_pivot_time_frame == DAILY
- resolution := "D"
- else if i_pivot_time_frame == WEEKLY
- resolution := "W"
- else if i_pivot_time_frame == MONTHLY
- resolution := "M"
- else if i_pivot_time_frame == QUARTERLY
- resolution := "3M"
- else if i_pivot_time_frame == YEARLY
- resolution := "12M"
- resolution
- ///////////////////////////////////////////////////////////////////////////////// CREATE ARRAYS
- // Call timeframe resolution helper function
- resolution = get_pivot_resolution()
- // Create blank arrays
- pivotTimeOpenArray = array.new_int(0)
- pivotTimeCloseArray = array.new_int(0)
- pivotHighArray = array.new_float(0)
- pivotLowArray = array.new_float(0)
- pivotCloseArray = array.new_float(0)
- //Pine Script forces us to enter all the values of the array manually, one line at a time.
- // Manually insert price values into the array
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 0))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 1))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 2))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 3))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 4))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 5))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 6))
- array.push(pivotTimeOpenArray, timeOpenPeriod(resolution, 7))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 0))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 1))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 2))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 3))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 4))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 5))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 6))
- array.push(pivotTimeCloseArray, timeClosePeriod(resolution, 7))
- array.push(pivotHighArray, highPeriod(resolution, 0))
- array.push(pivotHighArray, highPeriod(resolution, 1))
- array.push(pivotHighArray, highPeriod(resolution, 2))
- array.push(pivotHighArray, highPeriod(resolution, 3))
- array.push(pivotHighArray, highPeriod(resolution, 4))
- array.push(pivotHighArray, highPeriod(resolution, 5))
- array.push(pivotHighArray, highPeriod(resolution, 6))
- array.push(pivotHighArray, highPeriod(resolution, 7))
- array.push(pivotLowArray, lowPeriod(resolution, 0))
- array.push(pivotLowArray, lowPeriod(resolution, 1))
- array.push(pivotLowArray, lowPeriod(resolution, 2))
- array.push(pivotLowArray, lowPeriod(resolution, 3))
- array.push(pivotLowArray, lowPeriod(resolution, 4))
- array.push(pivotLowArray, lowPeriod(resolution, 5))
- array.push(pivotLowArray, lowPeriod(resolution, 6))
- array.push(pivotLowArray, lowPeriod(resolution, 7))
- array.push(pivotCloseArray, closePeriod(resolution, 0))
- array.push(pivotCloseArray, closePeriod(resolution, 1))
- array.push(pivotCloseArray, closePeriod(resolution, 2))
- array.push(pivotCloseArray, closePeriod(resolution, 3))
- array.push(pivotCloseArray, closePeriod(resolution, 4))
- array.push(pivotCloseArray, closePeriod(resolution, 5))
- array.push(pivotCloseArray, closePeriod(resolution, 6))
- array.push(pivotCloseArray, closePeriod(resolution, 7))
- ///////////////////////////////////////////////////////////////////////////////// ARRAY OTHER
- // Create blank arrays
- var lines_pivot = array.new_line()
- var labels_pivot = array.new_label()
- ppMonArray = array.new_float()
- r1MonArray = array.new_float()
- s1MonArray = array.new_float()
- r2MonArray = array.new_float()
- s2MonArray = array.new_float()
- r3MonArray = array.new_float()
- s3MonArray = array.new_float()
- r4MonArray = array.new_float()
- s4MonArray = array.new_float()
- r5MonArray = array.new_float()
- s5MonArray = array.new_float()
- float pivotHigh = na
- float pivotLow = na
- ///////////////////////////////////////////////////////////////////////////////// PLOT LINES
- // Line style variables
- pivot_line_style = line_style_function(i_pivot_line_style)
- res_line_style = line_style_function(i_res_line_style)
- sup_line_style = line_style_function(i_sup_line_style)
- // Only execute calculations on the last bar
- if barstate.islast
- // Loop over each month back
- for pivot_offset = 0 to i_pivots_back - 1
- // Calculate Traditional Pivots values and push to arrays
- // Notice that the high, low, close arrays have +1
- // This is because Pivot lines are calculate on the previous candle, but drawn on the current candle.
- array.push(ppMonArray, PP(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(r1MonArray, R1(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(s1MonArray, S1(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(r2MonArray, R2(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(s2MonArray, S2(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(r3MonArray, R3(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(s3MonArray, S3(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(r4MonArray, R4(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(s4MonArray, S4(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(r5MonArray, R5(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- array.push(s5MonArray, S5(array.get(pivotHighArray, pivot_offset + 1), array.get(pivotLowArray, pivot_offset + 1), array.get(pivotCloseArray, pivot_offset + 1)))
- // Current months high and low values
- pivotHigh := array.get(pivotHighArray, pivot_offset)
- pivotLow := array.get(pivotLowArray, pivot_offset)
- // **************************
- // Automatic Pivots
- // **************************
- // Logic that will only draw pivot lines one above the months high/low.
- // This makes the chart less cluttered and more readable.
- if i_auto_pivots
- // Draw Monthly Pivot lines
- // PP
- draw_line(lines_pivot, pivot_offset, ppMonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_color, pivot_line_style, i_line_width)
- draw_label(labels_pivot, pivot_offset, ppMonArray, pivotTimeOpenArray, pivotTimeCloseArray, "P", i_pivot_color)
- // R1
- if pivotHigh > array.get(ppMonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, r1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R1", i_pivot_res_color)
- // S1
- if pivotLow < array.get(ppMonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, s1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S1", i_pivot_sup_color)
- // R2
- if pivotHigh > array.get(r1MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, r2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R2", i_pivot_res_color)
- // S2
- if pivotLow < array.get(s1MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, s2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S2", i_pivot_sup_color)
- // R3
- if pivotHigh > array.get(r2MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, r3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R3", i_pivot_res_color)
- // S3
- if pivotLow < array.get(s2MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, s3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S3", i_pivot_sup_color)
- // R4
- if pivotHigh > array.get(r3MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, r4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R4", i_pivot_res_color)
- // S4
- if pivotLow < array.get(s3MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, s4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S4", i_pivot_sup_color)
- // R5
- if pivotHigh > array.get(r4MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, r5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R5", i_pivot_res_color)
- // S5
- if pivotLow < array.get(s4MonArray, pivot_offset)
- draw_line(lines_pivot, pivot_offset, s5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S5", i_pivot_sup_color)
- else
- // **************************
- // Turn off auto pivots
- // Display all pivot lines
- // **************************
- // Draw Monthly Pivot lines
- // PP
- draw_line(lines_pivot, pivot_offset, ppMonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_color, pivot_line_style, i_line_width)
- draw_label(labels_pivot, pivot_offset, ppMonArray, pivotTimeOpenArray, pivotTimeCloseArray, "P", i_pivot_color)
- // R1
- draw_line(lines_pivot, pivot_offset, r1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R1", i_pivot_res_color)
- // S1
- draw_line(lines_pivot, pivot_offset, s1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s1MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S1", i_pivot_sup_color)
- // R2
- draw_line(lines_pivot, pivot_offset, r2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R2", i_pivot_res_color)
- // S2
- draw_line(lines_pivot, pivot_offset, s2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s2MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S2", i_pivot_sup_color)
- // R3
- draw_line(lines_pivot, pivot_offset, r3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R3", i_pivot_res_color)
- // S3
- draw_line(lines_pivot, pivot_offset, s3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s3MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S3", i_pivot_sup_color)
- // R4
- draw_line(lines_pivot, pivot_offset, r4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R4", i_pivot_res_color)
- // S4
- draw_line(lines_pivot, pivot_offset, s4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s4MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S4", i_pivot_sup_color)
- // R5
- draw_line(lines_pivot, pivot_offset, r5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_res_color, res_line_style, i_res_line_width)
- draw_label(labels_pivot, pivot_offset, r5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "R5", i_pivot_res_color)
- // S5
- draw_line(lines_pivot, pivot_offset, s5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, i_pivot_sup_color, sup_line_style, i_sup_line_width)
- draw_label(labels_pivot, pivot_offset, s5MonArray, pivotTimeOpenArray, pivotTimeCloseArray, "S5", i_pivot_sup_color)
Advertisement
Add Comment
Please, Sign In to add comment