Indicator · Pine Script v6 · On the chart

Key Levels + Multi-Period VWAP

by RealTrueReality

A Pine v6 indicator that draws key reference levels on the price chart as lines with right-edge labels.

View on GitHub

Repaints

GitHub stars1on the repository
Pine versionv6current
Lines of code2,001
Settings40inputs
LicenceMPL-2.0
Last update2 weeks ago10 Oct 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

2,001 lines of Pine Script v6 from key-levels-vwap.pine, published under MPL-2.0. Keep the author's credit and licence lines when you reuse it.

key-levels-vwap.pine
//@version=6
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
//
// Derived from Key Levels SpacemanBTC IDWM by spacemanbtc.
// Original base code credited to sbtnc; original acknowledgement retained below.
// Original publication: https://www.tradingview.com/script/PV6TowBV-Key-Levels-SpacemanBTC-IDWM/
// Modifications: daily/weekly/monthly anchored VWAP, previous-week/month VWAP
// levels, integrated labels, Pine v6 migration, and running range calculations.
// This is a community modification, not an official SpacemanBTC release.
//
// VWAP extension and maintenance by truereality080.
// Running Monday/year ranges use available chart bars. If loaded history begins
// within a period, that first period's range can be incomplete.
// Monday range is supported on intraday and daily charts, using exchange-time days.
// Current VWAP and developing ranges update as new market data arrives.
// VWAP depends on the symbol's reported volume and chart-bar aggregation.

//@sbtnc thank you for doing the base code

//Added additional levels for convienience sake.

indicator('Key Levels + Multi-Period VWAP (SpacemanBTC Mod)', shorttitle='KL + VWAP', overlay=true, max_lines_count=100, max_labels_count=100)

//35 works

displayStyle = input.string(defval='Standard', title='Display Style', options=['Standard', 'Right Anchored'], inline='Display')

mergebool = input.bool(defval=true, title='Merge Levels?', inline='Display')

distanceright = input.int(defval=30, title='Distance', minval=5, maxval=500, inline='Dist')

radistance = input.int(defval=250, title='Anchor Distance', minval=5, maxval=500, inline='Dist')

labelsize = input.string(defval='Medium', title='Text Size', options=['Small', 'Medium', 'Large'])

linesize = input.string(defval='Small', title='Line Width', options=['Small', 'Medium', 'Large'], inline='Line')

linestyle = input.string(defval='Solid', title='Line Style', options=['Solid', 'Dashed', 'Dotted'], inline='Line')

GlobalTextType = input.bool(defval=false, title='Global Text ShortHand', tooltip='Enable for shorthand text on all text')

var globalcoloring = input.bool(defval=false, title='Global Coloring', tooltip='Enable for all color controls via one color', inline='GC')

GlobalColor = input.color(title='', defval=color.white, inline='GC')

//var show_tails = input(defval = false, title = "Always Show", type = input.bool)

[daily_time, daily_open] = request.security(syminfo.tickerid, 'D', [time, open], lookahead=barmerge.lookahead_on)

[dailyh_time, dailyh_open] = request.security(syminfo.tickerid, 'D', [time[1], high[1]], lookahead=barmerge.lookahead_on)

[dailyl_time, dailyl_open] = request.security(syminfo.tickerid, 'D', [time[1], low[1]], lookahead=barmerge.lookahead_on)

// Accumulate the developing day from observed chart bars, without final-day lookahead.
var float cdailyh_open = na
var float cdailyl_open = na
if timeframe.change('D') or na(cdailyh_open)
    cdailyh_open := high
    cdailyl_open := low
else
    cdailyh_open := math.max(cdailyh_open, high)
    cdailyl_open := math.min(cdailyl_open, low)

var int monday_time = na

var float monday_high = na

var float monday_low = na

[weekly_time, weekly_open] = request.security(syminfo.tickerid, 'W', [time, open], lookahead=barmerge.lookahead_on)

[weeklyh_time, weeklyh_open] = request.security(syminfo.tickerid, 'W', [time[1], high[1]], lookahead=barmerge.lookahead_on)

[weeklyl_time, weeklyl_open] = request.security(syminfo.tickerid, 'W', [time[1], low[1]], lookahead=barmerge.lookahead_on)

[monthly_time, monthly_open] = request.security(syminfo.tickerid, 'M', [time, open], lookahead=barmerge.lookahead_on)

[monthlyh_time, monthlyh_open] = request.security(syminfo.tickerid, 'M', [time[1], high[1]], lookahead=barmerge.lookahead_on)

[monthlyl_time, monthlyl_open] = request.security(syminfo.tickerid, 'M', [time[1], low[1]], lookahead=barmerge.lookahead_on)

[quarterly_time, quarterly_open] = request.security(syminfo.tickerid, '3M', [time, open], lookahead=barmerge.lookahead_on)

[quarterlyh_time, quarterlyh_open] = request.security(syminfo.tickerid, '3M', [time[1], high[1]], lookahead=barmerge.lookahead_on)

[quarterlyl_time, quarterlyl_open] = request.security(syminfo.tickerid, '3M', [time[1], low[1]], lookahead=barmerge.lookahead_on)

[yearly_time, yearly_open] = request.security(syminfo.tickerid, '12M', [time, open], lookahead=barmerge.lookahead_on)

// Current-year range from observed bars; no final-year values projected into history.
yearlyh_time = time('12M')
yearlyl_time = time('12M')
var float yearlyh_open = na
var float yearlyl_open = na
if timeframe.change('12M') or na(yearlyh_open)
    yearlyh_open := high
    yearlyl_open := low
else
    yearlyh_open := math.max(yearlyh_open, high)
    yearlyl_open := math.min(yearlyl_open, low)

[intra_time, intra_open] = request.security(syminfo.tickerid, '240', [time, open], lookahead=barmerge.lookahead_on)

[intrah_time, intrah_open] = request.security(syminfo.tickerid, '240', [time[1], high[1]], lookahead=barmerge.lookahead_on)

[intral_time, intral_open] = request.security(syminfo.tickerid, '240', [time[1], low[1]], lookahead=barmerge.lookahead_on)

//------------------------------ Inputs -------------------------------

var is_intra_enabled = input.bool(defval=false, title='Open', group='4H', inline='4H')

var is_intrarange_enabled = input.bool(defval=false, title='Prev H/L', group='4H', inline='4H')

var is_intram_enabled = input.bool(defval=false, title='Prev Mid', group='4H', inline='4H')

IntraTextType = input.bool(defval=false, title='ShortHand', group='4H', inline='4Hsh')

var is_daily_enabled = input.bool(defval=true, title='Open', group='Daily', inline='Daily')

var is_dailyrange_enabled = input.bool(defval=false, title='Prev H/L', group='Daily', inline='Daily')

var is_dailym_enabled = input.bool(defval=false, title='Prev Mid', group='Daily', inline='Daily')

DailyTextType = input.bool(defval=false, title='ShortHand', group='Daily', inline='Dailysh')

var is_monday_enabled = input.bool(defval=true, title='Range', group='Monday Range', inline='Monday')

var is_monday_mid = input.bool(defval=true, title='Mid', group='Monday Range', inline='Monday')

var untested_monday = false

MondayTextType = input.bool(defval=false, title='ShortHand', group='Monday Range', inline='Mondaysh')

var is_weekly_enabled = input.bool(defval=true, title='Open', group='Weekly', inline='Weekly')

var is_weeklyrange_enabled = input.bool(defval=true, title='Prev H/L', group='Weekly', inline='Weekly')

var is_weekly_mid = input.bool(defval=true, title='Prev Mid', group='Weekly', inline='Weekly')

WeeklyTextType = input.bool(defval=false, title='ShortHand', group='Weekly', inline='Weeklysh')

var is_monthly_enabled = input.bool(defval=true, title='Open', group='Monthly', inline='Monthly')

var is_monthlyrange_enabled = input.bool(defval=true, title='Prev H/L', group='Monthly', inline='Monthly')

var is_monthly_mid = input.bool(defval=true, title='Prev Mid', group='Monthly', inline='Monthly')

MonthlyTextType = input.bool(defval=false, title='ShortHand', group='Monthly', inline='Monthlysh')

var is_quarterly_enabled = input.bool(defval=true, title='Open', group='Quarterly', inline='Quarterly')

var is_quarterlyrange_enabled = input.bool(defval=false, title='Prev H/L', group='Quarterly', inline='Quarterly')

var is_quarterly_mid = input.bool(defval=true, title='Prev Mid', group='Quarterly', inline='Quarterly')

QuarterlyTextType = input.bool(defval=false, title='ShortHand', group='Quarterly', inline='Quarterlysh')

var is_yearly_enabled = input.bool(defval=true, title='Open', group='Yearly', inline='Yearly')

var is_yearlyrange_enabled = input.bool(defval=false, title='Current H/L', group='Yearly', inline='Yearly')

var is_yearly_mid = input.bool(defval=true, title='Mid', group='Yearly', inline='Yearly')

YearlyTextType = input.bool(defval=false, title='ShortHand', group='Yearly', inline='Yearlysh')

var is_londonrange_enabled = input.bool(defval=false, title='London Range', group='FX Sessions', inline='FX')

var is_usrange_enabled = input.bool(defval=false, title='New York Range', group='FX Sessions', inline='FX')

var is_asiarange_enabled = input.bool(defval=false, title='Asia Range', group='FX Sessions', inline='FX')

SessionTextType = input.bool(defval=false, title='ShortHand', group='FX Sessions', inline='FXColor')

//------------------------------ VWAP Inputs -------------------------------
show_daily_vwap = input.bool(defval=true, title='Daily', group='VWAP', inline='VWAP Current')
show_weekly_vwap = input.bool(defval=true, title='Weekly', group='VWAP', inline='VWAP Current')
show_monthly_vwap = input.bool(defval=true, title='Monthly', group='VWAP', inline='VWAP Current')
show_prev_weekly_vwap = input.bool(defval=false, title='Prev Weekly', group='VWAP', inline='VWAP Prev')
show_prev_monthly_vwap = input.bool(defval=false, title='Prev Monthly', group='VWAP', inline='VWAP Prev')
vwap_source = input.source(defval=hlc3, title='Source', group='VWAP', inline='VWAP Style')
vwap_line_width = input.int(defval=2, title='Width', minval=1, maxval=4, group='VWAP', inline='VWAP Style')

Londont = input.session("0800-1600", "London Session")

USt = input.session("1400-2100", "New York Session")

Asiat = input.session("0000-0900", "Tokyo Session")

DailyColor = input.color(title='', defval=#08bcd4, group='Daily', inline='Dailysh')

MondayColor = input.color(title='', defval=color.white, group='Monday Range', inline='Mondaysh')

WeeklyColor = input.color(title='', defval=#fffcbc, group='Weekly', inline='Weeklysh')

MonthlyColor = input.color(title='', defval=#08d48c, group='Monthly', inline='Monthlysh')

YearlyColor = input.color(title='', defval=color.red, group='Yearly', inline='Yearlysh')

quarterlyColor = input.color(title='', defval=color.red, group='Quarterly', inline='Quarterlysh')

IntraColor = input.color(title='', defval=color.orange, group='4H', inline='4Hsh')

LondonColor = input.color(title='', defval=color.white, group='FX Sessions', inline='FXColor')

USColor = input.color(title='', defval=color.white, group='FX Sessions', inline='FXColor')

AsiaColor = input.color(title='', defval=color.white, group='FX Sessions', inline='FXColor')

var pdhtext = GlobalTextType or DailyTextType ? 'PDH' : 'Prev Day High'

var pdltext = GlobalTextType or DailyTextType ? 'PDL' : 'Prev Day Low'

var dotext = GlobalTextType or DailyTextType ? 'DO' : 'Daily Open'

var pdmtext = GlobalTextType or DailyTextType ? 'PDM' : 'Prev Day Mid'

var pwhtext = GlobalTextType or WeeklyTextType ? 'PWH' : 'Prev Week High'

var pwltext = GlobalTextType or WeeklyTextType ? 'PWL' : 'Prev Week Low'

var wotext = GlobalTextType or WeeklyTextType ? 'WO' : 'Weekly Open'

var pwmtext = GlobalTextType or WeeklyTextType ? 'PWM' : 'Prev Week Mid'

var pmhtext = GlobalTextType or MonthlyTextType ? 'PMH' : 'Prev Month High'

var pmltext = GlobalTextType or MonthlyTextType ? 'PML' : 'Prev Month Low'

var motext = GlobalTextType or MonthlyTextType ? 'MO' : 'Monthly Open'

var pmmtext = GlobalTextType or MonthlyTextType ? 'PMM' : 'Prev Month Mid'

var pqhtext = GlobalTextType or QuarterlyTextType ? 'PQH' : 'Prev Quarter High'

var pqltext = GlobalTextType or QuarterlyTextType ? 'PQL' : 'Prev Quarter Low'

var qotext = GlobalTextType or QuarterlyTextType ? 'QO' : 'Quarterly Open'

var pqmtext = GlobalTextType or QuarterlyTextType ? 'PQM' : 'Prev Quarter Mid'

var cyhtext = GlobalTextType or YearlyTextType ? 'CYH' : 'Current Year High'

var cyltext = GlobalTextType or YearlyTextType ? 'CYL' : 'Current Year Low'

var yotext = GlobalTextType or YearlyTextType ? 'YO' : 'Yearly Open'

var cymtext = GlobalTextType or YearlyTextType ? 'CYM' : 'Current Year Mid'

var pihtext = GlobalTextType or IntraTextType ? 'P-4H-H' : 'Prev 4H High'

var piltext = GlobalTextType or IntraTextType ? 'P-4H-L' : 'Prev 4H Low'

var iotext = GlobalTextType or IntraTextType ? '4H-O' : '4H Open'

var pimtext = GlobalTextType or IntraTextType ? 'P-4H-M' : 'Prev 4H Mid'

var pmonhtext = GlobalTextType or MondayTextType ? 'MDAY-H' : 'Monday High'

var pmonltext = GlobalTextType or MondayTextType ? 'MDAY-L' : 'Monday Low'

var pmonmtext = GlobalTextType or MondayTextType ? 'MDAY-M' : 'Monday Mid'

var lhtext = GlobalTextType or SessionTextType ? 'Lon-H' : 'London High'

var lltext = GlobalTextType or SessionTextType ? 'Lon-L' : 'London Low'

var lotext = GlobalTextType or SessionTextType ? 'Lon-O' : 'London Open'

var ushtext = GlobalTextType or SessionTextType ? 'NY-H' : 'New York High'

var usltext = GlobalTextType or SessionTextType ? 'NY-L' : 'New York Low'

var usotext = GlobalTextType or SessionTextType ? 'NY-O' : 'New York Open'

var asiahtext = GlobalTextType or SessionTextType ? 'AS-H' : 'Asia High'

var asialtext = GlobalTextType or SessionTextType ? 'AS-L' : 'Asia Low'

var asiaotext = GlobalTextType or SessionTextType ? 'AS-O' : 'Asia Open'

var dvwaptext = GlobalTextType ? 'DVWAP' : 'Daily VWAP'
var wvwaptext = GlobalTextType ? 'WVWAP' : 'Weekly VWAP'
var mvwaptext = GlobalTextType ? 'MVWAP' : 'Monthly VWAP'
var pwvwaptext = GlobalTextType ? 'PWVWAP' : 'Prev Week VWAP'
var pmvwaptext = GlobalTextType ? 'PMVWAP' : 'Prev Month VWAP'

if globalcoloring == true

    DailyColor := GlobalColor

    MondayColor := GlobalColor

    WeeklyColor := GlobalColor

    MonthlyColor := GlobalColor

    YearlyColor := GlobalColor

    quarterlyColor := GlobalColor

    IntraColor := GlobalColor

    IntraColor

//------------------------------ VWAP Calculations -------------------------------
// TradingView-standard anchored VWAP: HLC3 by default, volume weighted, resetting at each period boundary.
new_day = timeframe.change('1D')
new_week = timeframe.change('1W')
new_month = timeframe.change('1M')

daily_vwap = ta.vwap(vwap_source, new_day)
weekly_vwap = ta.vwap(vwap_source, new_week)
monthly_vwap = ta.vwap(vwap_source, new_month)

// Capture the final VWAP of the period that just closed. These values stay fixed throughout the new period.
var float prev_weekly_vwap = na
var float prev_monthly_vwap = na
if new_week and not na(weekly_vwap[1])
    prev_weekly_vwap := weekly_vwap[1]
if new_month and not na(monthly_vwap[1])
    prev_monthly_vwap := monthly_vwap[1]

// Current anchored VWAP curves. Daily is intentionally hidden on D+ charts; Weekly/Monthly follow the
// same timeframe visibility philosophy already used by the key-level sections below.
plot(show_daily_vwap and timeframe.isintraday ? daily_vwap : na, title='Daily VWAP', color=DailyColor, linewidth=vwap_line_width)
plot(show_weekly_vwap and not timeframe.isweekly and not timeframe.ismonthly ? weekly_vwap : na, title='Weekly VWAP', color=WeeklyColor, linewidth=vwap_line_width)
plot(show_monthly_vwap and not timeframe.ismonthly ? monthly_vwap : na, title='Monthly VWAP', color=MonthlyColor, linewidth=vwap_line_width)

// Develop the Monday range during Monday, then retain it for the rest of the week.
// A new week clears the old Monday range until this week's Monday is observed.
if timeframe.change('W')
    untested_monday := false
    monday_time := na
    monday_high := na
    monday_low := na

if (timeframe.isintraday or timeframe.isdaily) and dayofweek(time('D')) == dayofweek.monday
    if not untested_monday
        monday_time := time('D')
        monday_high := cdailyh_open
        monday_low := cdailyl_open
        untested_monday := true
    else
        monday_high := math.max(monday_high, cdailyh_open)
        monday_low := math.min(monday_low, cdailyl_open)

linewidthint = 1

if linesize == 'Small'

    linewidthint := 1

    linewidthint

if linesize == 'Medium'

    linewidthint := 2

    linewidthint

if linesize == 'Large'

    linewidthint := 3

    linewidthint

var DEFAULT_LINE_WIDTH = linewidthint

var DEFAULT_TAIL_WIDTH = linewidthint

fontsize = size.small

if labelsize == 'Small'

    fontsize := size.small

    fontsize

if labelsize == 'Medium'

    fontsize := size.normal

    fontsize

if labelsize == 'Large'

    fontsize := size.large

    fontsize

linestyles = line.style_solid

if linestyle == 'Dashed'

    linestyles := line.style_dashed

    linestyles

if linestyle == 'Dotted'

    linestyles := line.style_dotted

    linestyles

var DEFAULT_LABEL_SIZE = fontsize

var DEFAULT_LABEL_STYLE = label.style_none

var DEFAULT_EXTEND_RIGHT = distanceright

London = time(timeframe.period, Londont)

US = time(timeframe.period, USt)

Asia = time(timeframe.period, Asiat)

var clondonhigh = 0.0

var clondonlow = close

var londontime = time

var flondonhigh = 0.0

var flondonlow = 0.0

var flondonopen = 0.0

var onelondonfalse = false

if not na(London)

    if high > clondonhigh

        clondonhigh := high

        clondonhigh

    if low < clondonlow

        clondonlow := low

        clondonlow

    if onelondonfalse

        londontime := time

        flondonopen := open

        flondonopen

    flondonhigh := clondonhigh

    flondonlow := clondonlow

    onelondonfalse := false

    onelondonfalse

else

    if onelondonfalse == false

        flondonhigh := clondonhigh

        flondonlow := clondonlow

        flondonlow

    onelondonfalse := true

    clondonhigh := 0.0

    clondonlow := close

    clondonlow

//////////////////////////////////

var cushigh = 0.0

var cuslow = close

var ustime = time

var fushigh = 0.0

var fuslow = 0.0

var fusopen = 0.0

var oneusfalse = false

if not na(US)

    if high > cushigh

        cushigh := high

        cushigh

    if low < cuslow

        cuslow := low

        cuslow

    if oneusfalse

        ustime := time

        fusopen := open

        fusopen

    fushigh := cushigh

    fuslow := cuslow

    oneusfalse := false

    oneusfalse

else

    if oneusfalse == false

        fushigh := cushigh

        fuslow := cuslow

        fuslow

    oneusfalse := true

    cushigh := 0.0

    cuslow := close

    cuslow

//////////////////////////////////

var casiahigh = 0.0

var casialow = close

var asiatime = time

var fasiahigh = 0.0

var fasialow = 0.0

var fasiaopen = 0.0

var oneasiafalse = false

if not na(Asia)

    if high > casiahigh

        casiahigh := high

        casiahigh

    if low < casialow

        casialow := low

        casialow

    if oneasiafalse

        asiatime := time

        fasiaopen := open

        fasiaopen

    fasiahigh := casiahigh

    fasialow := casialow

    oneasiafalse := false

    oneasiafalse

else

    if oneasiafalse == false

        fasiahigh := casiahigh

        fasialow := casialow

        fasialow

    oneasiafalse := true

    casiahigh := 0.0

    casialow := close

    casialow

//------------------------------ Plotting ------------------------------

var pricearray = array.new_float(0)

var labelarray = array.new_label(0)

f_LevelMerge(pricearray, labelarray, currentprice, currentlabel, currentcolor) =>

    if array.includes(pricearray, currentprice)

        whichindex = array.indexof(pricearray, currentprice)

        labelhold = array.get(labelarray, whichindex)

        whichtext = label.get_text(labelhold)

        label.set_text(labelhold, label.get_text(currentlabel) + ' / ' + whichtext)

        label.set_text(currentlabel, '')

        label.set_textcolor(labelhold, currentcolor)

    else

        array.push(pricearray, currentprice)

        array.push(labelarray, currentlabel)

var can_show_daily = is_daily_enabled and timeframe.isintraday

var can_show_weekly = is_weekly_enabled and not timeframe.isweekly and not timeframe.ismonthly

var can_show_monthly = is_monthly_enabled and not timeframe.ismonthly

get_limit_right(bars) =>

    timenow + (time - time[1]) * bars

// the following code doesn't need to be processed on every candle

if barstate.islast

    is_weekly_open = dayofweek == dayofweek.monday

    is_monthly_open = dayofmonth == 1

    can_draw_daily = (is_weekly_enabled ? not is_weekly_open : true) and (is_monthly_enabled ? not is_monthly_open : true)

    can_draw_weekly = is_monthly_enabled ? not(is_monthly_open and is_weekly_open) : true

    can_draw_intra = is_intra_enabled

    can_draw_intrah = is_intrarange_enabled

    can_draw_intral = is_intrarange_enabled

    can_draw_intram = is_intram_enabled

    pricearray := array.new_float(0)

    labelarray := array.new_label(0)

    ///////////////////////////////// VWAP
    // Current VWAPs are plotted as curves above. These short stubs + labels make them read like the
    // rest of this key-level indicator at the right edge of the chart.
    vwap_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

    if show_daily_vwap and timeframe.isintraday and not na(daily_vwap)
        var daily_vwap_stub = line.new(x1=time, x2=vwap_limit_right, y1=daily_vwap, y2=daily_vwap, color=DailyColor, width=vwap_line_width, xloc=xloc.bar_time)
        var daily_vwap_label = label.new(x=vwap_limit_right, y=daily_vwap, text=dvwaptext, style=DEFAULT_LABEL_STYLE, textcolor=DailyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)
        line.set_x1(daily_vwap_stub, time)
        line.set_x2(daily_vwap_stub, vwap_limit_right)
        line.set_y1(daily_vwap_stub, daily_vwap)
        line.set_y2(daily_vwap_stub, daily_vwap)
        label.set_x(daily_vwap_label, vwap_limit_right)
        label.set_y(daily_vwap_label, daily_vwap)
        label.set_text(daily_vwap_label, dvwaptext)
        if mergebool
            f_LevelMerge(pricearray, labelarray, daily_vwap, daily_vwap_label, DailyColor)

    if show_weekly_vwap and not timeframe.isweekly and not timeframe.ismonthly and not na(weekly_vwap)
        var weekly_vwap_stub = line.new(x1=time, x2=vwap_limit_right, y1=weekly_vwap, y2=weekly_vwap, color=WeeklyColor, width=vwap_line_width, xloc=xloc.bar_time)
        var weekly_vwap_label = label.new(x=vwap_limit_right, y=weekly_vwap, text=wvwaptext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)
        line.set_x1(weekly_vwap_stub, time)
        line.set_x2(weekly_vwap_stub, vwap_limit_right)
        line.set_y1(weekly_vwap_stub, weekly_vwap)
        line.set_y2(weekly_vwap_stub, weekly_vwap)
        label.set_x(weekly_vwap_label, vwap_limit_right)
        label.set_y(weekly_vwap_label, weekly_vwap)
        label.set_text(weekly_vwap_label, wvwaptext)
        if mergebool
            f_LevelMerge(pricearray, labelarray, weekly_vwap, weekly_vwap_label, WeeklyColor)

    if show_monthly_vwap and not timeframe.ismonthly and not na(monthly_vwap)
        var monthly_vwap_stub = line.new(x1=time, x2=vwap_limit_right, y1=monthly_vwap, y2=monthly_vwap, color=MonthlyColor, width=vwap_line_width, xloc=xloc.bar_time)
        var monthly_vwap_label = label.new(x=vwap_limit_right, y=monthly_vwap, text=mvwaptext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)
        line.set_x1(monthly_vwap_stub, time)
        line.set_x2(monthly_vwap_stub, vwap_limit_right)
        line.set_y1(monthly_vwap_stub, monthly_vwap)
        line.set_y2(monthly_vwap_stub, monthly_vwap)
        label.set_x(monthly_vwap_label, vwap_limit_right)
        label.set_y(monthly_vwap_label, monthly_vwap)
        label.set_text(monthly_vwap_label, mvwaptext)
        if mergebool
            f_LevelMerge(pricearray, labelarray, monthly_vwap, monthly_vwap_label, MonthlyColor)

    // Previous-period VWAPs are fixed horizontal levels: prior completed week/month final VWAP,
    // displayed across the current week/month and dashed to distinguish them from opens/highs/lows.
    if show_prev_weekly_vwap and not timeframe.isweekly and not timeframe.ismonthly and not na(prev_weekly_vwap)
        prev_week_vwap_start = weekly_time
        if displayStyle == 'Right Anchored'
            prev_week_vwap_start := get_limit_right(radistance)
        var prev_week_vwap_line = line.new(x1=prev_week_vwap_start, x2=vwap_limit_right, y1=prev_weekly_vwap, y2=prev_weekly_vwap, color=WeeklyColor, width=vwap_line_width, xloc=xloc.bar_time, style=line.style_dashed)
        var prev_week_vwap_label = label.new(x=vwap_limit_right, y=prev_weekly_vwap, text=pwvwaptext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)
        line.set_x1(prev_week_vwap_line, prev_week_vwap_start)
        line.set_x2(prev_week_vwap_line, vwap_limit_right)
        line.set_y1(prev_week_vwap_line, prev_weekly_vwap)
        line.set_y2(prev_week_vwap_line, prev_weekly_vwap)
        label.set_x(prev_week_vwap_label, vwap_limit_right)
        label.set_y(prev_week_vwap_label, prev_weekly_vwap)
        label.set_text(prev_week_vwap_label, pwvwaptext)
        if mergebool
            f_LevelMerge(pricearray, labelarray, prev_weekly_vwap, prev_week_vwap_label, WeeklyColor)

    if show_prev_monthly_vwap and not timeframe.ismonthly and not na(prev_monthly_vwap)
        prev_month_vwap_start = monthly_time
        if displayStyle == 'Right Anchored'
            prev_month_vwap_start := get_limit_right(radistance)
        var prev_month_vwap_line = line.new(x1=prev_month_vwap_start, x2=vwap_limit_right, y1=prev_monthly_vwap, y2=prev_monthly_vwap, color=MonthlyColor, width=vwap_line_width, xloc=xloc.bar_time, style=line.style_dashed)
        var prev_month_vwap_label = label.new(x=vwap_limit_right, y=prev_monthly_vwap, text=pmvwaptext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)
        line.set_x1(prev_month_vwap_line, prev_month_vwap_start)
        line.set_x2(prev_month_vwap_line, vwap_limit_right)
        line.set_y1(prev_month_vwap_line, prev_monthly_vwap)
        line.set_y2(prev_month_vwap_line, prev_monthly_vwap)
        label.set_x(prev_month_vwap_label, vwap_limit_right)
        label.set_y(prev_month_vwap_label, prev_monthly_vwap)
        label.set_text(prev_month_vwap_label, pmvwaptext)
        if mergebool
            f_LevelMerge(pricearray, labelarray, prev_monthly_vwap, prev_month_vwap_label, MonthlyColor)

    /////////////////////////////////

    if is_londonrange_enabled

        //label.new(bar_index,high)

        london_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            londontime := get_limit_right(radistance)

            londontime

        var londonh_line = line.new(x1=londontime, x2=london_limit_right, y1=flondonhigh, y2=flondonhigh, color=LondonColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var londonl_line = line.new(x1=londontime, x2=london_limit_right, y1=flondonlow, y2=flondonlow, color=LondonColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var londono_line = line.new(x1=londontime, x2=london_limit_right, y1=flondonopen, y2=flondonopen, color=LondonColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var londonh_label = label.new(x=london_limit_right, y=flondonhigh, text=lhtext, style=DEFAULT_LABEL_STYLE, textcolor=LondonColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var londonl_label = label.new(x=london_limit_right, y=flondonlow, text=lltext, style=DEFAULT_LABEL_STYLE, textcolor=LondonColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var londono_label = label.new(x=london_limit_right, y=flondonopen, text=lotext, style=DEFAULT_LABEL_STYLE, textcolor=LondonColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(londonh_line, londontime)

        line.set_x2(londonh_line, london_limit_right)

        line.set_y1(londonh_line, flondonhigh)

        line.set_y2(londonh_line, flondonhigh)

        line.set_x1(londonl_line, londontime)

        line.set_x2(londonl_line, london_limit_right)

        line.set_y1(londonl_line, flondonlow)

        line.set_y2(londonl_line, flondonlow)

        line.set_x1(londono_line, londontime)

        line.set_x2(londono_line, london_limit_right)

        line.set_y1(londono_line, flondonopen)

        line.set_y2(londono_line, flondonopen)

        label.set_x(londonh_label, london_limit_right)

        label.set_y(londonh_label, flondonhigh)

        label.set_text(londonh_label, lhtext)

        label.set_x(londonl_label, london_limit_right)

        label.set_y(londonl_label, flondonlow)

        label.set_text(londonl_label, lltext)

        label.set_x(londono_label, london_limit_right)

        label.set_y(londono_label, flondonopen)

        label.set_text(londono_label, lotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, flondonhigh, londonh_label, LondonColor)

            f_LevelMerge(pricearray, labelarray, flondonlow, londonl_label, LondonColor)

            f_LevelMerge(pricearray, labelarray, flondonopen, londono_label, LondonColor)

//////////////////////////////////////////////////////////////////////////////////

    /////////////////////////////////

    if is_usrange_enabled

        //label.new(bar_index,high)

        us_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            ustime := get_limit_right(radistance)

            ustime

        var ush_line = line.new(x1=ustime, x2=us_limit_right, y1=fushigh, y2=fushigh, color=USColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var usl_line = line.new(x1=ustime, x2=us_limit_right, y1=fuslow, y2=fuslow, color=USColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var uso_line = line.new(x1=ustime, x2=us_limit_right, y1=fusopen, y2=fusopen, color=USColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var ush_label = label.new(x=us_limit_right, y=fushigh, text=lhtext, style=DEFAULT_LABEL_STYLE, textcolor=USColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var usl_label = label.new(x=us_limit_right, y=fuslow, text=lltext, style=DEFAULT_LABEL_STYLE, textcolor=USColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var uso_label = label.new(x=us_limit_right, y=fusopen, text=lotext, style=DEFAULT_LABEL_STYLE, textcolor=USColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(ush_line, ustime)

        line.set_x2(ush_line, us_limit_right)

        line.set_y1(ush_line, fushigh)

        line.set_y2(ush_line, fushigh)

        line.set_x1(usl_line, ustime)

        line.set_x2(usl_line, us_limit_right)

        line.set_y1(usl_line, fuslow)

        line.set_y2(usl_line, fuslow)

        line.set_x1(uso_line, ustime)

        line.set_x2(uso_line, us_limit_right)

        line.set_y1(uso_line, fusopen)

        line.set_y2(uso_line, fusopen)

        label.set_x(ush_label, us_limit_right)

        label.set_y(ush_label, fushigh)

        label.set_text(ush_label, ushtext)

        label.set_x(usl_label, us_limit_right)

        label.set_y(usl_label, fuslow)

        label.set_text(usl_label, usltext)

        label.set_x(uso_label, us_limit_right)

        label.set_y(uso_label, fusopen)

        label.set_text(uso_label, usotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, fushigh, ush_label, USColor)

            f_LevelMerge(pricearray, labelarray, fuslow, usl_label, USColor)

            f_LevelMerge(pricearray, labelarray, fusopen, uso_label, USColor)

    /////////////////////////////////

    if is_asiarange_enabled

        //label.new(bar_index,high)

        asia_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            asiatime := get_limit_right(radistance)

            asiatime

        var asiah_line = line.new(x1=asiatime, x2=asia_limit_right, y1=fasiahigh, y2=fasiahigh, color=AsiaColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var asial_line = line.new(x1=asiatime, x2=asia_limit_right, y1=fasialow, y2=fasialow, color=AsiaColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var asiao_line = line.new(x1=asiatime, x2=asia_limit_right, y1=fasiaopen, y2=fasiaopen, color=AsiaColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var asiah_label = label.new(x=asia_limit_right, y=fasiahigh, text=asiahtext, style=DEFAULT_LABEL_STYLE, textcolor=AsiaColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var asial_label = label.new(x=asia_limit_right, y=fasialow, text=asialtext, style=DEFAULT_LABEL_STYLE, textcolor=AsiaColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        var asiao_label = label.new(x=asia_limit_right, y=fasiaopen, text=asiaotext, style=DEFAULT_LABEL_STYLE, textcolor=AsiaColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(asiah_line, asiatime)

        line.set_x2(asiah_line, asia_limit_right)

        line.set_y1(asiah_line, fasiahigh)

        line.set_y2(asiah_line, fasiahigh)

        line.set_x1(asial_line, asiatime)

        line.set_x2(asial_line, asia_limit_right)

        line.set_y1(asial_line, fasialow)

        line.set_y2(asial_line, fasialow)

        line.set_x1(asiao_line, asiatime)

        line.set_x2(asiao_line, asia_limit_right)

        line.set_y1(asiao_line, fasiaopen)

        line.set_y2(asiao_line, fasiaopen)

        label.set_x(asiah_label, asia_limit_right)

        label.set_y(asiah_label, fasiahigh)

        label.set_text(asiah_label, asiahtext)

        label.set_x(asial_label, asia_limit_right)

        label.set_y(asial_label, fasialow)

        label.set_text(asial_label, asialtext)

        label.set_x(asiao_label, asia_limit_right)

        label.set_y(asiao_label, fasiaopen)

        label.set_text(asiao_label, asiaotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, fasiahigh, asiah_label, AsiaColor)

            f_LevelMerge(pricearray, labelarray, fasialow, asial_label, AsiaColor)

            f_LevelMerge(pricearray, labelarray, fasiaopen, asiao_label, AsiaColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

    if can_draw_intra

        intra_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            intra_time := get_limit_right(radistance)

            intra_time

        var intra_line = line.new(x1=intra_time, x2=intra_limit_right, y1=intra_open, y2=intra_open, color=IntraColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var intra_label = label.new(x=intra_limit_right, y=intra_open, text=iotext, style=DEFAULT_LABEL_STYLE, textcolor=IntraColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(intra_line, intra_time)

        line.set_x2(intra_line, intra_limit_right)

        line.set_y1(intra_line, intra_open)

        line.set_y2(intra_line, intra_open)

        label.set_x(intra_label, intra_limit_right)

        label.set_y(intra_label, intra_open)

        label.set_text(intra_label, iotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, intra_open, intra_label, IntraColor)

//////////////////////////////////////////////////////////////////////////////////

//HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH

    if can_draw_intrah

        intrah_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            intrah_time := get_limit_right(radistance)

            intrah_time

        var intrah_line = line.new(x1=intrah_time, x2=intrah_limit_right, y1=intrah_open, y2=intrah_open, color=IntraColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var intrah_label = label.new(x=intrah_limit_right, y=intrah_open, text=pihtext, style=DEFAULT_LABEL_STYLE, textcolor=IntraColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(intrah_line, intrah_time)

        line.set_x2(intrah_line, intrah_limit_right)

        line.set_y1(intrah_line, intrah_open)

        line.set_y2(intrah_line, intrah_open)

        label.set_x(intrah_label, intrah_limit_right)

        label.set_y(intrah_label, intrah_open)

        label.set_text(intrah_label, pihtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, intrah_open, intrah_label, IntraColor)

//////////////////////////////////////////////////////////////////////////////////

//LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW LOW

    if can_draw_intral

        intral_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            intral_time := get_limit_right(radistance)

            intral_time

        var intral_line = line.new(x1=intral_time, x2=intral_limit_right, y1=intral_open, y2=intral_open, color=IntraColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var intral_label = label.new(x=intral_limit_right, y=intral_open, text=piltext, style=DEFAULT_LABEL_STYLE, textcolor=IntraColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(intral_line, intral_time)

        line.set_x2(intral_line, intral_limit_right)

        line.set_y1(intral_line, intral_open)

        line.set_y2(intral_line, intral_open)

        label.set_x(intral_label, intral_limit_right)

        label.set_y(intral_label, intral_open)

        label.set_text(intral_label, piltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, intral_open, intral_label, IntraColor)

///////////////////////////////////////////////////////////////////////////////

    if can_draw_intram

        intram_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        intram_time = intrah_time

        intram_open = (intral_open + intrah_open) / 2

        if displayStyle == 'Right Anchored'

            intram_time := get_limit_right(radistance)

            intram_time

        var intram_line = line.new(x1=intram_time, x2=intram_limit_right, y1=intram_open, y2=intram_open, color=IntraColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var intram_label = label.new(x=intram_limit_right, y=intram_open, text=pimtext, style=DEFAULT_LABEL_STYLE, textcolor=IntraColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(intram_line, intram_time)

        line.set_x2(intram_line, intram_limit_right)

        line.set_y1(intram_line, intram_open)

        line.set_y2(intram_line, intram_open)

        label.set_x(intram_label, intram_limit_right)

        label.set_y(intram_label, intram_open)

        label.set_text(intram_label, pimtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, intram_open, intram_label, IntraColor)

////////////////////////////////////////// MONDAY

    if is_monday_enabled and (timeframe.isintraday or timeframe.isdaily) and not na(monday_high)

        monday_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            monday_time := get_limit_right(radistance)

            monday_time

        var monday_line = line.new(x1=monday_time, x2=monday_limit_right, y1=monday_high, y2=monday_high, color=MondayColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monday_label = label.new(x=monday_limit_right, y=monday_high, text=pmonhtext, style=DEFAULT_LABEL_STYLE, textcolor=MondayColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monday_line, monday_time)

        line.set_x2(monday_line, monday_limit_right)

        line.set_y1(monday_line, monday_high)

        line.set_y2(monday_line, monday_high)

        label.set_x(monday_label, monday_limit_right)

        label.set_y(monday_label, monday_high)

        label.set_text(monday_label, pmonhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monday_high, monday_label, MondayColor)

    if is_monday_enabled and (timeframe.isintraday or timeframe.isdaily) and not na(monday_high)

        monday_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            monday_time := get_limit_right(radistance)

            monday_time

        var monday_low_line = line.new(x1=monday_time, x2=monday_limit_right, y1=monday_low, y2=monday_low, color=MondayColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monday_low_label = label.new(x=monday_limit_right, y=monday_low, text=pmonltext, style=DEFAULT_LABEL_STYLE, textcolor=MondayColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monday_low_line, monday_time)

        line.set_x2(monday_low_line, monday_limit_right)

        line.set_y1(monday_low_line, monday_low)

        line.set_y2(monday_low_line, monday_low)

        label.set_x(monday_low_label, monday_limit_right)

        label.set_y(monday_low_label, monday_low)

        label.set_text(monday_low_label, pmonltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monday_low, monday_low_label, MondayColor)

    if is_monday_mid and (timeframe.isintraday or timeframe.isdaily) and not na(monday_high)

        mondaym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        mondaym_open = (monday_high + monday_low) / 2

        if displayStyle == 'Right Anchored'

            monday_time := get_limit_right(radistance)

            monday_time

        var mondaym_line = line.new(x1=monday_time, x2=mondaym_limit_right, y1=mondaym_open, y2=mondaym_open, color=MondayColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var mondaym_label = label.new(x=mondaym_limit_right, y=mondaym_open, text=pmonmtext, style=DEFAULT_LABEL_STYLE, textcolor=MondayColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(mondaym_line, monday_time)

        line.set_x2(mondaym_line, mondaym_limit_right)

        line.set_y1(mondaym_line, mondaym_open)

        line.set_y2(mondaym_line, mondaym_open)

        label.set_x(mondaym_label, mondaym_limit_right)

        label.set_y(mondaym_label, mondaym_open)

        label.set_text(mondaym_label, pmonmtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, mondaym_open, mondaym_label, MondayColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////DAILY OPEN DAILY OPEN DAILY OPEN DAILY OPEN DAILY OPEN DAILY OPEN DAILY OPEN

    if is_daily_enabled

        daily_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            daily_time := get_limit_right(radistance)

            daily_time

        var daily_line = line.new(x1=daily_time, x2=daily_limit_right, y1=daily_open, y2=daily_open, color=DailyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var daily_label = label.new(x=daily_limit_right, y=daily_open, text=dotext, style=DEFAULT_LABEL_STYLE, textcolor=DailyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(daily_line, daily_time)

        line.set_x2(daily_line, daily_limit_right)

        line.set_y1(daily_line, daily_open)

        line.set_y2(daily_line, daily_open)

        label.set_x(daily_label, daily_limit_right)

        label.set_y(daily_label, daily_open)

        label.set_text(daily_label, dotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, daily_open, daily_label, DailyColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////DAILY HIGH DAILY HIGH DAILY HIGH DAILY HIGH DAILY HIGH DAILY HIGH DAILY HIGH

    if is_dailyrange_enabled

        dailyh_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            dailyh_time := get_limit_right(radistance)

            dailyh_time

        // draw tails before lines for better visual

        var dailyh_line = line.new(x1=dailyh_time, x2=dailyh_limit_right, y1=dailyh_open, y2=dailyh_open, color=DailyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var dailyh_label = label.new(x=dailyh_limit_right, y=dailyh_open, text=pdhtext, style=DEFAULT_LABEL_STYLE, textcolor=DailyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(dailyh_line, dailyh_time)

        line.set_x2(dailyh_line, dailyh_limit_right)

        line.set_y1(dailyh_line, dailyh_open)

        line.set_y2(dailyh_line, dailyh_open)

        label.set_x(dailyh_label, dailyh_limit_right)

        label.set_y(dailyh_label, dailyh_open)

        label.set_text(dailyh_label, pdhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, dailyh_open, dailyh_label, DailyColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////DAILY LOW DAILY LOW DAILY LOW DAILY LOW DAILY LOW DAILY LOW DAILY LOW DAILY LOW

    if is_dailyrange_enabled

        dailyl_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            dailyl_time := get_limit_right(radistance)

            dailyl_time

        var dailyl_line = line.new(x1=dailyl_time, x2=dailyl_limit_right, y1=dailyl_open, y2=dailyl_open, color=DailyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var dailyl_label = label.new(x=dailyl_limit_right, y=dailyl_open, text=pdltext, style=DEFAULT_LABEL_STYLE, textcolor=DailyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(dailyl_line, dailyl_time)

        line.set_x2(dailyl_line, dailyl_limit_right)

        line.set_y1(dailyl_line, dailyl_open)

        line.set_y2(dailyl_line, dailyl_open)

        label.set_x(dailyl_label, dailyl_limit_right)

        label.set_y(dailyl_label, dailyl_open)

        label.set_text(dailyl_label, pdltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, dailyl_open, dailyl_label, DailyColor)

//////////////////////////////////////////////////////////////////////////////// Daily MID

    if is_dailym_enabled

        dailym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        dailym_time = dailyh_time

        dailym_open = (dailyl_open + dailyh_open) / 2

        if displayStyle == 'Right Anchored'

            dailym_time := get_limit_right(radistance)

            dailym_time

        var dailym_line = line.new(x1=dailym_time, x2=dailym_limit_right, y1=dailym_open, y2=dailym_open, color=DailyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var dailym_label = label.new(x=dailym_limit_right, y=dailym_open, text=pdmtext, style=DEFAULT_LABEL_STYLE, textcolor=DailyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(dailym_line, dailym_time)

        line.set_x2(dailym_line, dailym_limit_right)

        line.set_y1(dailym_line, dailym_open)

        line.set_y2(dailym_line, dailym_open)

        label.set_x(dailym_label, dailym_limit_right)

        label.set_y(dailym_label, dailym_open)

        label.set_text(dailym_label, pdmtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, dailym_open, dailym_label, DailyColor)

//////////////////////////////////////////////////////////////////////////////////

    if is_weekly_enabled

        weekly_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        cweekly_time = weekly_time

        if displayStyle == 'Right Anchored'

            cweekly_time := get_limit_right(radistance)

            cweekly_time

        var weekly_line = line.new(x1=cweekly_time, x2=weekly_limit_right, y1=weekly_open, y2=weekly_open, color=WeeklyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var weekly_label = label.new(x=weekly_limit_right, y=weekly_open, text=wotext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(weekly_line, cweekly_time)

        line.set_x2(weekly_line, weekly_limit_right)

        line.set_y1(weekly_line, weekly_open)

        line.set_y2(weekly_line, weekly_open)

        label.set_x(weekly_label, weekly_limit_right)

        label.set_y(weekly_label, weekly_open)

        label.set_text(weekly_label, wotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, weekly_open, weekly_label, WeeklyColor)

        // the weekly open can be the daily open too (monday)

        // only the weekly will be draw, in these case we update its label

    // if is_weekly_open and can_show_daily

            // label.set_text(weekly_label, "DO / WO            ")

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// WEEKLY HIGH WEEKLY HIGH WEEKLY HIGH

    if is_weeklyrange_enabled

        weeklyh_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            weeklyh_time := get_limit_right(radistance)

            weeklyh_time

        var weeklyh_line = line.new(x1=weeklyh_time, x2=weeklyh_limit_right, y1=weeklyh_open, y2=weeklyh_open, color=WeeklyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var weeklyh_label = label.new(x=weeklyh_limit_right, y=weeklyh_open, text=pwhtext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(weeklyh_line, weeklyh_time)

        line.set_x2(weeklyh_line, weeklyh_limit_right)

        line.set_y1(weeklyh_line, weeklyh_open)

        line.set_y2(weeklyh_line, weeklyh_open)

        label.set_x(weeklyh_label, weeklyh_limit_right)

        label.set_y(weeklyh_label, weeklyh_open)

        label.set_text(weeklyh_label, pwhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, weeklyh_open, weeklyh_label, WeeklyColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// WEEKLY LOW WEEKLY LOW WEEKLY LOW

    if is_weeklyrange_enabled

        weeklyl_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            weeklyl_time := get_limit_right(radistance)

            weeklyl_time

        var weeklyl_line = line.new(x1=weeklyl_time, x2=weeklyl_limit_right, y1=weekly_open, y2=weekly_open, color=WeeklyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var weeklyl_label = label.new(x=weeklyl_limit_right, y=weeklyl_open, text=pwltext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(weeklyl_line, weeklyl_time)

        line.set_x2(weeklyl_line, weeklyl_limit_right)

        line.set_y1(weeklyl_line, weeklyl_open)

        line.set_y2(weeklyl_line, weeklyl_open)

        label.set_x(weeklyl_label, weeklyl_limit_right)

        label.set_y(weeklyl_label, weeklyl_open)

        label.set_text(weeklyl_label, pwltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, weeklyl_open, weeklyl_label, WeeklyColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////// Weekly MID

    if is_weekly_mid

        weeklym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        weeklym_time = weeklyh_time

        weeklym_open = (weeklyl_open + weeklyh_open) / 2

        if displayStyle == 'Right Anchored'

            weeklym_time := get_limit_right(radistance)

            weeklym_time

        var weeklym_line = line.new(x1=weeklym_time, x2=weeklym_limit_right, y1=weeklym_open, y2=weeklym_open, color=WeeklyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var weeklym_label = label.new(x=weeklym_limit_right, y=weeklym_open, text=pwmtext, style=DEFAULT_LABEL_STYLE, textcolor=WeeklyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(weeklym_line, weeklym_time)

        line.set_x2(weeklym_line, weeklym_limit_right)

        line.set_y1(weeklym_line, weeklym_open)

        line.set_y2(weeklym_line, weeklym_open)

        label.set_x(weeklym_label, weeklym_limit_right)

        label.set_y(weeklym_label, weeklym_open)

        label.set_text(weeklym_label, pwmtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, weeklym_open, weeklym_label, WeeklyColor)

////////////////////////////////////////////////////////////////////////////////// YEEEAARRLLYY LOW LOW LOW

    if is_yearlyrange_enabled

        yearlyl_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            yearlyl_time := get_limit_right(radistance)

            yearlyl_time

        var yearlyl_line = line.new(x1=yearlyl_time, x2=yearlyl_limit_right, y1=yearlyl_open, y2=yearlyl_open, color=YearlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var yearlyl_label = label.new(x=yearlyl_limit_right, y=yearlyl_open, text=cyltext, style=DEFAULT_LABEL_STYLE, textcolor=YearlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(yearlyl_line, yearlyl_time)

        line.set_x2(yearlyl_line, yearlyl_limit_right)

        line.set_y1(yearlyl_line, yearlyl_open)

        line.set_y2(yearlyl_line, yearlyl_open)

        label.set_x(yearlyl_label, yearlyl_limit_right)

        label.set_y(yearlyl_label, yearlyl_open)

        label.set_text(yearlyl_label, cyltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, yearlyl_open, yearlyl_label, YearlyColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// YEEEAARRLLYY HIGH HIGH HIGH

    if is_yearlyrange_enabled

        yearlyh_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            yearlyh_time := get_limit_right(radistance)

            yearlyh_time

        var yearlyh_line = line.new(x1=yearlyh_time, x2=yearlyh_limit_right, y1=yearlyh_open, y2=yearlyh_open, color=YearlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var yearlyh_label = label.new(x=yearlyh_limit_right, y=yearlyh_open, text=cyhtext, style=DEFAULT_LABEL_STYLE, textcolor=YearlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(yearlyh_line, yearlyh_time)

        line.set_x2(yearlyh_line, yearlyh_limit_right)

        line.set_y1(yearlyh_line, yearlyh_open)

        line.set_y2(yearlyh_line, yearlyh_open)

        label.set_x(yearlyh_label, yearlyh_limit_right)

        label.set_y(yearlyh_label, yearlyh_open)

        label.set_text(yearlyh_label, cyhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, yearlyh_open, yearlyh_label, YearlyColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// YEEEAARRLLYY OPEN

    if is_yearly_enabled

        yearly_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            yearly_time := get_limit_right(radistance)

            yearly_time

        var yearly_line = line.new(x1=yearly_time, x2=yearly_limit_right, y1=yearly_open, y2=yearly_open, color=YearlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var yearly_label = label.new(x=yearly_limit_right, y=yearly_open, text=yotext, style=DEFAULT_LABEL_STYLE, textcolor=YearlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(yearly_line, yearly_time)

        line.set_x2(yearly_line, yearly_limit_right)

        line.set_y1(yearly_line, yearly_open)

        line.set_y2(yearly_line, yearly_open)

        label.set_x(yearly_label, yearly_limit_right)

        label.set_y(yearly_label, yearly_open)

        label.set_text(yearly_label, yotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, yearly_open, yearly_label, YearlyColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////// yearly MID

    if is_yearly_mid

        yearlym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        yearlym_time = yearlyh_time

        yearlym_open = (yearlyl_open + yearlyh_open) / 2

        if displayStyle == 'Right Anchored'

            yearlym_time := get_limit_right(radistance)

            yearlym_time

        var yearlym_line = line.new(x1=yearlym_time, x2=yearlym_limit_right, y1=yearlym_open, y2=yearlym_open, color=YearlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var yearlym_label = label.new(x=yearlym_limit_right, y=yearlym_open, text=cymtext, style=DEFAULT_LABEL_STYLE, textcolor=YearlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(yearlym_line, yearlym_time)

        line.set_x2(yearlym_line, yearlym_limit_right)

        line.set_y1(yearlym_line, yearlym_open)

        line.set_y2(yearlym_line, yearlym_open)

        label.set_x(yearlym_label, yearlym_limit_right)

        label.set_y(yearlym_label, yearlym_open)

        label.set_text(yearlym_label, cymtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, yearlym_open, yearlym_label, YearlyColor)

////////////////////////////////////////////////////////////////////////////////// QUATERLLYYYYY OPEN

    if is_quarterly_enabled

        quarterly_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            quarterly_time := get_limit_right(radistance)

            quarterly_time

        var quarterly_line = line.new(x1=quarterly_time, x2=quarterly_limit_right, y1=quarterly_open, y2=quarterly_open, color=quarterlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var quarterly_label = label.new(x=quarterly_limit_right, y=quarterly_open, text=qotext, style=DEFAULT_LABEL_STYLE, textcolor=quarterlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(quarterly_line, quarterly_time)

        line.set_x2(quarterly_line, quarterly_limit_right)

        line.set_y1(quarterly_line, quarterly_open)

        line.set_y2(quarterly_line, quarterly_open)

        label.set_x(quarterly_label, quarterly_limit_right)

        label.set_y(quarterly_label, quarterly_open)

        label.set_text(quarterly_label, qotext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, quarterly_open, quarterly_label, quarterlyColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// QUATERLLYYYYY High

    if is_quarterlyrange_enabled

        quarterlyh_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            quarterlyh_time := get_limit_right(radistance)

            quarterlyh_time

        var quarterlyh_line = line.new(x1=quarterlyh_time, x2=quarterlyh_limit_right, y1=quarterlyh_open, y2=quarterlyh_open, color=quarterlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var quarterlyh_label = label.new(x=quarterlyh_limit_right, y=quarterlyh_open, text=pqhtext, style=DEFAULT_LABEL_STYLE, textcolor=quarterlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(quarterlyh_line, quarterlyh_time)

        line.set_x2(quarterlyh_line, quarterlyh_limit_right)

        line.set_y1(quarterlyh_line, quarterlyh_open)

        line.set_y2(quarterlyh_line, quarterlyh_open)

        label.set_x(quarterlyh_label, quarterlyh_limit_right)

        label.set_y(quarterlyh_label, quarterlyh_open)

        label.set_text(quarterlyh_label, pqhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, quarterlyh_open, quarterlyh_label, quarterlyColor)

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// QUATERLLYYYYY Low

    if is_quarterlyrange_enabled

        quarterlyl_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            quarterlyl_time := get_limit_right(radistance)

            quarterlyl_time

        var quarterlyl_line = line.new(x1=quarterlyl_time, x2=quarterlyl_limit_right, y1=quarterlyl_open, y2=quarterlyl_open, color=quarterlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var quarterlyl_label = label.new(x=quarterlyl_limit_right, y=quarterlyl_open, text=pqltext, style=DEFAULT_LABEL_STYLE, textcolor=quarterlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(quarterlyl_line, quarterlyl_time)

        line.set_x2(quarterlyl_line, quarterlyl_limit_right)

        line.set_y1(quarterlyl_line, quarterlyl_open)

        line.set_y2(quarterlyl_line, quarterlyl_open)

        label.set_x(quarterlyl_label, quarterlyl_limit_right)

        label.set_y(quarterlyl_label, quarterlyl_open)

        label.set_text(quarterlyl_label, pqltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, quarterlyl_open, quarterlyl_label, quarterlyColor)

//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////// QUATERLLYYYYY MID

    if is_quarterly_mid

        quarterlym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        quarterlym_time = quarterlyh_time

        quarterlym_open = (quarterlyl_open + quarterlyh_open) / 2

        if displayStyle == 'Right Anchored'

            quarterlym_time := get_limit_right(radistance)

            quarterlym_time

        var quarterlym_line = line.new(x1=quarterlym_time, x2=quarterlym_limit_right, y1=quarterlym_open, y2=quarterlym_open, color=quarterlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var quarterlym_label = label.new(x=quarterlym_limit_right, y=quarterlym_open, text=pqmtext, style=DEFAULT_LABEL_STYLE, textcolor=quarterlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(quarterlym_line, quarterlym_time)

        line.set_x2(quarterlym_line, quarterlym_limit_right)

        line.set_y1(quarterlym_line, quarterlym_open)

        line.set_y2(quarterlym_line, quarterlym_open)

        label.set_x(quarterlym_label, quarterlym_limit_right)

        label.set_y(quarterlym_label, quarterlym_open)

        label.set_text(quarterlym_label, pqmtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, quarterlym_open, quarterlym_label, quarterlyColor)

////////////////////////////////////////////////////////////////////////////////// Monthly LOW LOW LOW

    if is_monthlyrange_enabled

        monthlyl_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            monthlyl_time := get_limit_right(radistance)

            monthlyl_time

        var monthlyl_line = line.new(x1=monthlyl_time, x2=monthlyl_limit_right, y1=monthlyl_open, y2=monthlyl_open, color=MonthlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monthlyl_label = label.new(x=monthlyl_limit_right, y=monthlyl_open, text=pmltext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monthlyl_line, monthlyl_time)

        line.set_x2(monthlyl_line, monthlyl_limit_right)

        line.set_y1(monthlyl_line, monthlyl_open)

        line.set_y2(monthlyl_line, monthlyl_open)

        label.set_x(monthlyl_label, monthlyl_limit_right)

        label.set_y(monthlyl_label, monthlyl_open)

        label.set_text(monthlyl_label, pmltext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monthlyl_open, monthlyl_label, MonthlyColor)

        // the weekly open can be the daily open too (monday)

        // only the weekly will be draw, in these case we update its label

//////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////// MONTHLY HIGH HIGH HIGH

    if is_monthlyrange_enabled

        monthlyh_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            monthlyh_time := get_limit_right(radistance)

            monthlyh_time

        var monthlyh_line = line.new(x1=monthlyh_time, x2=monthlyh_limit_right, y1=monthlyh_open, y2=monthlyh_open, color=MonthlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monthlyh_label = label.new(x=monthlyh_limit_right, y=monthlyh_open, text=pmhtext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monthlyh_line, monthlyl_time)

        line.set_x2(monthlyh_line, monthlyh_limit_right)

        line.set_y1(monthlyh_line, monthlyh_open)

        line.set_y2(monthlyh_line, monthlyh_open)

        label.set_x(monthlyh_label, monthlyh_limit_right)

        label.set_y(monthlyh_label, monthlyh_open)

        label.set_text(monthlyh_label, pmhtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monthlyh_open, monthlyh_label, MonthlyColor)

        // the weekly open can be the daily open too (monday)

        // only the weekly will be draw, in these case we update its label

//////////////////////////////////////////////////////////////////////////////// MONTHLY MID

    if is_monthly_mid

        monthlym_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        monthlym_time = monthlyh_time

        monthlym_open = (monthlyl_open + monthlyh_open) / 2

        if displayStyle == 'Right Anchored'

            monthlym_time := get_limit_right(radistance)

            monthlym_time

        var monthlym_line = line.new(x1=monthlym_time, x2=monthlym_limit_right, y1=monthlym_open, y2=monthlym_open, color=MonthlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monthlym_label = label.new(x=monthlym_limit_right, y=monthlym_open, text=pmmtext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monthlym_line, monthlym_time)

        line.set_x2(monthlym_line, monthlym_limit_right)

        line.set_y1(monthlym_line, monthlym_open)

        line.set_y2(monthlym_line, monthlym_open)

        label.set_x(monthlym_label, monthlym_limit_right)

        label.set_y(monthlym_label, monthlym_open)

        label.set_text(monthlym_label, pmmtext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monthlym_open, monthlym_label, MonthlyColor)

//////////////////////////////////////////////////////////////////////////////////

    if is_monthly_enabled

        monthly_limit_right = get_limit_right(DEFAULT_EXTEND_RIGHT)

        if displayStyle == 'Right Anchored'

            monthly_time := get_limit_right(radistance)

            monthly_time

        var monthlyLine = line.new(x1=monthly_time, x2=monthly_limit_right, y1=monthly_open, y2=monthly_open, color=MonthlyColor, width=DEFAULT_LINE_WIDTH, xloc=xloc.bar_time, style=linestyles)

        var monthlyLabel = label.new(x=monthly_limit_right, y=monthly_open, text=motext, style=DEFAULT_LABEL_STYLE, textcolor=MonthlyColor, size=DEFAULT_LABEL_SIZE, xloc=xloc.bar_time)

        line.set_x1(monthlyLine, monthly_time)

        line.set_x2(monthlyLine, monthly_limit_right)

        line.set_y1(monthlyLine, monthly_open)

        line.set_y2(monthlyLine, monthly_open)

        label.set_x(monthlyLabel, monthly_limit_right)

        label.set_y(monthlyLabel, monthly_open)

        label.set_text(monthlyLabel, motext)

        if mergebool

            f_LevelMerge(pricearray, labelarray, monthly_open, monthlyLabel, MonthlyColor)

/////////////////////////////////////////////////////////////////////////////

        // the monthly open can be the weekly open (monday 1st) and/or daily open too

        // only the monthly will be draw, in these case we update its label

        // if is_monthly_open

        //     if can_show_daily

        //         label.set_text(monthlyLabel, "DO / MO            ")

        //     if is_weekly_open

        //         if can_show_weekly

        //             label.set_text(monthlyLabel, "WO / MO            ")

        //         if can_show_daily and can_show_weekly

        //             label.set_text(monthlyLabel, "DO / WO / MO                ")

        // the start of the line is drew from the first week of the month

        // if the first day of the weekly candle (monday) is the 2nd of the month

        // we fix the start of the line position on the Prev weekly candle

        if timeframe.isweekly and dayofweek(monthly_time) != dayofweek.monday

            line.set_x1(monthlyLine, monthly_time - (weekly_time - weekly_time[1]))

Overview

Levels include period opens, previous highs, lows and midpoints for day, week, month and quarter, a Monday range, and daily, weekly and monthly anchored VWAP curves with optional fixed previous-week and previous-month VWAP lines. Toggles control each level, with options for merging nearby levels, label size, line style and distance. Higher-timeframe data is requested with lookahead on, and the Monday and developing ranges depend on loaded history.

Details

Published by

RealTrueReality on GitHub

Draws

On the price chart

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

  • Reads higher-timeframe data with lookahead on, so the history can show signals that were not there in real time

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Display StylestringStandarddisplayStyle
Merge Levels?booltruemergebool
Distanceint30distanceright
Anchor Distanceint250radistance
Text SizestringMediumlabelsize
Line WidthstringSmalllinesize
Line StylestringSolidlinestyle
Global Text ShortHandboolfalseGlobalTextType
Global Coloringboolfalseglobalcoloring
GlobalColorcolorcolor.whiteGlobalColor
Openboolfalseis_intra_enabled
Prev H/Lboolfalseis_intrarange_enabled
Show all 40 settings
SettingTypeDefaultVariable
Prev Midboolfalseis_intram_enabled
ShortHandboolfalseIntraTextType
Openbooltrueis_daily_enabled
Prev H/Lboolfalseis_dailyrange_enabled
Prev Midboolfalseis_dailym_enabled
ShortHandboolfalseDailyTextType
Rangebooltrueis_monday_enabled
Midbooltrueis_monday_mid
ShortHandboolfalseMondayTextType
Openbooltrueis_weekly_enabled
Prev H/Lbooltrueis_weeklyrange_enabled
Prev Midbooltrueis_weekly_mid
ShortHandboolfalseWeeklyTextType
Openbooltrueis_monthly_enabled
Prev H/Lbooltrueis_monthlyrange_enabled
Prev Midbooltrueis_monthly_mid
ShortHandboolfalseMonthlyTextType
Openbooltrueis_quarterly_enabled
Prev H/Lboolfalseis_quarterlyrange_enabled
Prev Midbooltrueis_quarterly_mid
ShortHandboolfalseQuarterlyTextType
Openbooltrueis_yearly_enabled
Current H/Lboolfalseis_yearlyrange_enabled
Midbooltrueis_yearly_mid
ShortHandboolfalseYearlyTextType
London Rangeboolfalseis_londonrange_enabled
New York Rangeboolfalseis_usrange_enabled
Asia Rangeboolfalseis_asiarange_enabled
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

VP

by dearvn
257 stars

This indicator calculates and plots a session-based volume profile directly on the price chart. It maps volume distribution across price levels, highlighting key structural reference points including the Point of Control, Value Area High, and Value Area Low. C

Indicator v5 VolumeSupport & resistance
Updated 6 weeks ago · None stated GitHub repository of VP

Midnight VWAP

by TradersPost
228 stars

The Midnight VWAP indicator calculates and overlays two distinct Volume Weighted Average Price (VWAP) lines on the price chart based on customizable session timeframes. It tracks an overnight or pre-market session alongside regular trading hours, resetting cal

Indicator v6 Moving averagesSessions & time
Updated 3 months ago · None stated GitHub repository of Midnight VWAP

Moon Dev GEX Arrows

by moondevonyt
92 stars

This overlay indicator plots option strike walls and an optional session VWAP on the price chart for SPY or ES. It spaces major strikes by the selected instrument, draws a set number of strikes on each side, and marks wall-trap and sweep events after a cooldow

Indicator v5 Support & resistanceSessions & time
Updated 2 months ago · Custom licence GitHub repository of Moon Dev GEX Arrows

This overlay indicator draws a volume profile for a chosen trading session directly on the price chart. It plots the point of control, value area high and low, an optional value area box, a live zone, and a session box with labels. Users select Tokyo, London,

Indicator v5 Sessions & timeVolume
Updated 7 weeks ago · None stated GitHub repository of Sessions & VP with prev session VP & daily/weekly opens

LoD Intraday Entry

by ChartsLector
41 stars

This overlay indicator marks the current day's low and a suggested entry zone a fraction of daily ATR below that low. It compares daily volume with a volume moving average, plots daily SMA and EMA distance, and draws an optional ATR-width price cloud. Labels c

Indicator v6 Support & resistanceVolatility & bands
Updated 3 days ago · None stated GitHub repository of LoD Intraday Entry

RS: Market Profile

by agejevasv
12 stars

This indicator plots a Market Profile on the price chart using time-price opportunity letters or symbols. It marks the point of control, a configurable value area, and the initial balance, and it can highlight a volume-profile point of control and session VWAP

Indicator v5 VolumeSupport & resistance
Updated 2 years ago · None stated GitHub repository of RS: Market Profile

More Support & resistance scripts

Related on ForexR

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers