VWAP Trend

stable
By Strooth in Momentum Published July 2022 👁 1,202 views 💬 0 comments

Description

Here is a VWAP mod more suited to trend following. Requires CC_RMA https://www.haasscripts.com/t/rma-mod/
HaasScript
DefineCommand("VWAP_", "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, 10080, '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 smooth = 2 
local stDevMultiplier = 1
local close = HeikenClosePrices(1, fullcdl, market, hlc)

local hl2 = OHLCPrices(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*Pow(hl2, 2) or volume*Pow(hl2, 2)+v2sum

local vwap = vwapsum/volumesum
local variance = v2sum / volumesum - Pow(vwap, 2)
local variance = variance < 0 and 0 or variance
local stDev = Sqrt(variance)
local lowerBand = vwap - stDev * stDevMultiplier
local upperBand = vwap + stDev * stDevMultiplier


vwap = CC_RMA(vwap, smooth, {plot=false})
lowerBand = CC_RMA(lowerBand, smooth, {plot=false})
upperBand = CC_RMA(upperBand, smooth, {plot=false})

if plot == true then 
    local A,B,C
    if vwap > 0 then 
        A=Plot(chartindex, "VWAP", vwap, {c=White})
        B=Plot(chartindex, "VWAP-Upper", upperBand, {c=Red})
        C=Plot(chartindex, "VWAP-Lower", lowerBand, {c=Teal})
    end
    PlotCircle(A, White(50))
    PlotCircle(B, Red(50))
    PlotCircle(C, Teal(50))
end 
Save('vwapsum', vwapsum)
Save('volumesum', volumesum)
Save('v2sum', v2sum)

local cp = CurrentPrice()

local signal = IndicatorContainer(GetAboveBelowSignal(close, lowerBand), GetAboveBelowSignal(close, upperBand))
signal = IfElseIf(signal[1]!=SignalNone, signal[2]!=SignalNone, signal[1], signal[2], SignalNone)
PlotSignalEnum(-2, signal)

DefineOutput(DynamicType, signal, 'The signal')

0 Comments

Sign in to leave a comment.

No comments yet. Be the first!