function Init() { indicator.name("BollStarc indicator"); indicator.description(""); indicator.requiredSource(core.Bar); indicator.type(core.Indicator); indicator.parameters.addInteger("BB_Period", "BB_Period", "Period of Bands", 20); indicator.parameters.addInteger("BB_Deviations", "BB_Deviations", "Deviations of Bands", 2); indicator.parameters.addInteger("MA_Period", "MA_Period", "Period of MA", 13); indicator.parameters.addInteger("ATR_Period", "ATR_Period", "Period of ATR", 21); indicator.parameters.addDouble("KATR", "KATR", "KATR", 2); indicator.parameters.addInteger("Shift", "Shift", "Shift", 1); indicator.parameters.addDouble("ArrowDistance", "ArrowDistance", "Arrow distance", 0.3); indicator.parameters.addColor("color1", "Moving Color", "Moving Color", core.rgb(128, 128, 128)); indicator.parameters.addColor("color2", "Upper Color", "Upper Color", core.rgb(255, 255, 0)); indicator.parameters.addColor("color3", "Lower Color", "Lower Color", core.rgb(255, 255, 0)); indicator.parameters.addColor("color4", "buff1 Color", "buff1 Color", core.rgb(0, 128, 255)); indicator.parameters.addColor("color5", "buff2 Color", "buff2 Color", core.rgb(0, 128, 255)); indicator.parameters.addColor("color6", "Arrow up Color", "Arrow up Color", core.rgb(0, 0, 255)); indicator.parameters.addColor("color7", "Arrow {wn Color", "Arrow {wn Color", core.rgb(255, 0, 0)); } var first; var source = null; var BB_Period; var BB_Deviations; var MA_Period; var ATR_Period; var KATR; var Shift; var ArrowDistance; var MA=null; var BB=null; var ATR=null; var MovingBuffer; var UpperBuffer; var LowerBuffer; var buff1; var buff2; var SigBufferUp=null; var SigBufferDn=null; function Prepare() { source = instance.source; BB_Period=instance.parameters.BB_Period; BB_Deviations=instance.parameters.BB_Deviations; MA_Period=instance.parameters.MA_Period; ATR_Period=instance.parameters.ATR_Period; KATR=instance.parameters.KATR; Shift=instance.parameters.Shift; ArrowDistance=instance.parameters.ArrowDistance; MA = core.indicators.create("EMA", source.close, MA_Period); BB = core.indicators.create("BB", source.close, BB_Period,BB_Deviations); ATR = core.indicators.create("ATR", source, ATR_Period); first = Math.max(MA.DATA.first(),BB.DATA.first(),ATR.DATA.first())+2; var name = profile.id() + "(" + source.name() + ", " + BB_Period + ", " + BB_Deviations + ", " + MA_Period + ", " + ATR_Period + ", " + KATR + ", " + Shift + ")"; instance.name(name); MovingBuffer = instance.addStream("MovingBuffer", core.Line, name + ".MovingBuffer", "MovingBuffer", instance.parameters.color1, first); UpperBuffer = instance.addStream("UpperBuffer", core.Line, name + ".UpperBuffer", "UpperBuffer", instance.parameters.color2, first); LowerBuffer = instance.addStream("LowerBuffer", core.Line, name + ".LowerBuffer", "LowerBuffer", instance.parameters.color3, first); buff1 = instance.addStream("buff1", core.Line, name + ".buff1", "buff1", instance.parameters.color4, first); buff2 = instance.addStream("buff2", core.Line, name + ".buff2", "buff2", instance.parameters.color5, first); SigBufferUp = instance.createTextOutput ("SigBufferUp", "SigBufferUp", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.color6, first); SigBufferDn = instance.createTextOutput ("SigBufferDn", "SigBufferDn", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.color7, first); } function Update(period, mode) { MA.update(mode); BB.update(mode); ATR.update(mode); if (period>first) { MovingBuffer[period]=MA.DATA[period-Shift]; UpperBuffer[period]=MovingBuffer[period]+(KATR*ATR.DATA[period-Shift]); LowerBuffer[period]=MovingBuffer[period]-(KATR*ATR.DATA[period-Shift]); buff1[period]=BB.TL[period]; buff2[period]=BB.BL[period]; var SigDistance=ArrowDistance*(KATR*ATR.DATA[period-Shift]); if (buff1[period-1]=LowerBuffer[period-1] && buff2[period]LowerBuffer[period-1] && buff1[period]>UpperBuffer[period] && MovingBuffer[period-1]>MovingBuffer[period]) { SigBufferDn.set(period, buff1[period]+SigDistance, "\226", ""); } } }