//@Name:OBV+Signal //@Description:Draws the OBV and a signal line. //Author: Phil Tolhurst, ShareScript 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 period=20; var maType = 0; var maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA",] var colour1=11862016; var colour2=255; var width1=0; var width2=0; var pen1=0; var pen2=0; function init(status) { if (status == Loading || status == Editing) { period = storage.getAt(0); maType = storage.getAt(1); colour1 = storage.getAt(2); colour2 = storage.getAt(3); width1 = storage.getAt(4); width2 = storage.getAt(5); pen1 = storage.getAt(6); pen2 = storage.getAt(7); } if (status == Adding || status == Editing) { var dlg = new Dialog("OBV with Signal Line", 235, 70); dlg.addOkButton(); dlg.addCancelButton(); dlg.addGroupBox(5,5,170,30,"Indicator Properties"); dlg.addColLinePicker("VAL1",10,15,-1,-1,"","",colour1,pen1,width1); dlg.addGroupBox(5,35,170,30,"Signal Properties"); dlg.addIntEdit("VAL2",45,45,-1,-1, "","periods",period,0,999); dlg.addDropList("VAL3",103,45,-1,-1,maList,"","",maType); dlg.addColLinePicker("VAL4",10,45,-1,-1,"","",colour2,pen2,width2); if (dlg.show() == Dialog.Cancel) return false; period = dlg.getValue("VAL2"); maType = dlg.getValue("VAL3"); colour1 = dlg.getValue("VAL1").colour; pen1 = dlg.getValue("VAL1").pen; width1 = dlg.getValue("VAL1").width; colour2 = dlg.getValue("VAL4").colour; pen2 = dlg.getValue("VAL4").pen; width2 = dlg.getValue("VAL4").width; storage.setAt(0, period); storage.setAt(1, maType); storage.setAt(2, colour1); storage.setAt(3, colour2); storage.setAt(4, width1); storage.setAt(5, width2); storage.setAt(6, pen1); storage.setAt(7, pen2); } setTitle("On Balance Vol. - M's & Signal ("+period+" "+maList[maType]+")"); setSeriesColour(0, colour1); setSeriesLineStyle(0, pen1, width1); setSeriesColour(1, colour2); setSeriesLineStyle(1, pen2, width2); } function getGraph(share, data) { var OBVcalc = new OnBalVol(); var MAcalc = new MA(period, maType); var OBVresult = new Array(); var MAresult = new Array(); for (var i=0; i