Description
Triggers signal long/signal short on cross of the bands lines
HaasScript
DefineCommand("VWAP_DEVBANDS", "VWAP Stdev Bands")
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 chartindex = 0
local fullcdl = true
local hlc = false
local close = ClosePrices(interval, fullcdl, market, hlc)
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 hl2 = HLPrices(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', hl2*volume)
local volumesum = Load('volumesum', volume)
local v2sum = Load('v2sum', volume*hl2*hl2)
vwapsum = newSession and hl2*volume or vwapsum+hl2*volume
volumesum = newSession and volume or volumesum+volume
v2sum = newSession and volume*hl2*hl2 or v2sum+volume*hl2*hl2
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=White})
local U1=Plot(chartindex, "VWAP Upper", U1Line, {c=Gray})
local D1=Plot(chartindex, "VWAP Lower", D1Line, {c=Gray})
local U2=Plot(chartindex, "VWAP Upper (2)", U2Line, {c=Red})
local D2=Plot(chartindex, "VWAP Lower (2)", D2Line, {c=Green})
local U3=Plot(chartindex, "VWAP Upper (3)", U3Line, {c=Red})
local D3=Plot(chartindex, "VWAP Lower (3)", D3Line, {c=Green})
local U4=Plot(chartindex, "VWAP Upper (4)", U4Line, {c=Red})
local D4=Plot(chartindex, "VWAP Lower (4)", D4Line, {c=Green})
local U5=Plot(chartindex, "VWAP Upper (5)", U5Line, {c=Red})
local D5=Plot(chartindex, "VWAP Lower (5)", D5Line, {c=Green})
PlotCircle(A, White(50))
PlotCircle(U1, Gray(50))
PlotCircle(D1, Gray(50))
PlotBands(U1, U2, Maroon(10))
PlotBands(D1, D2, DarkGreen(10))
PlotBands(U2, U3, Maroon(10))
PlotBands(D2, D3, DarkGreen(10))
PlotBands(U3, U4, Maroon(10))
PlotBands(D3, D4, DarkGreen(10))
PlotBands(U4, U5, Maroon(10))
PlotBands(D4, D5, DarkGreen(10))
PlotBands(A, U1, Gray(10))
PlotBands(A, D1, Gray(10))
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!