function Init() { indicator.name("Advanced Get Oscillator"); indicator.description("Advanced Get Oscillator"); indicator.requiredSource(core.Tick); indicator.type(core.Oscillator); indicator.parameters.addGroup("Calculation"); indicator.parameters.addInteger("FastPeriod", "Period of fast MVA", "", 5); indicator.parameters.addInteger("SlowPeriod", "Period of slow MVA", "", 34); indicator.parameters.addGroup("Style"); indicator.parameters.addColor("HistUPClr", "Histogram UP Color", "Histogram UP Color", core.rgb(0, 255, 0)); indicator.parameters.addColor("HistDNClr", "Histogram DN Color", "Histogram DN Color", core.rgb(255, 0, 0)); indicator.parameters.addColor("HistMDClr", "Histogram Middle Color", "Histogram Middle Color", core.rgb(255, 255, 0)); indicator.parameters.addColor("UpLineClr", "UP line Color", "UP line Color", core.rgb(255, 0, 0)); indicator.parameters.addColor("DnLineClr", "DN line Color", "DN line Color", core.rgb(0, 0, 255)); indicator.parameters.addInteger("widthLinReg", "Line width", "Line width", 1, 1, 5); indicator.parameters.addInteger("styleLinReg", "Line style", "Line style", core.LINE_SOLID); indicator.parameters.setFlag("styleLinReg", core.FLAG_LINE_STYLE); } var first; var source = null; var FastPeriod; var SlowPeriod; var FastMA; var SlowMA; var Hist=null; var UpLine=null; var DnLine=null; var Coeff; function Prepare() { source = instance.source; FastPeriod=instance.parameters.FastPeriod; SlowPeriod=instance.parameters.SlowPeriod; first = source.first()+2; FastMA = core.indicators.create("MVA", source, FastPeriod); SlowMA = core.indicators.create("MVA", source, SlowPeriod); var name = profile.id() + "(" + source.name() + ", " + instance.parameters.FastPeriod + ", " + instance.parameters.SlowPeriod + ")"; instance.name(name); Hist = instance.addStream("Hist", core.Bar, name + ".Histogram", "Histogram", instance.parameters.HistMDClr, first); UpLine = instance.addStream("UpLine", core.Line, name + ".UpLine", "UpLine", instance.parameters.UpLineClr, first); DnLine = instance.addStream("DnLine", core.Line, name + ".DnLine", "DnLine", instance.parameters.DnLineClr, first); UpLine.setWidth(instance.parameters.widthLinReg); UpLine.setStyle(instance.parameters.styleLinReg); DnLine.setWidth(instance.parameters.widthLinReg); DnLine.setStyle(instance.parameters.styleLinReg); Coeff=2/39; } function Update(period, mode) { if (period>first) { FastMA.update(mode); SlowMA.update(mode); Hist[period]=FastMA.DATA[period]-SlowMA.DATA[period]; if (Hist[period]>=0) { UpLine[period]=Hist[period]*Coeff+UpLine[period-1]*(1-Coeff); DnLine[period]=DnLine[period-1]; } else { UpLine[period]=UpLine[period-1]; DnLine[period]=Hist[period]*Coeff+DnLine[period-1]*(1-Coeff); } if (Hist[period]>UpLine[period]) { Hist.setColor(period, instance.parameters.HistUPClr); } else if (Hist[period]