JxModi Camarilla
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jxmodi

//@version=4
study("JxModi Camarilla", overlay = true)
mode =input(title = "HTF Method", defval = 'User Defined', options=['Auto', 'User Defined'])
HTFm = input('D', title = "Time Frame (if HTF Method=User Defined)", type=input.resolution)
showlast = input(title = "Show Only Last Period", defval = false)
showlabels = input(title = "Show Labels", defval = true)
lstyle = input(title = "Line Style", options = ['Solid', 'Circles', 'Cross'], defval ='Solid')
 
//auto higher time frame
HTFo =timeframe.period == '1' ? '30' : 
  timeframe.period == '3' ? '60' : 
  timeframe.period == '5' ? '240' : 
  timeframe.period == '15' ? 'D' : 
  timeframe.period == '30' ? 'D' : 
  timeframe.period == '45' ? 'D' : 
  timeframe.period == '60' ? 'D' : 
  timeframe.period == '120' ? 'D' : 
  timeframe.period == '180' ? 'D' : 
  timeframe.period == '240' ? 'D' : 
  timeframe.period == 'D' ? 'W' :
  '5W'
  
HTF = mode == 'Auto' ? HTFo : HTFm
    
highhtf = security(syminfo.tickerid, HTF, high[1], lookahead = barmerge.lookahead_on)
lowhtf = security(syminfo.tickerid, HTF, low[1], lookahead = barmerge.lookahead_on)
closehtf = security(syminfo.tickerid, HTF, close[1], lookahead = barmerge.lookahead_on)

RANGE = highhtf - lowhtf

// is this last bar for HTF?
islast = showlast ? security(syminfo.tickerid, HTF, barstate.islast, lookahead = true) : true

// Line Style
linestyle = lstyle == 'Solid' ? plot.style_stepline :
   lstyle == 'Circle' ? plot.style_circles : plot.style_cross

H5 = (highhtf / lowhtf) * closehtf
H4 = closehtf + RANGE * 1.1/2
H3 = closehtf + RANGE * 1.1/4
H2 = closehtf + RANGE * 1.1/6
H1 = closehtf + RANGE * 1.1/12
L1 = closehtf - RANGE * 1.1/12
L2 = closehtf - RANGE * 1.1/6
L3 = closehtf - RANGE * 1.1/4
L4 = closehtf - RANGE * 1.1/2
L5 = closehtf - (H5 - closehtf)

plot(islast ? H5 : na, title = "H5", color = color.navy, linewidth = 1, style = linestyle, transp = 0)
plot(islast ? H4 : na, title = "H4", color = color.teal, linewidth = 3, style = linestyle, transp = 0)
plot(islast ? H3 : na, title = "H3", color = color.red, linewidth = 1, style = linestyle, transp = 0)
plot(islast ? L3 : na, title = "L3", color = color.red, linewidth = 1, style = linestyle, transp = 0)
plot(islast ? L4 : na, title = "L4", color = color.teal, linewidth = 3, style = linestyle, transp = 0)
plot(islast ? L5 : na, title = "L5", color = color.navy, linewidth = 1, style = linestyle, transp = 0)

// Label for S/R
chper = time - time[1]
chper := change(chper) > 0 ? chper[1] : chper

Round_it(valu)=>
    a = 0
    num = syminfo.mintick
    s = valu
    if na(s)
        s := syminfo.mintick
    if num < 1
        for i = 1 to 20
            num := num * 10
            if num > 1
                break
            a := a +1
    
    for x = 1 to a 
        s := s * 10
    s := round(s)
    for x = 1 to a
        s := s / 10
    s := s < syminfo.mintick  ? syminfo.mintick : s
    s

// Labels
if showlabels
    var label s3label = na, var label s4label = na, var label s5label = na
    var label r3label = na, var label r4label = na, var label r5label = na
    
    label.delete(s3label), label.delete(s4label), label.delete(s5label)
    label.delete(r3label), label.delete(r4label), label.delete(r5label)
    s3label := label.new(x = time + chper * 20, y = L3, text = "L3= " + tostring(Round_it(L3)), color = color.lime, textcolor=color.black, style=label.style_labelup, xloc = xloc.bar_time, yloc=yloc.price)
    s4label := label.new(x = time + chper * 20, y = L4, text = "L4= " + tostring(Round_it(L4)), color = color.blue, textcolor=color.yellow, style=label.style_labelup, xloc = xloc.bar_time, yloc=yloc.price)
    s5label := label.new(x = time + chper * 20, y = L5, text = "L5= " + tostring(Round_it(L5)), color = color.navy, textcolor=color.white, style=label.style_labelup, xloc = xloc.bar_time, yloc=yloc.price)
    r3label := label.new(x = time + chper * 20, y = H3, text = "H3= " + tostring(Round_it(H3)), color = color.orange, textcolor=color.white, style=label.style_labeldown, xloc = xloc.bar_time, yloc=yloc.price)
    r4label := label.new(x = time + chper * 20, y = H4, text = "H4= " + tostring(Round_it(H4)), color = color.red, textcolor=color.white, style=label.style_labeldown, xloc = xloc.bar_time, yloc=yloc.price)
    r5label := label.new(x = time + chper * 20, y = H5, text = "H5= " + tostring(Round_it(H5)), color = color.maroon, textcolor=color.yellow, style=label.style_labeldown, xloc = xloc.bar_time, yloc=yloc.price)
    
    //EMA 9/20/50/200", overlay=true

//Input Menus
Input1 = input(4, "First EMA")
Input2 = input(20, "Second EMA")
Input3 = input(50, "Third EMA")
Input4 = input(200, "Fourth EMA")
shortest = ema(close, Input1)
short = ema(close, Input2)
longer = ema(close, Input3)
longest = ema(close, Input4)
typicalPrice = (high + low + close) / 3
typicalPriceVolume = typicalPrice * volume
plot(shortest,"First EMA", color.green, transp=0)
plot(short, "Second EMA", color.orange, transp=0)
plot(longer, "Third EMA", color.red, transp=0)
plot(longest,"Fourth EMA", color.maroon, transp=0)

// VWAP
price = input(type=input.source, defval=hlc3, title="VWAP Source")
enable_vwap = input(true, title="Enable VWAP")
vwapResolution = input(title = "VWAP Resolution", defval = "", type=input.resolution)
vwapFunction = vwap(price)
vwapSecurity = security(syminfo.tickerid, vwapResolution, vwapFunction)
plot(enable_vwap ? vwapSecurity : na, title="VWAP", color=color.black, linewidth=2, transp=0, editable=true) // All TimeFrames
