//@Name:STARC Channel //@Description:Plots a STARC Channel (includes ATR and multiplier parameters) //Coded by: Paul Hall, ShareScope Support // Care has been taken in preparing this code but it is provided without guarantee. // You are welcome to modify and extend it. Please add your name as a modifier if you distribute it. var maPeriod = 20; var maType = 1; var atrPeriod = 10; var atrX1 = 1.0; var atrX2 = 2.0; var atrX3 = 3.0; var colour1 = Colour.Blue; var pen1 = 2; var width1 = 0; var colour2 = Colour.Blue; var pen2 = 0; var width2 = 0; var showK1 = false; var showK2 = false; var showK3 = false; var maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA"]; var maList2 = ["SMA","EMA","WMA","TMA","VVHF","VCMO","VIDYA"]; function init(status) { if (status == Loading || status == Editing) { maPeriod = storage.getAt(0); atrPeriod = storage.getAt(1); maType = storage.getAt(2); atrX1 = storage.getAt(3); colour1 = storage.getAt(4); pen1 = storage.getAt(5); width1 = storage.getAt(6); colour2 = storage.getAt(7); pen2 = storage.getAt(8); width2 = storage.getAt(9); atrX2 = storage.getAt(10); atrX3 = storage.getAt(11); showK1 = storage.getAt(12); showK2 = storage.getAt(13); showK3 = storage.getAt(14); } if(status == Adding) { storage.setAt(0, maPeriod); storage.setAt(1, atrPeriod); storage.setAt(2, maType); storage.setAt(3, atrX1); storage.setAt(4, colour1); storage.setAt(5, pen1); storage.setAt(6, width1); storage.setAt(7, colour2); storage.setAt(8, pen2); storage.setAt(9, width2); storage.setAt(10, atrX2); storage.setAt(11, atrX3); storage.setAt(12, showK1); storage.setAt(13, showK2); storage.setAt(14, showK3); } if(status == Adding || status == Editing) { drawDialogBox(); } buttonHandle = createButton("Settings", onButton0); setInfoText(maPeriod+" "+maList2[maType]+", "+atrX1.toFixed(1)+", "+atrX2.toFixed(1)+", "+atrX3.toFixed(1)+" x ATR("+atrPeriod+")"); } function onButton0() { maPeriod = storage.getAt(0); atrPeriod = storage.getAt(1); maType = storage.getAt(2); atrX1 = storage.getAt(3); colour1 = storage.getAt(4); pen1 = storage.getAt(5); width1 = storage.getAt(6); colour2 = storage.getAt(7); pen2 = storage.getAt(8); width2 = storage.getAt(9); atrX2 = storage.getAt(10); atrX3 = storage.getAt(11); showK1 = storage.getAt(12); showK2 = storage.getAt(13); showK3 = storage.getAt(14); drawDialogBox(); setInfoText(maPeriod+" "+maList2[maType]+", "+atrX1.toFixed(1)+", "+atrX2.toFixed(1)+", "+atrX3.toFixed(1)+" x ATR("+atrPeriod+")"); draw(); } function drawDialogBox() { var dlg = new Dialog("STARC Channel", 200, 150); dlg.addOkButton(); dlg.addCancelButton(); dlg.addGroupBox(10,5,127,50,"Moving Average"); dlg.addDropList("MAVal1",16,35,-1,-1,maList,"","",maType); dlg.addIntEdit("MAVal2",16,20,-1,-1,"","day",maPeriod,2,1000); dlg.addColLinePicker("MACOL",100,20,-1,-1,"","",colour1,pen1,width1); dlg.addGroupBox(10,60,127,80,"STARC Channel"); dlg.addColLinePicker("KCOL",100,75,-1,-1,"","",colour2,pen2,width2); dlg.addNumEdit("KVAL1",51,75,-1,-1,"Multiplier:","",atrX1.toFixed(1),0.1,20); dlg.addTickBox("TB1",84,77,10,-1,"",showK1); dlg.addNumEdit("KVAL3",51,90,-1,-1,"Multiplier:","",atrX2.toFixed(1),0.1,20); dlg.addTickBox("TB2",84,92,10,-1,"",showK2); dlg.addNumEdit("KVAL4",51,105,-1,-1,"Multiplier:","",atrX3.toFixed(1),0.1,20); dlg.addTickBox("TB3",84,107,10,-1,"",showK3); dlg.addIntEdit("KVAL2",51,130,-1,-1,"ATR:","",atrPeriod,2,1000); if (dlg.show() == Dialog.Cancel) return false; maPeriod = dlg.getValue("MAVal2"); atrPeriod = dlg.getValue("KVAL2"); maType = dlg.getValue("MAVal1"); atrX1 = dlg.getValue("KVAL1"); atrX2 = dlg.getValue("KVAL3"); atrX3 = dlg.getValue("KVAL4"); colour1 = dlg.getValue("MACOL").colour; pen1 = dlg.getValue("MACOL").pen; width1 = dlg.getValue("MACOL").width; colour2 = dlg.getValue("KCOL").colour; pen2 = dlg.getValue("KCOL").pen; width2 = dlg.getValue("KCOL").width; showK1 = dlg.getValue("TB1"); showK2 = dlg.getValue("TB2"); showK3 = dlg.getValue("TB3"); storage.setAt(0, maPeriod); storage.setAt(1, atrPeriod); storage.setAt(2, maType); storage.setAt(3, atrX1); storage.setAt(4, colour1); storage.setAt(5, pen1); storage.setAt(6, width1); storage.setAt(7, colour2); storage.setAt(8, pen2); storage.setAt(9, width2); storage.setAt(10, atrX2); storage.setAt(11, atrX3); storage.setAt(12, showK1); storage.setAt(13, showK2); storage.setAt(14, showK3); } function onNewChart() { draw(); } function onNewBarUpdate() { draw() } function draw() { clearDisplay(); var ma1 = new MA(maPeriod,maType); var maValues = []; var atr1 = new ATR(atrPeriod); var atrValues = []; var keltnerTop1 = []; var keltnerBottom1 = []; var keltnerTop2 = []; var keltnerBottom2 = []; var keltnerTop3 = []; var keltnerBottom3 = []; for (var i=0;i