Volume Based Donchian
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// 
// This coded is based on Ichimoku indicator, the volume weighded donchian is selfmade production
// © pascorp

//@version=5
indicator(title='Volume Based Donchian', shorttitle='VBD', overlay=true)

// ——————————————————————————————————————————————————————————————
// >>>>>>>>>>>>>>>>>>>>>>>>>  Inputs  <<<<<<<<<<<<<<<<<<<<<<<<<<<
// ——————————————————————————————————————————————————————————————
dPeriod   = input.int(defval=30,  minval=1,     title='Donchian Periods')

// ——————————————————————————————————————————————————————————————
// >>>>>>>>>>>>>>>>>>>>>>>  Functions  <<<<<<<<<<<<<<<<<<<<<<<<<<
// ——————————————————————————————————————————————————————————————
    
donchianVW(len) =>
    num1 = math.sum(low*volume, len)
    den1 = math.sum(volume, len)
    lo = num1/den1
    num2 = math.sum(high*volume, len)
    den2 = math.sum(volume, len)
    hi = num2/den2
    math.avg(ta.lowest(lo,len), ta.highest(hi,len))
    
donchianVWv2(len) =>
    lo = ta.vwma(low, len)
    hi = ta.vwma(high, len)
    math.avg(ta.lowest(lo,len), ta.highest(hi,len))

// ——————————————————————————————————————————————————————————————
// >>>>>>>>>>>>>>>>>>>>>>>>>>  Core  <<<<<<<<<<<<<<<<<<<<<<<<<<<<
// ——————————————————————————————————————————————————————————————
d   = donchianVW(dPeriod)
d2  = donchianVWv2(dPeriod)

// ——————————————————————————————————————————————————————————————
// >>>>>>>>>>>>>>>>>>>>>>>>>>  Plots  <<<<<<<<<<<<<<<<<<<<<<<<<<<<
// ——————————————————————————————————————————————————————————————
plot(d, title="Volume Based Donchian")
plot(d2, title="Volume Based Donchian")
