Professional Documents
Culture Documents
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ajithcpas
//@version=5
indicator("Central Pivot Range", "CPR", overlay=true, max_lines_count=500, max_labels_count=500)
AUTO = "Auto"
DAILY = "Daily"
WEEKLY = "Weekly"
MONTHLY = "Monthly"
QUARTERLY = "Quarterly"
YEARLY = "Yearly"
TRADITIONAL = "Traditional"
FIBONACCI = "Fibonacci"
CLASSIC = "Classic"
CAMARILLA = "Camarilla"
pivotX_open = float(na)
pivotX_open := nz(pivotX_open[1], open)
pivotX_high = float(na)
pivotX_high := nz(pivotX_high[1], high)
pivotX_low = float(na)
pivotX_low := nz(pivotX_low[1], low)
pivotX_prev_open = float(na)
pivotX_prev_open := nz(pivotX_prev_open[1])
pivotX_prev_high = float(na)
pivotX_prev_high := nz(pivotX_prev_high[1])
pivotX_prev_low = float(na)
pivotX_prev_low := nz(pivotX_prev_low[1])
pivotX_prev_close = float(na)
pivotX_prev_close := nz(pivotX_prev_close[1])
get_pivot_resolution() =>
resolution = "M"
if cpr_time_frame == AUTO
if timeframe.isintraday
resolution := timeframe.multiplier <= 15 ? "D" : "W"
else if timeframe.isweekly or timeframe.ismonthly
resolution := "12M"
else if cpr_time_frame == DAILY
resolution := "D"
else if cpr_time_frame == WEEKLY
resolution := "W"
else if cpr_time_frame == MONTHLY
resolution := "M"
else if cpr_time_frame == QUARTERLY
resolution := "3M"
else if cpr_time_frame == YEARLY
resolution := "12M"
resolution
traditional() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
fibonacci() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
classic() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
camarilla() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
calc_pivot() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivotX_Bottom = (pivotX_prev_high + pivotX_prev_low) / 2
pivotX_Top = pivotX_Median * 2 - pivotX_Bottom
array.push(p, pivotX_Median)
array.push(tp, pivotX_Top)
array.push(bp, pivotX_Bottom)
if kind == TRADITIONAL
traditional()
else if kind == FIBONACCI
fibonacci()
else if kind == CLASSIC
classic()
else if kind == CAMARILLA
camarilla()
resolution = get_pivot_resolution()
if is_daily_based
pivotX_prev_open := prev_sec_open
pivotX_prev_high := prev_sec_high
pivotX_prev_low := prev_sec_low
pivotX_prev_close := prev_sec_close
pivotX_open := sec_open
pivotX_high := sec_high
pivotX_low := sec_low
else
pivotX_prev_high := pivotX_high
pivotX_prev_low := pivotX_low
pivotX_prev_open := pivotX_open
pivotX_prev_close := close[1]
pivotX_open := open
pivotX_high := high
pivotX_low := low
if barstate.islast and not is_change and array.size(arr_time) > 0 and not without_time_change
array.set(arr_time, array.size(arr_time) - 1, change_time)
else if without_time_change
array.push(arr_time, start_time)
else
array.push(arr_time, nz(change_time, time))
calc_pivot()
if sr_show
if array.size(r1) > 0 and r1_show
array.shift(r1)
if array.size(s1) > 0 and s1_show
array.shift(s1)
if array.size(r1_5) > 0 and r1_5_show
array.shift(r1_5)
if array.size(s1_5) > 0 and s1_5_show
array.shift(s1_5)
if array.size(r2) > 0 and r2_show
array.shift(r2)
if array.size(s2) > 0 and s2_show
array.shift(s2)
if array.size(r2_5) > 0 and r2_5_show
array.shift(r2_5)
if array.size(s2_5) > 0 and s2_5_show
array.shift(s2_5)
if array.size(r3) > 0 and r3_show
array.shift(r3)
if array.size(s3) > 0 and s3_show
array.shift(s3)
if array.size(r4) > 0 and r4_show
array.shift(r4)
if array.size(s4) > 0 and s4_show
array.shift(s4)
if array.size(r5) > 0 and r5_show
array.shift(r5)
if array.size(s5) > 0 and s5_show
array.shift(s5)
is_change := true
else if not is_daily_based
pivotX_high := math.max(pivotX_high, high)
pivotX_low := math.min(pivotX_low, low)
for i = 0 to array.size(lines) - 1
if array.size(lines) > 0
line.delete(array.shift(lines))
if array.size(labels) > 0
label.delete(array.shift(labels))
for i = 0 to array.size(arr_time) - 2
if array.size(p) > 0 and cpr_show
draw_line(i, p, cpr_color)
if array.size(tp) > 0 and cpr_show
draw_line(i, tp, cpr_color)
if array.size(bp) > 0 and cpr_show
draw_line(i, bp, cpr_color)
if sr_show
if array.size(r1) > 0 and r1_show
draw_line(i, r1, r1_color)
draw_label(i, array.get(r1, i), "R1", r1_color)
if array.size(s1) > 0 and s1_show
draw_line(i, s1, s1_color)
draw_label(i, array.get(s1, i), "S1", s1_color)
if array.size(r1_5) > 0 and r1_5_show
draw_line(i, r1_5, r1_5_color, line.style_dashed)
draw_label(i, array.get(r1_5, i), "R1.5", r1_5_color)
if array.size(s1_5) > 0 and s1_5_show
draw_line(i, s1_5, s1_5_color, line.style_dashed)
draw_label(i, array.get(s1_5, i), "S1.5", s1_5_color)
if array.size(r2) > 0 and r2_show
draw_line(i, r2, r2_color)
draw_label(i, array.get(r2, i), "R2", r2_color)
if array.size(s2) > 0 and s2_show
draw_line(i, s2, s2_color)
draw_label(i, array.get(s2, i), "S2", s2_color)
if array.size(r2_5) > 0 and r2_5_show
draw_line(i, r2_5, r2_5_color, line.style_dashed)
draw_label(i, array.get(r2_5, i), "R2.5", r2_5_color)
if array.size(s2_5) > 0 and s2_5_show
draw_line(i, s2_5, s2_5_color, line.style_dashed)
draw_label(i, array.get(s2_5, i), "S2.5", s2_5_color)
if array.size(r3) > 0 and r3_show
draw_line(i, r3, r3_color)
draw_label(i, array.get(r3, i), "R3", r3_color)
if array.size(s3) > 0 and s3_show
draw_line(i, s3, s3_color)
draw_label(i, array.get(s3, i), "S3", s3_color)
if array.size(r4) > 0 and r4_show
draw_line(i, r4, r4_color)
draw_label(i, array.get(r4, i), "R4", r4_color)
if array.size(s4) > 0 and s4_show
draw_line(i, s4, s4_color)
draw_label(i, array.get(s4, i), "S4", s4_color)
if array.size(r5) > 0 and r5_show
draw_line(i, r5, r5_color)
draw_label(i, array.get(r5, i), "R5", r5_color)
if array.size(s5) > 0 and s5_show
draw_line(i, s5, s5_color)
draw_label(i, array.get(s5, i), "S5", s5_color)
if show_labels or show_prices
display_text = ""
if show_labels and show_prices and _text != ''
display_text := str.format(" {0} - {1}", _text, math.round_to_mintick(_price))
else if show_labels and _text != ''
display_text := " " + _text
else
display_text := str.format(" {0}", math.round_to_mintick(_price))
if dev_cpr_show
drawCPR(resolution, "Dev CPR", dev_cpr_color)
indicator('OSPL Volume'
//@version=5
//Feel free to reuse or modify this code. Thanks to opensource pinescript indicators that I referred extensively
and learnt a lot.
//Thanks to Options Scalper Siva for all the free knowledge and info he imparts to the community. Follow him
in twitter @justsiva123
//This volume indicator is inspired by the paid/premium OSPL Volume indicator and works 100% the same.
indicator('OSPL Volume', '', false, format.volume)
showMA = input.bool(true,"Show Moving Average (MA)?",inline = "01", group='Moving Average')
MALen = input.int(20,"MA Length",inline = "01", group='Moving Average')
NiftyVol = input.int(125000,"Nifty",inline = "01", group='High Volume Treshold')
BNVol = input.int(50000,"Nifty Bank",inline = "01", group='High Volume Treshold')
highvolbull=input.color(color.rgb(91, 255, 96),"High Volume Positive Candle",group="Colors")
highvolbear=input.color(color.rgb(253, 44, 7),"High Volume Negative Candle",group="Colors")
stdbull=input.color(color.rgb(76, 175, 79, 64),"Standard Positive Candle",group="Colors")
stdbear=input.color(color.rgb(255, 82, 82, 64),"Standard Negative Candle",group="Colors")
Indicator - camarilla
//@version=4
study(title="HCAM Pivots", overlay=true)
TimeFrame = input("D", type=input.resolution)
xx = input(true, "Regular or HACAM, True = Regular Cam Pivot")
/////////////////////////////////////////
//TF for multi time frame and back period
/////////////////////////////////////////
ha_handle = heikinashi(syminfo.tickerid)
prevOpenHTF = security(xx ? syminfo.tickerid : ha_handle, TimeFrame, open[1], lookahead=true)
prevCloseHTF = security(xx ? syminfo.tickerid : ha_handle, TimeFrame, close[1], lookahead=true)
prevHighHTF = security(xx ? syminfo.tickerid : ha_handle, TimeFrame, high[1], lookahead=true)
prevLowHTF = security(xx ? syminfo.tickerid : ha_handle, TimeFrame, low[1], lookahead=true)
/////////////////////////////////////////
// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
ch = 0
if(res == 'Y')
t = year(time('D'))
ch := change(t) != 0 ? 1 : 0
else
t = time(res)
ch := change(t) != 0 ? 1 : 0
ch
// Rounding levels to min tick
nround(x) =>
n = round(x / syminfo.mintick) * syminfo.mintick
////////////
// INPUTS //
////////////
pp_type = input(title = "**Pivot Type**", defval = "Camarilla")
show_level_value = input(title = "Show Levels Value?", defval = true,type = input.bool)
sm = input(true, title="Show R3S3?")
sgg = input(false, title="Show Label 5 & 6?")
///////////////////////////
// CALCULATE PIVOT POINTS //
////////////////////////////
Range = 0.0
PP = 0.0
R3 = 0.0, R4 = 0.0, R5 = 0.0, R6 = 0.0
S3 = 0.0, S4 = 0.0, S5 = 0.0, S6 = 0.0
Range := (prevHighHTF - prevLowHTF)
if (pp_type == "Camarilla")
PP := (prevHighHTF + prevLowHTF + prevCloseHTF) / 3
//////////////
// PLOTTING //
bars_sinse = 0
bars_sinse := is_newbar(TimeFrame) ? 0 : bars_sinse[1] + 1
////////////////////////
// PLOT PIVOTS LEVELS //
vs3_p = line.new(sm ? bar_index[min(bars_sinse, 300)] :na, S3, bar_index, S3, color=color.red, style =
line.style_solid)
vr3_p = line.new(sm ? bar_index[min(bars_sinse, 300)] :na, R3, bar_index, R3, color=color.green, style =
line.style_solid)
// delete previous lines in the same period
if (is_newbar(TimeFrame))
line.delete(vpp_p[1])
line.delete(vs3_p[1])
line.delete(vr3_p[1])
// Add labels
dt = 6*(time - time[1])
//if barstate.islast
// label.new(time + 3*dt, close, xloc=xloc.bar_time)
label_vpp = label.new(time + 3*dt, PP, text=show_level_value ? ("P" + " " + tostring(nround(PP))) : "P",
style= label.style_labeldown, size=size.small, color= color.green, xloc=xloc.bar_time)
label_vs3 = label.new(time + 3*dt, S3, text=show_level_value ? ("S3" + " " + tostring(nround(S3))) : "S3",
style= label.style_labelup, size = size.small, xloc=xloc.bar_time)
label_vs4 = label.new(time + 3*dt, S4, text=show_level_value ? ("S4" + " " + tostring(nround(S4))) : "S4",
style= label.style_labelup, size = size.small, xloc=xloc.bar_time)
label_vs5 = label.new(time + 3*dt, sgg ? S5 :na, text=show_level_value ? ("S5" + " " + tostring(nround(S5))) :
"S5", style= label.style_labelup, size = size.small, xloc=xloc.bar_time)
label_vs6 = label.new(time + 3*dt, sgg ? S6 :na, text=show_level_value ? ("S6" + " " + tostring(nround(S6))) :
"S6", style= label.style_labelup, size = size.small, xloc=xloc.bar_time)
label_vr3 = label.new(time + 3*dt, R3, text=show_level_value ? ("R3" + " " + tostring(nround(R3))) : "R3",
style= label.style_labeldown, size = size.small, color = color.red, xloc=xloc.bar_time)
label_vr4 = label.new(time + 3*dt, R4, text=show_level_value ? ("R4" + " " + tostring(nround(R4))) : "R4",
style= label.style_labeldown, size = size.small, color = color.red, xloc=xloc.bar_time)
label_vr5 = label.new(time + 3*dt, sgg ? R5 :na, text=show_level_value ? ("R5" + " " + tostring(nround(R5))) :
"R5", style= label.style_labeldown, size = size.small, color = color.red, xloc=xloc.bar_time)
label_vr6 = label.new(time + 3*dt, sgg ? R6 :na, text=show_level_value ? ("R6" + " " + tostring(nround(R6))) :
"R6", style= label.style_labeldown, size = size.small, color = color.red, xloc=xloc.bar_time)
label.delete(label_vpp[1])
label.delete(label_vs3[1])
label.delete(label_vs4[1])
label.delete(label_vs5[1])
label.delete(label_vs6[1])
label.delete(label_vr3[1])
label.delete(label_vr4[1])
label.delete(label_vr5[1])
label.delete(label_vr6[1])
//@version=4
//Indicator for Daily CPR, Monthly Pivots, Weekly Pivots, Highs and Lows,
Moving averages and Camarilla pivots.
//Number of days pivots need to be shown can be set
study(title="CPR Camarilla & MA", shorttitle="CPR & MA", overlay=true)
//Inputs
daily_cpr = input (title="Number of Daily CPR to show", type= input.integer , defval=1, minval=0)
weekly_pivot_back = input (title="Number of Weekly pivot to show ", type = input.integer , defval=1,
minval=0)
monthly_pivot_back = input (title="Number of Monthly pivot to show ", type = input.integer , defval=1,
minval=0)
// Pivot calculation
pivot = (high + low + close) / 3.0
bc = (high + low) / 2.0
tc = (pivot - bc) + pivot
R1 = (2*pivot) - low
S1 = (2*pivot) - high
R2 = pivot + ( high - low)
S2 = pivot - ( high - low)
R3 = high + (2*(pivot - low))
S3 = low - (2*(high - pivot ))
R4 = R3 + (R2 - R1)
S4 = S3 + (S2 - S1)
PH = high
PL= low
one_day = 1000 * 60 * 60 * 24
plot( (timeframe.isintraday and showCPR) ? (dtc_ >= dbc_ ? dtc_ : dbc_) : na, title="Daily TC", style=
plot.style_circles , color=#2196f3, linewidth=2)
plot( (timeframe.isintraday and showCPR) ? dpp_ : na, title="Daily PP", style= plot.style_circles,
color=#9C27B0, linewidth=2)
plot( (timeframe.isintraday and showCPR) ? (dtc_ >= dbc_ ? dbc_ : dtc_) : na, title="Daily BC", style=
plot.style_circles, color=#2196f3, linewidth=2)
plot(showCPR ? dR1_ : na, title='R1', title="Daily R1", style= plot.style_circles , color=#ff0000, linewidth=3)
plot(showCPR ? dR2_ : na, title='R2', title="Daily R2", style= plot.style_circles , color=#ff0000, linewidth=2)
plot(showCPR ? dR3_ : na, title='R3', title="Daily R3", style= plot.style_circles , color=#ff0000, linewidth=2)
plot(showCPR ? dR4_ : na, title='R4', title="Daily R4", style= plot.style_circles , color=#ff0000, linewidth=2)
plot(showCPR ? dS1_ : na, title='S1', title="Daily S1", style= plot.style_circles , color=#008000, linewidth=3)
plot(showCPR ? dS2_ : na, title='S2', title="Daily S2", style= plot.style_circles , color=#008000, linewidth=2)
plot(showCPR ? dS3_ : na, title='S3', title="Daily S3", style= plot.style_circles , color=#008000, linewidth=2)
plot(showCPR ? dS4_ : na, title='S4', title="Daily S4", style= plot.style_circles , color=#008000, linewidth=2)
plot(showPrevDayHL ? dPH_ : na, title='PDH', title="Previous Day High", style= plot.style_circles ,
color=#ff9800, linewidth=2)
plot(showPrevDayHL ? dPL_ : na, title='PDL', title="Previous Day Low", style= plot.style_circles ,
color=#ff9800, linewidth=2)
//Weekly
//Monthly pvts
//Tomorrow CPR
//EMA 1
lenE1 = input(9, minval=1, title="EMA 1 Length")
srcE1 = input(close, title="Source")
outE1 = ema(srcE1, lenE1)
plot(showEMA ? outE1 : na, color=#fb41ff, title="EMA 1", linewidth=2)
//EMA 2
lenE2 = input(20, minval=1, title="EMA 2 Length")
srcE2 = input(close, title="Source")
outE2 = ema(srcE2, lenE2)
plot(showEMA ? outE2 : na, color=#fb41ff, title="EMA 2", linewidth=2)
//EMA 3
lenE3 = input(50, minval=1, title="EMA 3 Length")
srcE3 = input(close, title="Source")
outE3 = ema(srcE3, lenE3)
plot(showEMA ? outE3 : na, color=#fb41ff, title="EMA 3", linewidth=2)
//EMA 4
lenE4 = input(100, minval=1, title="EMA 4 Length")
srcE4 = input(close, title="Source")
outE4 = ema(srcE4, lenE4)
plot(showEMA ? outE4 : na, color=#fb41ff, title="EMA 4", linewidth=2)
//EMA 5
lenE5 = input(200, minval=1, title="EMA 5 Length")
srcE5 = input(close, title="Source")
outE5 = ema(srcE5, lenE5)
plot(showEMA ? outE5 : na, color=#fb41ff, title="EMA 5", linewidth=2)
//SMA
//SMA 1
lenS1 = input(9, minval=1, title="SMA 1 Length")
srcS1 = input(close, title="Source")
outS1 = sma(srcS1, lenS1)
plot(showSMA ? outS1 : na, color=#ffeb3b, title="SMA 1", linewidth=2)
//SMA 2
lenS2 = input(20, minval=1, title="SMA 2 Length")
srcS2 = input(close, title="Source")
outS2 = sma(srcS2, lenS2)
plot(showSMA ? outS2 : na, color=#008000, title="SMA 2", linewidth=2)
//SMA 3
lenS3 = input(50, minval=1, title="SMA 3 Length")
srcS3 = input(close, title="Source")
outS3 = sma(srcS3, lenS3)
plot(showSMA ? outS3 : na, color=#ff0000, title="SMA 3", linewidth=2)
//SMA 4
lenS4 = input(100, minval=1, title="SMA 4 Length")
srcS4 = input(close, title="Source")
outS4 = sma(srcS4, lenS4)
plot(showSMA ? outS4 : na, color=#00bcd4, title="SMA 4", linewidth=2)
//SMA 5
lenS5 = input(200, minval=1, title="SMA 5 Length")
srcS5 = input(close, title="Source")
outS5 = sma(srcS5, lenS5)
plot(showSMA ? outS5 : na, color=#ffffff, title="SMA 5", linewidth=2)
//Get previous day/week bar and avoiding realtime calculation by taking the previous to current bar
// //Calculate pivots
//center=(sclose)
h1=sclose + r*(1.1/12)
h2=sclose + r*(1.1/6)
h3=sclose + r*(1.1/4)
h4=sclose + r*(1.1/2)
//h5=(shigh/slow)*sclose
l1=sclose - r*(1.1/12)
l2=sclose - r*(1.1/6)
l3=sclose - r*(1.1/4)
l4=sclose - r*(1.1/2)
//l5=sclose - (h5-sclose)
//Plotting
// //Camarilla levels
plot(showCamarilla ? h4_ : na, title="H4",color = (sopen != sopen[1] ? na : #bcae2d), style=plot.style_cross,
linewidth=2)
plot(showCamarilla ? h3_ : na, title="H3",color = (sopen != sopen[1] ? na : #f0da19), style=plot.style_cross,
linewidth=2)
plot(showCamarilla ? l3_ : na, title="L3",color = (sopen != sopen[1] ? na : #00ff0e), style=plot.style_cross,
linewidth=2)
plot(showCamarilla ? l4_ : na, title="L4",color = (sopen != sopen[1] ? na : #389d3d), style=plot.style_cross,
linewidth=2)
source = close
// MACD Options
macd_length_fast = input(defval=12, minval=1, title="MACD Fast Length")
macd_length_slow = input(defval=26, minval=1, title="MACD Slow Length")
macd_length_signal = input(defval=9, minval=1, title="MACD Signal Length")
// Calculate MACD
macd_ma_fast = ema(source, macd_length_fast)
macd_ma_slow = ema(source, macd_length_slow)
macd = macd_ma_fast - macd_ma_slow
macd_signal = ema(macd, macd_length_signal)
macd_histogram = macd - macd_signal
// EMA Option
ema_length = input(defval=13, minval=1, title="EMA Length")
// Calculate EMA
ema = ema(source, ema_length)
barcolor(elder_color)
study("ORB"
//@version=4
study("ORB", overlay = true)
orb_high = float(na)
orb_low = float(na)
if is_first
orb_high := high
orb_low := low
else
orb_high := orb_high[1]
orb_low := orb_low[1]
if high > orb_high and in_session
orb_high := high
if low < orb_low and in_session
orb_low := low