function Init() { indicator.name("Drive"); indicator.description("Drive"); indicator.requiredSource(core.Bar); indicator.type(core.Oscillator); indicator.parameters.addGroup("Calculation"); indicator.parameters.addInteger("Period", "Period", "Period", 14); indicator.parameters.addString("Method", "MA Method", "Method" , "MVA"); indicator.parameters.addStringAlternative("Method", "MVA", "MVA" , "MVA"); indicator.parameters.addStringAlternative("Method", "EMA", "EMA" , "EMA"); indicator.parameters.addStringAlternative("Method", "LWMA", "LWMA" , "LWMA"); indicator.parameters.addStringAlternative("Method", "TMA", "TMA" , "TMA"); indicator.parameters.addStringAlternative("Method", "SMMA", "SMMA" , "SMMA"); indicator.parameters.addStringAlternative("Method", "KAMA", "KAMA" , "KAMA"); indicator.parameters.addStringAlternative("Method", "VIDYA", "VIDYA" , "VIDYA"); indicator.parameters.addStringAlternative("Method", "WMA", "WMA" , "WMA"); indicator.parameters.addGroup("Style"); indicator.parameters.addColor("Up_color", "Color of Up", "Color of Up", core.rgb(0, 255, 0)); indicator.parameters.addInteger("width1", "Line width", "", 1, 1, 5); indicator.parameters.addInteger("style1", "Line style", "", core.LINE_SOLID); indicator.parameters.setFlag("style1", core.FLAG_LINE_STYLE); indicator.parameters.addColor("Down_color", "Color of Down", "Color of Down", core.rgb(255, 0, 0)); indicator.parameters.addInteger("width2", "Line width", "", 1, 1, 5); indicator.parameters.addInteger("style2", "Line style", "", core.LINE_SOLID); indicator.parameters.setFlag("style2", core.FLAG_LINE_STYLE); } var Period; var first; var source = null; var Method; var Up = null; var Down = null; var UP,DOWN,U,D; function Prepare(nameOnly) { Period = instance.parameters.Period; Method = instance.parameters.Method; source = instance.source; var name = profile.id() + "(" + source.name() + ", " + tostring(Period) + ", " + tostring(Method) + ")"; instance.name(name); U = instance.addInternalStream(0, 0); D = instance.addInternalStream(0, 0); UP = core.indicators.create(Method, U, Period); DOWN = core.indicators.create(Method, D, Period); first = UP.DATA.first(); if (!(nameOnly)) { Up = instance.addStream("Up", core.Line, name + ".Up", "Up", instance.parameters.Up_color, first); Up.setWidth(instance.parameters.width1); Up.setStyle(instance.parameters.style1); Down = instance.addStream("Down", core.Line, name + ".Down", "Down", instance.parameters.Down_color, first); Down.setWidth(instance.parameters.width2); Down.setStyle(instance.parameters.style2); } } function Update(period, mode) { U[period]= ((source.high[period]-source.open[period])+(source.close[period]-source.low[period]))/2; D[period]= ((source.open[period]-source.low[period])+(source.high[period]-source.close[period]))/2; UP.update(mode); DOWN.update(mode); if (period < first) { return; } Up[period] = UP.DATA[period]/source.pipSize(); Down[period] = DOWN.DATA[period]/source.pipSize(); }