-- Rainbow -- by Albert function Init() indicator:name("Rainbow"); indicator:requiredSource(core.Tick); indicator:type(core.Indicator); indicator.parameters:addGroup("Style "); indicator.parameters:addInteger("Width", "Line width", "", 1, 1, 5); indicator.parameters:addInteger("Style", "Line style", "", core.LINE_SOLID); indicator.parameters:setFlag("Style", core.FLAG_LINE_STYLE); end local source = nil; local WMAs = {}; -- an array of outputs local WMAperiods = {}; local WMACount = 0; function Prepare() source = instance.source; local name; name = profile:id() .. "(" .. source:name() .. ")"; instance:name(name); paramWidth = instance.parameters:getInteger("Width"); paramStyle = instance.parameters:getInteger("Style"); for i = 2,15,1 do CreateWMA(i, core.rgb(255,0,0), name, paramWidth,paramStyle); end for i = 17,41,2 do CreateWMA(i, core.rgb(255,255,0), name, paramWidth,paramStyle); end for i = 44,74,3 do CreateWMA(i, core.rgb(0,255,0), name, paramWidth,paramStyle); end for i = 78,122,4 do CreateWMA(i, core.rgb(0,191,255), name, paramWidth,paramStyle); end for i = 125,195,5 do CreateWMA(i, core.rgb(186,85,211), name, paramWidth,paramStyle); end CreateWMA(200, core.rgb(255,255,255), name, 3,core.LINE_SOLID); CreateWMA(1, core.rgb(255,255,255), name, 1,core.LINE_SOLID); end function CalcWMA(index, N, period) local first; first = source:first() + N - 1; if period < first then return ; end; WMAs[index][period] = mathex.lwma(source, period - (N-1), period); end function Update(period) for i=0, WMACount-1, 1 do CalcWMA(i, WMAperiods[i], period); end end function CreateWMA(N, color, name, width,style) local label; -- line label label = "W" .. N; -- create the line index = WMACount; WMAs[index] = instance:addStream(label, core.Line, name .. label, label, color, source:first() + N - 1); WMAs[index]:setWidth(width); WMAs[index]:setStyle(style); WMAperiods[index] = N; WMACount = WMACount +1; end