function Init() { indicator.name("ADX ROC Oscillator"); indicator.description(""); indicator.requiredSource(core.Bar); indicator.type(core.Oscillator); indicator.parameters.addGroup("ADX Parameters"); indicator.parameters.addInteger("PERIOD", "Period", "", 14, 2, 2000); indicator.parameters.addDouble("FastLevel", "FastLevel", "", 3, 0, 2000); indicator.parameters.addDouble("SlowLevel", "SlowLevel", "", 1.5, 0, 2000); indicator.parameters.addGroup("Smoothing Parameters"); indicator.parameters.addInteger("SP", "ROC Period", "", 1, 1, 2000); indicator.parameters.addGroup("ADX Style"); indicator.parameters.addColor("Fast", "Fast ROC Color", "", core.rgb(0, 255, 0)); indicator.parameters.addColor("Moderate", "Moderate ROC Color", "", core.rgb(0, 0, 255)); indicator.parameters.addColor("Slow", "Slow ROC Color", "", core.rgb(255, 0, 0)); } var PERIOD; var Fast, Moderate, Slow; var FastLevel, SlowLevel; var Mode; var SP; var Smoothing; var first; var source = null; var HZU = null; var HZL = null; var open=null; var indicator; function Prepare() { SP= instance.parameters.SP; PERIOD= instance.parameters.PERIOD; Fast= instance.parameters.Fast; Moderate= instance.parameters.Moderate; Slow= instance.parameters.Slow; FastLevel= instance.parameters.FastLevel; SlowLevel= instance.parameters.SlowLevel; source = instance.source; indicator = core.indicators.create("ADX", source,PERIOD); var name = profile.id() + "(" + source.name() + ", " + PERIOD + ", " + FastLevel + ", " + SlowLevel + ")"; instance.name(name); first = Math.max( indicator.DATA.first() )+SP+1; open = instance.addStream("open", core.Bar, name, "open", core.rgb(0, 0, 0), first) } function Update(period, mode) { open[period]=1; if (period < first || !source.hasData(period)) { open.setColor(period, core.rgb(128, 128, 128)); return; } indicator.update(mode); if (!indicator.DATA.hasData(period) || !indicator.DATA.hasData(period-SP)) { open.setColor(period, core.rgb(128, 128, 128)); return; } if (Math.abs(indicator.DATA[period] - indicator.DATA[period-SP]) >= FastLevel) { open.setColor(period, Fast); } else if (Math.abs(indicator.DATA[period] - indicator.DATA[period-SP]) <= SlowLevel) { open.setColor(period, Slow); } else { open.setColor(period, Moderate); } }