//@Name:MA Change //@Description:Returns the absolute or percentage change in value of a chosen MA between two specified periods. //@Returns:Number //@Width:60 //@Env:Production //@Update:Periodic,90 //Modified by: Paul Hall, ShareScope Support (12/8/16 - added intraday options) var maType = 0; var period = 20; var percDiff = false; var dataSource = 15; var dataList = ["1m","2m","2.5m","3m","4m","5m","6m","10m","15m","20m","30m","1h","2h","3h","4h","Daily","Weekly","Monthly"]; var titleList = ["1m","2m","2.5m","3m","4m","5m","6m","10m","15m","20m","30m","1h","2h","3h","4h","D","W","M"]; var maTitleList = ["SMA","EMA","WMA","TMA","VVHF","VCMO","VIDYA"]; var maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA"]; var perList = ["+/-","%"]; var daysAgo1 = 1; var daysAgo2 = 0; var usePercent = 1; var useIntra = 0; function init(status) { if (status == Loading || status == Editing) { dataSource = storage.getAt(0); maType = storage.getAt(1); period = storage.getAt(2); daysAgo1 = storage.getAt(3); daysAgo2 = storage.getAt(4); usePercent = storage.getAt(5); useIntra = storage.getAt(6); } if (status == Adding || status == Editing) { do{ dlg = new Dialog("Settings",300,60); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL1",105,5,45,-1,dataList,"","",dataSource); dlg.addDropList("VAL2",40,5,61,-1,maList,"","",maType); dlg.addIntEdit("VAL3",5,5,-1,-1,"","",period,2,1000); dlg.addIntEdit("VAL4",80,22,-1,-1,"from","period/s ",daysAgo1,0,9999); dlg.addIntEdit("VAL5",151,22,-1,-1,"to","period/s ago",daysAgo2,0,9999); dlg.addText(5,39,275,20,"0 periods ago will be the most recent value. 'From' must be greater than 'To'. Use intraday applies to daily, weekly, monthly data."); dlg.addDropList("VAL6",5,22,28,-1,perList,"","Change",usePercent); dlg.addTickBox("VAL7",160,7,50,-1,"use intraday",useIntra); if (dlg.show()==Dialog.Cancel) return false; dataSource = dlg.getValue("VAL1"); maType = dlg.getValue("VAL2"); period = dlg.getValue("VAL3"); daysAgo1 = dlg.getValue("VAL4"); daysAgo2 = dlg.getValue("VAL5"); usePercent = dlg.getValue("VAL6"); useIntra = dlg.getValue("VAL7"); } while(daysAgo1<=daysAgo2); storage.setAt(0, dataSource); storage.setAt(1, maType); storage.setAt(2, period); storage.setAt(3, daysAgo1); storage.setAt(4, daysAgo2); storage.setAt(5, usePercent); storage.setAt(6, useIntra); } useIntra==1&&dataSource>=15?setTitle(period+" "+maTitleList[maType]+" ("+titleList[dataSource]+"i) "+perList[usePercent]+" between "+daysAgo1+" & "+daysAgo2+" periods"): setTitle(period+" "+maTitleList[maType]+" ("+titleList[dataSource]+") "+perList[usePercent]+" between "+daysAgo1+" & "+daysAgo2+" periods"); } function getVal(share) { if (dataSource<15) { switch (dataSource) { case 0: var dataPeriod = 1; break; case 1: var dataPeriod = 2; break; case 2: var dataPeriod = 2.5; break; case 3: var dataPeriod = 3; break; case 4: var dataPeriod = 4; break; case 5: var dataPeriod = 5; break; case 6: var dataPeriod = 6; break; case 7: var dataPeriod = 10; break; case 8: var dataPeriod = 15; break; case 9: var dataPeriod = 20; break; case 10: var dataPeriod = 30; break; case 11: var dataPeriod = 60; break; case 12: var dataPeriod = 120; break; case 13: var dataPeriod = 180; break; case 14: var dataPeriod = 240; break; } var daysNeeded = Math.ceil(dataPeriod * period*4/ 510); var eodData = share.getPriceArray(); if (eodData.length=0;i--) { tempData = share.getIBarArray(i,dataPeriod*60); if (tempData==undefined || tempData.length<1) continue; data = data.concat(share.getIBarArray(i,dataPeriod*60)); } if (data==undefined || data[0]==undefined || data.length<3) return; } if (dataSource==15) var data = getData(share,0,useIntra) if (dataSource==16) var data = getData(share,1,useIntra) if (dataSource==17) var data = getData(share,2,useIntra) if (data.length<2) return; var maCalc = new MA(period,maType); var maRes = new Array(); for (var i=0;idata[data.length-1].high?idata[0].high:data[data.length-1].high), low:(idata[0].lowdata[data.length-1].high?idata[0].high:data[data.length-1].high), low:(idata[0].low