//@Name:Outside Bollinger Band //@Description:Finds shares that are currently trading outside the top band or bottom band //@Returns:Number //@Width:90 //@Env:Production //@Update:Periodic, 30 // Author: Richard Chiesa, 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 maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA","TEMA"]; var maTitleList = ["SMA","EMA","WMA","TMA","VVHF","VCMO","VIDYA","TEMA"]; var dataList = ["Daily","Weekly","Monthly"]; var useIntra = false; var period = 20; var devs = 1.5; var dataSource = 0; var MAtype = 0 function init(status) { if (status == Loading || status == Editing) { dataSource = storage.getAt(0); MAtype = storage.getAt(1); period = storage.getAt(2); devs = storage.getAt(3); useIntra = storage.getAt(4); } if (status == Adding || status == Editing) { var dlg = new Dialog("Settings...",160,105); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,80,-1,dataList,"","",dataSource); dlg.addDropList("DL2",8,-1,80,-1,maList,"","",MAtype); dlg.addNumEdit("INT1",8,-1,-1,-1,"","Period",period,2,1000); dlg.addNumEdit("NUM1",8,-1,-1,-1,"","St. Devs.",devs,0.5,5); dlg.addTickBox("TB1",8,-1,120,-1,"Use intraday (daily data only)",useIntra) if (dlg.show()==Dialog.Cancel) return false; dataSource = dlg.getValue("DL1"); MAtype = dlg.getValue("DL2"); period = dlg.getValue("INT1"); devs = dlg.getValue("NUM1"); useIntra = dlg.getValue("TB1"); storage.setAt(0, dataSource); storage.setAt(1, MAtype); storage.setAt(2, period); storage.setAt(3, devs); storage.setAt(4, useIntra); } setTitle("Trading outside "+period+" "+maTitleList[MAtype]+","+devs+" devs BB"); } function getVal(share) { var ma1 = new MA(period, MAtype); //type of MA var v1 = new Array(); var av1 = new Array(); var av2 = new Array(); var y1 = new Array(); var output = 0; var ma2 = new MA(period); // gets the daily,weekly or monthly PriceData object if (dataSource==0) var data = share.getPriceArray(); if (dataSource==1) var data = share.getWeeklyBarArray(); if (dataSource==2) var data = share.getMonthlyBarArray(); //if Use Intraday is selected, calculate today's intraday bar and add it to the data array. if (dataSource==0 && useIntra) { var iData = share.getIBarArray(0, 86400); if (iData != undefined && iData.length==1) data[data.length] = iData[0]; } if (data.length-(period*3)<0) return undefined; for (var i=data.length-(period*3);i data[data.length-1].close) return -1; return output; }