VWMA Reversion Bands

stable
By ajd1107 in Sideways Published September 2022 👁 1,302 views 💬 0 comments

Description

Optimized Reversion Bands based on VWMA. Will signal long/short when bid/ask breaches first level of bands. These are excellent in Ranging markets, but can be dangerous at the onset of a strong trend. Bands filter VWMA values through a STDDEV() indicator to dampen out extremes. Requires Pshai's VWMA v2 Indicator: https://www.haasscripts.com/t/pshaicmd-vwma-v2-optimized/
HaasScript
-- Author: Fogg
-- VWMA Reversion Bands
-- Great in Ranging Markets, Beware of strong trends!

DefineCommand('VWMA_Bands', 'VWMA Reversion Bands')

local int = DefineParameter(NumberType, 'interval', '', false, CurrentInterval(), 'Number, InputInterval')
local length = DefineParameter(NumberType, 'VWMA Length', 'VWMA Period Length', true, 50, 'VMWA Period Length')
local multiplier = DefineParameter(NumberType, 'Deviation Multiplier', 'Deviation Multiplier', true, 2.618, 'Deviation from VWMA for first band')


--
local vol = GetVolume(int)
local p = ClosePrices(int, true)
local outer = multiplier + 1
local outer1 = multiplier + 2
local outer2 = multiplier + 3
local extreme = multiplier + 4

local upperband, lowerband = OptimizedForInterval(
    int, function()
        local vwma = CC_VWMA_v2(p, vol, length)
        local av = (p - vwma)/vwma 
        local dev = STDDEV(av, length, 1) * vwma
        local devup = vwma + av + dev * multiplier
        local devdn = vwma + av - dev * multiplier
        local devup2 = vwma + av + dev * outer 
        local devdn2 = vwma + av - dev * outer
        local devup3 = vwma + av + dev * outer1
        local devdn3 = vwma + av - dev * outer1
        local devup4 = vwma + av + dev * outer2
        local devdn4 = vwma + av - dev * outer2
        local devup5 = vwma + av + dev * extreme
        local devdn5 = vwma + av - dev * extreme

        Plot(0, 'vwma', vwma, Cyan)
        local U1 = Plot(0, 'devup', devup, Maroon(0))
        local D1 = Plot(0, 'devdn', devdn, Teal(0))
        local U2 = Plot(0, 'devup2', devup2, Maroon(0))
        local D2 = Plot(0, 'devdn2', devdn2, Teal(0))
        local U3 = Plot(0, 'devup3', devup3, Maroon(0))
        local D3 = Plot(0, 'devdn3', devdn3, Teal(0))
        local U4 = Plot(0, 'devup4', devup4, Maroon(0))
        local D4 = Plot(0, 'devdn4', devdn4, Teal(0))
        local U5 = Plot(0, 'devup5', devup5, Maroon(10))
        local D5 = Plot(0, 'devdn5', devdn5, Teal(10))
        PlotBands(U1, U2, Maroon(50))
        PlotBands(D1, D2, Teal(50))
        PlotBands(U2, U3, Maroon(40))
        PlotBands(D2, D3, Teal(40))
        PlotBands(U3, U4, Maroon(30))
        PlotBands(D3, D4, Teal(30))
        PlotBands(U4, U5, Maroon(20))
        PlotBands(D4, D5, Teal(20))
    return devup, devdn
end)

local signal = SignalNone

local cp = CurrentPrice()

if cp.bid >= upperband then 
    signal = SignalShort 
end

if cp.ask <= lowerband then
    signal = SignalLong
end

PlotSignalEnum(-2, signal)

DefineOutput(EnumType, signal, 'The signal')

0 Comments

Sign in to leave a comment.

No comments yet. Be the first!