//@Name:MA Convergence //@Description:The script will return the convergence of two fully editable MAs expressed as their percentage difference. //@Returns:Number //@Update:Periodic,60 //@Width:85 var MAtype1 = 0; var MAtype2 = 0; var var1 = 10; var var2 = 20; var dataType1 = 3; var dataType2 = 3; var maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA","TEMA","Hull"]; var maTitleList = ["SMA","EMA","WMA","TMA","VVHF","VCMO","VIDYA","TEMA","HMA"]; var dataList = ["Open","High","Low","Close","Typical","Median","Weighted"]; var dataPeriodList = ["1m","2m","2.5m","3m","4m","5m","6m","10m","15m","20m","30m","1h","2h","3h","4h","Daily","Weekly","Monthly"]; var dataSource = 15; function init(status) { if (status == Loading || status == Editing) { MAtype1 = storage.getAt(0); var1 = storage.getAt(1); dataType1 = storage.getAt(2); MAtype2 = storage.getAt(3); var2 = storage.getAt(4); dataType2 = storage.getAt(5); dataSource = storage.getAt(6); } if (status == Adding || status == Editing) { dlg = new Dialog("Settings...",280,65); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,5,80,-1,maList,"","",MAtype1); dlg.addIntEdit("INT1",95,5,-1,-1,"","period MA of",var1,2,1000); dlg.addDropList("DL3",175,5,40,-1,dataList,"","",dataType1); dlg.addDropList("DL2",8,23,80,-1,maList,"","",MAtype2); dlg.addIntEdit("INT2",95,23,-1,-1,"","period MA of",var2,3,1000); dlg.addDropList("DL4",175,23,40,-1,dataList,"","",dataType2); dlg.addDropList("DL5",8,41,80,-1,dataPeriodList,"","",dataSource); if (dlg.show()==Dialog.Cancel) return false; MAtype1 = dlg.getValue("DL1"); var1 = dlg.getValue("INT1"); MAtype2 = dlg.getValue("DL2"); var2 = dlg.getValue("INT2"); dataType1 = dlg.getValue("DL3"); dataType2 = dlg.getValue("DL4"); dataSource = dlg.getValue("DL5"); storage.setAt(0, MAtype1); storage.setAt(1, var1); storage.setAt(2, dataType1); storage.setAt(3, MAtype2); storage.setAt(4, var2); storage.setAt(5, dataType2); storage.setAt(6, dataSource); } setTitle("MA % conv. ("+var1+" "+maTitleList[MAtype1]+", "+var2+" "+maTitleList[MAtype2]+") - "+dataPeriodList[dataSource]); } function getVal(share) { // gets the correct PriceData array 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 * Math.max(var1,var2)*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,1); if (dataSource==16) var data = getData(share,1,1); if (dataSource==17) var data = getData(share,2,1); if (data.length<2) return; var line1 = new Array(); var line2 = new Array(); if (MAtype1 == 8) { var sqrtperiod1 = Math.round(Math.sqrt(var1)); var ma1 = new MA(var1/2, MA.Weighted); var ma2 = new MA(var1, MA.Weighted); var ma3 = new MA(sqrtperiod1, MA.Weighted); 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