//@Name:CMO Value //@Description:Returns the latest value of the Chande Momentum Oscillator //@Returns:Number //@Update:Periodic, 60 // 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 dataList = ["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) { period = storage.getAt(0); dataSource = storage.getAt(1); } if (status == Adding || status == Editing) { dlg = new Dialog("CMO Settings",170,55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("INT1",8,-1,-1,-1,"","period",period,2,1000); dlg.addDropList("DL1",8,-1,50,-1,dataList,"","period length",dataSource); if (dlg.show()==Dialog.Cancel) return false; period = dlg.getValue("INT1"); dataSource = dlg.getValue("DL1"); storage.setAt(0, period); storage.setAt(1, dataSource); } setTitle(period+" CMO ("+dataList[dataSource]+")"); } 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,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 cmo1 = new CMO(period) 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