VWAP Stdev Bands Kobalt mod.

stable
By Kobalt in Trend Published September 2022 👁 1,086 views 💬 0 comments

Description

https://www.haasscripts.com/t/vwap-deviation-bands/ original by Strooth, added , removed some stuff
HaasScript
-- Author: Kobalt_#7977_BTC_bc1qz6gw8hje2scfq4wfmgtlfe9h4tgm7u8qzwev29

DefineCommand("VWAP_DEVBANDS", "VWAP Stdev Bands, original by Strooth, added some stuff")
local chartindex = DefineParameter(NumberType, 'chartindex', 'index for plot', false, 0, 'Input/Number')
local interval = DefineParameter(NumberType, 'Interval', 'The time series interval', false, CurrentInterval(), 'InputInterval/CurrentInterval')
local vwapint = DefineParameter(NumberType, 'VWAPInterval', 'The time series interval for vwap reset', false, 1440, 'InputInterval/CurrentInterval')
local market = DefineParameter(DynamicType, 'Market', 'The market to calculate on', false, PriceMarket(), 'Input/PriceMarket()')
local plot = DefineParameter(BooleanType, 'Plot', 'Enable plotting the chart', false, true, 'true/false')
local source = DefineParameter(EnumType, 'sourcePrice', '', false, HLPriceSource, 'PriceSourceEnum/InputSourcePrice')
local fullcdl = DefineParameter(BooleanType, 'fullCandles', 'fullCandles on priceSource. If true, the last closed candles will be returned.', false, true, 'true/false')
local hlc = DefineParameter(BooleanType, 'hlcStyle', 'When enabled, the data returned will be adjusted for HLC instead of OHLC. Meaning that the OHL data can change. ', false, false, 'true/false')
InputGroupHeader('VWAP Stdev Bands')
--local Prices
local devUp1 = Input("Stdev above (1)", 1.28)
local devDn1 = Input("Stdev below (1)", 1.28)
 
local devUp2 = Input("Stdev above (2)", 2.01)
local devDn2 = Input("Stdev below (2)", 2.01)
 
local devUp3 = Input("Stdev above (3)", 2.51)
local devDn3 = Input("Stdev below (3)", 2.51)
 
local devUp4 = Input("Stdev above (4)", 3.09)
local devDn4 = Input("Stdev below (4)", 3.09)
 
local devUp5 = Input("Stdev above (5)", 4.01)
local devDn5 = Input("Stdev below (5)", 4.01)

local source = InputSourcePrice('sourcePrice', HLPriceSource, '', '')
local hlc = Input("hlcStyle", false, 'When enabled, the data returned will be adjusted for HLC instead of OHLC. Meaning that the OHL data can change.')
local price = SourcePrices(source, interval, fullcdl, market, hlc)
local volume = GetVolume(interval, fullcdl, market, hlc)
 
local trigger = Load('trigger', true)
local newSession = trigger == OptimizedForInterval(vwapint, function()
  local trigger = Load('trigger', true)
  Save('trigger', not trigger)
  return trigger
end)
 
local vwapsum = Load('vwapsum', price*volume)
local volumesum = Load('volumesum', volume)
local v2sum = Load('v2sum', volume*price*price)
 
vwapsum = newSession and price*volume or vwapsum+price*volume
volumesum = newSession and volume or volumesum+volume
v2sum = newSession and volume*price*price or v2sum+volume*price*price
 
local vwap = vwapsum/volumesum
local dev = Sqrt(Max(v2sum/volumesum - vwap*vwap, 0))
 
 
local U1Line= vwap + devUp1 * dev
local D1Line= vwap - devDn1 * dev
local U2Line= vwap + devUp2 * dev
local D2Line= vwap - devDn2 * dev
local U3Line= vwap + devUp3 * dev
local D3Line= vwap - devDn3 * dev
local U4Line= vwap + devUp4 * dev
local D4Line= vwap - devDn4 * dev
local U5Line= vwap + devUp5 * dev
local D5Line= vwap - devDn5 * dev
 
if plot == true then 
    local A=Plot(chartindex, "VWAP", vwap, {c=Teal})
    local U1=Plot(chartindex, "VWAP Upper", U1Line, {c=Teal(40)})
    local D1=Plot(chartindex, "VWAP Lower", D1Line, {c=Teal(40)})
    local U2=Plot(chartindex, "VWAP Upper (2)", U2Line, {c=Teal(40)})
    local D2=Plot(chartindex, "VWAP Lower (2)", D2Line, {c=Teal(40)})
    local U3=Plot(chartindex, "VWAP Upper (3)", U3Line, {c=Teal(50)})
    local D3=Plot(chartindex, "VWAP Lower (3)", D3Line, {c=Teal(50)})
    local U4=Plot(chartindex, "VWAP Upper (4)", U4Line, {c=Teal(60)})
    local D4=Plot(chartindex, "VWAP Lower (4)", D4Line, {c=Teal(60)})
    local U5=Plot(chartindex, "VWAP Upper (5)", U5Line, {c=Teal(70)})
    local D5=Plot(chartindex, "VWAP Lower (5)", D5Line, {c=Teal(70)})

    ChartSetOptions(chartindex,'VWAP Stdev Bands')
   -- PlotCircle(A, Teal(50))
    --PlotCircle(U1, Teal(10))
    --PlotCircle(D1, Teal(10))
    --PlotCircle(U1, Teal(50))
    --PlotCircle(D1, Teal(50))
    PlotBands(U1, U2, Maroon(10))
    PlotBands(D1, D2, DarkGreen(10))
    PlotBands(U2, U3, Maroon(9))
    PlotBands(D2, D3, DarkGreen(9))
    PlotBands(U3, U4, Maroon(6))
    PlotBands(D3, D4, DarkGreen(6))
    PlotBands(U4, U5, Maroon(5))
    PlotBands(D4, D5, DarkGreen(5))
    PlotBands(U1, A, Maroon(5))
    PlotBands(A, D1, DarkGreen(5))
end 
Save('vwapsum', vwapsum)
Save('volumesum', volumesum)
Save('v2sum', v2sum)
 
local signal = SignalNone
 
local cp = CurrentPrice()
 
if ArrayContains({UseSignalIf(GetCrossOverUnderSignal(cp.bid, U5Line), SignalShort),
UseSignalIf(GetCrossOverUnderSignal(cp.bid, U4Line), SignalShort),
UseSignalIf(GetCrossOverUnderSignal(cp.bid, U3Line), SignalShort),
UseSignalIf(GetCrossOverUnderSignal(cp.bid, U2Line), SignalShort),
UseSignalIf(GetCrossOverUnderSignal(cp.bid, U1Line), SignalShort)}, SignalShort) then 
signal = SignalShort 
end
if ArrayContains({UseSignalIf(GetCrossOverUnderSignal(cp.ask, D1Line), SignalLong),
UseSignalIf(GetCrossOverUnderSignal(cp.ask, D2Line), SignalLong),
UseSignalIf(GetCrossOverUnderSignal(cp.ask, D3Line), SignalLong),
UseSignalIf(GetCrossOverUnderSignal(cp.ask, D4Line), SignalLong),
UseSignalIf(GetCrossOverUnderSignal(cp.ask, D5Line), SignalLong)}, SignalLong) then
signal = SignalLong
end
 
DefineOutput(DynamicType, signal, 'The signal')

0 Comments

Sign in to leave a comment.

No comments yet. Be the first!