//@Name:Coppock Value //@Description: Calculates the current Coppock value //@Returns:Number //@Width:90 //@Update:Periodic //@Env:Production // 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. // Coded by: Phil Tolhurst, ShareScope Support var period1=208; var period2=229; var period3=292; var dataSource = 0; var dataList = ["Daily","Weekly","Monthly"]; var useIntra = 0; function init(status) { if (status == Loading || status == Editing) { dataSource = storage.getAt(0); useIntra = storage.getAt(1); } if (status == Adding || status == Editing) { dlg = new Dialog("Coppock Value", 265, 50); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL1",55,5,-1,-1, dataList, "Data Source:","",dataSource); dlg.addTickBox("VAL2",5,22,130,-1,"Use Intraday data (Daily data only)",useIntra); if (dlg.show()==Dialog.Cancel) return false; dataSource= dlg.getValue("VAL1"); useIntra= dlg.getValue("VAL2"); storage.setAt(0, dataSource); storage.setAt(1, useIntra); } setTitle("Coppock Value ("+dataList[dataSource]+")"); } function getVal(share) { if (dataSource==0) var data=share.getPriceArray(); if (dataSource==1) var data=share.getWeeklyBarArray(); if (dataSource==2) var data=share.getMonthlyBarArray(); if (data.length<293) return; if(dataSource==0 && useIntra) { if (dateNum(new Date())>data[data.length-1].dateNum+5) return; var idata = share.getIBarArray(0,86400); if (idata!=undefined && idata.length==1 && new Date().getDate()==idata[0].date.getDate() && new Date().getDate()!=data[data.length-1].date.getDate()) { var tclose = share.getIClose(); data[data.length]={open:idata[0].open,high:idata[0].high,low:idata[0].low,close:(tclose==null?share.getIMid():tclose),volume:idata[0].volume}; } } var maCalc = new MA(period1,MA.Weighted); var maRes = new Array(); var longROC; var shortROC; for (i=period3;i