function Init() indicator:name("Acceleration/Deceleration"); indicator:description("No description"); indicator:requiredSource(core.Bar); indicator:type(core.Oscillator); indicator.parameters:addInteger("FM", "Fast Moving Average for Awesome oscillator", "The number of periods to calculate the fast moving average of the median price", 5, 2, 10000); indicator.parameters:addInteger("SM", "Slow Moving Average for Awesome oscillator", "The number of periods to calculate the slow moving average of the median price", 35, 2, 10000); indicator.parameters:addInteger("M", "Moving Average for Acceleration/Deceleration", "The number of periods to calculate the moving average of the AO", 5, 2, 10000); indicator.parameters:addColor("CL_color", "Color for covering line", "Color for covering line", core.rgb(255, 255, 255)); indicator.parameters:addColor("GO_color", "Color for higher bars", "Color for higher bars", core.rgb(0, 255, 0)); indicator.parameters:addColor("RO_color", "Color for lower bars", "Color for lower bars", core.rgb(255, 0, 0)); end local FM; local SM; local M; local first; local source = nil; -- Streams block local CL = nil; local GO = nil; local RO = nil; local AO = nil; local MVA = nil; function Prepare() FM = instance.parameters.FM; SM = instance.parameters.SM; M = instance.parameters.M; source = instance.source; AO = core.indicators:create("AO", source, FM, SM); MVA = core.indicators:create("MVA", AO.DATA, M); first = MVA.DATA:first(); local name = profile:id() .. "(" .. source:name() .. ", " .. FM .. ", " .. SM .. ", " .. M .. ")"; instance:name(name); CL = instance:addStream("AC", core.Line, name .. ".AC", "AC", instance.parameters.CL_color, first); CL:addLevel(0); GO = instance:addStream("GO", core.Bar, name .. ".GO", "GO", instance.parameters.GO_color, first); RO = instance:addStream("RO", core.Bar, name .. ".RO", "RO", instance.parameters.RO_color, first); end function Update(period, mode) AO:update(mode); MVA:update(mode); if (period >= first) then CL[period] = AO.DATA[period] - MVA.DATA[period]; end if (period >= first + 1) then if (CL[period] > CL[period - 1]) then GO[period] = CL[period]; else RO[period] = CL[period]; end end end