CPR by Wsr
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wisestockresearch

//@version=4
 
study(title="CPR by WSR ", shorttitle="CPR by WSR:", overlay=true)
pivottimeframe = input(title="Pivot Resolution", defval="D", options=["D", "W", "M"])
dp = input(true, title="Display Floor Pivots")
cp = input(true, title="Display Camarilla Pivots")
hl = input(true, title="Display M, W, D Highs/Lows")
tp = input(false, title="Display Tomorrow Pivots")
 
//dp in the prefix implies daily pivot calculation
dpopen = security(syminfo.tickerid, pivottimeframe, open[1], barmerge.gaps_off, barmerge.lookahead_on)
dphigh = security(syminfo.tickerid, pivottimeframe, high[1], barmerge.gaps_off, barmerge.lookahead_on)
dplow = security(syminfo.tickerid, pivottimeframe, low[1], barmerge.gaps_off, barmerge.lookahead_on)
dpclose = security(syminfo.tickerid, pivottimeframe, close[1], barmerge.gaps_off, barmerge.lookahead_on)
dprange = dphigh - dplow
 
//Expanded Floor Pivots Formula
pivot = (dphigh + dplow + dpclose) / 3.0
bc = (dphigh + dplow) / 2.0
tc = pivot - bc + pivot
r1 = pivot * 2 - dplow
r2 = pivot + dphigh - dplow
r3 = r1 + dphigh - dplow
r4 = r3 + r2 - r1
s1 = pivot * 2 - dphigh
s2 = pivot - (dphigh - dplow)
s3 = s1 - (dphigh - dplow)
s4 = s3 - (s1 - s2)
 
//Expanded Camarilla Pivots Formula
h1 = dpclose + dprange * (1.1 / 12)
h2 = dpclose + dprange * (1.1 / 6)
h3 = dpclose + dprange * (1.1 / 4)
h4 = dpclose + dprange * (1.1 / 2)
h5 = dphigh / dplow * dpclose
l1 = dpclose - dprange * (1.1 / 12)
l2 = dpclose - dprange * (1.1 / 6)
l3 = dpclose - dprange * (1.1 / 4)
l4 = dpclose - dprange * (1.1 / 2)
l5 = dpclose - (h5 - dpclose)
 
//Tomorrow's Pivot Calculation
 
tpopen = security(syminfo.tickerid, pivottimeframe, open, barmerge.gaps_off, barmerge.lookahead_on)
tphigh = security(syminfo.tickerid, pivottimeframe, high, barmerge.gaps_off, barmerge.lookahead_on)
tplow = security(syminfo.tickerid, pivottimeframe, low, barmerge.gaps_off, barmerge.lookahead_on)
tpclose = security(syminfo.tickerid, pivottimeframe, close, barmerge.gaps_off, barmerge.lookahead_on)
tprange = tphigh - tplow
 
tppivot = (tphigh + tplow + tpclose) / 3.0
tpbc = (tphigh + tplow) / 2.0
tptc = tppivot - tpbc + tppivot
tpr1 = tppivot * 2 - tplow
tps1 = tppivot * 2 - tphigh
tph3 = tpclose + tprange * (1.1 / 4)
tpl3 = tpclose - tprange * (1.1 / 4)
 
//m,w,d in the prefix implies monthly, weekly and daily
mhigh = security(syminfo.tickerid, "M", high[1], lookahead=barmerge.lookahead_on)
mlow = security(syminfo.tickerid, "M", low[1], lookahead=barmerge.lookahead_on)
whigh = security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
wlow = security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
dhigh = security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
dlow = security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
dclose =  security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on) 
 
//Plotting
plot(dp and pivot ? pivot : na, title="Pivot", color=#FF007F, style=plot.style_cross, transp=0)
plot(dp and bc ? bc : na, title="BC", color=color.blue, style=plot.style_cross, transp=0)
plot(dp and tc ? tc : na, title="TC", color=color.blue, style=plot.style_cross, transp=0)
plot(dp and r1 ? r1 : na, title="R1", color=color.green, style=plot.style_cross, transp=0)
plot(dp and r2 ? r2 : na, title="R2", color=color.green, style=plot.style_cross, transp=0)
plot(dp and r3 ? r3 : na, title="R3", color=color.green, style=plot.style_cross, transp=0)
plot(dp and r4 ? r4 : na, title="R4", color=color.green, style=plot.style_cross, transp=0)
plot(dp and s1 ? s1 : na, title="S1", color=color.red, style=plot.style_cross, transp=0)
plot(dp and s2 ? s2 : na, title="S2", color=color.red, style=plot.style_cross, transp=0)
plot(dp and s3 ? s3 : na, title="S3", color=color.red, style=plot.style_cross, transp=0)
plot(dp and s4 ? s4 : na, title="S4", color=color.red, style=plot.style_cross, transp=0)
 
plot((timeframe.isintraday or timeframe.isdaily or timeframe.isweekly) and hl ? mhigh : na, title="Monthly High", style=plot.style_circles, color=#FF7F00, transp=0)
plot((timeframe.isintraday or timeframe.isdaily or timeframe.isweekly) and hl ? mlow : na, title="Monthly Low", style=plot.style_circles, color=#FF7F00, transp=0)
plot((timeframe.isintraday or timeframe.isdaily) and hl ? whigh : na, title="Weekly High", style=plot.style_circles, color=#FF7F00, transp=0)
plot((timeframe.isintraday or timeframe.isdaily) and hl ? wlow : na, title="Weekly Low", style=plot.style_circles, color=#FF7F00, transp=0)
plot(timeframe.isintraday and hl ? dhigh : na, title="Daily High", style=plot.style_circles, color=#FF7F00, transp=0)
plot(timeframe.isintraday and hl ? dlow : na, title="Daily Low", style=plot.style_circles, color=#FF7F00, transp=0)
plot(timeframe.isintraday and hl ? dclose : na, title="Daily Close",style=plot.style_circles, color=#000000, transp=0) 
 
plot(tp and tppivot ? tppivot : na, title="Pivot", color=color.blue, style=plot.style_cross, transp=0)
plot(tp and tpbc ? tpbc : na, title="BC", color=color.blue, style=plot.style_cross, transp=0)
plot(tp and tptc ? tptc : na, title="TC", color=color.blue, style=plot.style_cross, transp=0)
plot(tp and tpr1 ? tpr1 : na, title="R1", color=color.green, style=plot.style_cross, transp=0)
plot(tp and tps1 ? tps1 : na, title="S1", color=color.red, style=plot.style_cross, transp=0)
plot(tp and tph3 ? tph3 : na, title="H3", color=tph3 != tph3[1] ? na : color.black, transp=0)
plot(tp and tpl3 ? tpl3 : na, title="L3", color=tpl3 != tpl3[1] ? na : color.black, transp=0)
 
plot(timeframe.isintraday and tp ? tphigh : na, title="High", style=plot.style_circles, color=#FF7F00, transp=0)
plot(timeframe.isintraday and tp ? tplow : na, title="Low", style=plot.style_circles, color=#FF7F00, transp=0)
 
 
//Candle Stick Patterns
 
DJ1 = abs(open - close) < (high - low) * 0.1 and high - low > atr(14)
plotshape(DJ1, title="Doji", location=location.abovebar, color=color.blue, style=shape.xcross)
 
OR1 = open[1] > close[1] and open < close and low[1] > low and close > high[1] and
   high - low > atr(14) * 1.25  // or close[1] > open
plotshape(OR1, title="Bullish Engulfing", style=shape.arrowup, color=color.green, location=location.belowbar)
 
OR2 = open[1] < close[1] and open > close and high[1] < high and close < low[1] and
   high - low > atr(14) * 1.25  // or close[1] < open
plotshape(OR2, title="Bearish Engulfing", style=shape.arrowdown, color=color.red)
 
WR1 = low < low[1] and abs(low - min(open, close)) > abs(open - close) * 2 and
   abs(high - close) < (high - low) * 0.35 and high - low > atr(14)
plotshape(WR1, title="Hammer", location=location.belowbar, color=color.green, style=shape.arrowup)
 
WR2 = high > high[1] and high - max(open, close) > abs(open - close) * 2 and
   abs(close - low) < (high - low) * 0.35 and high - low > atr(14)
plotshape(WR2, title="Shooting Star", color=color.red, style=shape.arrowdown)
 
ER1 = high[1] - low[1] > atr(14) * 2 and
   abs(open[1] - close[1]) > (high[1] - low[1]) * 0.5 and open[1] > close[1] and
   open < close  //and abs(open[1] - close[1]) < (high[1]-low[1]) * 0.85
plotshape(ER1, title="Bullish E.Reversal", location=location.belowbar, color=color.green, style=shape.arrowup)  // E denotes Extreme
 
ER2 = high[1] - low[1] > atr(14) * 2 and
   abs(open[1] - close[1]) > (high[1] - low[1]) * 0.5 and open[1] < close[1] and
   open > close  //and abs(open[1] - close[1]) < (high[1]-low[1]) * 0.85
plotshape(ER2, title="Bearish E.Reversal", location=location.abovebar, color=color.red, style=shape.arrowdown)
