//@Name:Mid/Close from Close //@Description: Calculates the difference between the current mid (or last close if no Mid) and the close on a specified date or x number of trading days ago //@Width:80 //@Returns:Number //@Update:Periodic,15 //@Env:Production //Author: Phil Tolhurst, ShareScope 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 startDate = dateNum(new Date())-1; var tdDays =5; var typeList = ["+/-","% +/-"] var type = 0; var whenList = ["X trading days ago","date"] var when = 0; function init(status) { settings = new Array(); if (status == Loading || status == Editing) { tdDays = storage.getAt(0); type = storage.getAt(1); startDate=storage.getAt(2); when = storage.getAt(3); } if (status == Adding || status == Editing) { var tempDate = new Date(dateNumGetYear(startDate),dateNumGetMonth(startDate),dateNumGetDay(startDate)); dlg = new Dialog("Settings....", 300,65); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL1",45,5,45,-1,typeList,"Mid","",type); dlg.addDropList("VAL2",115,5,78,-1,whenList,"since","",when); dlg.addNumEdit("VAL3",125,25,-1,-1,"or ","trading days ago.",tdDays,1,99999); dlg.addDatePicker("VAL4",45,25,-1,-1, "Select date", "",tempDate); if (dlg.show() == Dialog.Cancel) return false; type= dlg.getValue("VAL1") when= dlg.getValue("VAL2"); tdDays = dlg.getValue("VAL3"); tempDate= dlg.getValue("VAL4"); startDate = dateNum(tempDate.getFullYear(),tempDate.getMonth(),tempDate.getDate()); storage.setAt(0,tdDays); storage.setAt(1,type); storage.setAt(2,startDate); storage.setAt(3,when); } var day = dateNumGetDay(startDate)<10?"0"+dateNumGetDay(startDate):dateNumGetDay(startDate); var month = dateNumGetMonth(startDate)+1<10?"0"+(dateNumGetMonth(startDate)+1):dateNumGetMonth(startDate)+1; setTitle(typeList[type]+(when==0?(" since "+tdDays+"td ago"):(" since "+day+"/"+month+"/"+dateNumGetYear(startDate)))); } function getVal(share) { var mid = share.getIMid(); var idate = share.getIDateNum(); var price = share.getPrice(); if (when==0) { if (mid>0 && idate!=price.dateNum) { var closePrice = share.getClose(tdDays-1); } else { mid = share.getClose(); var closePrice = share.getClose(tdDays); } } else { if (mid==null) { mid = share.getClose(); } var tempDate = new Date(dateNumGetYear(startDate),dateNumGetMonth(startDate),dateNumGetDay(startDate)); var closePrice = share.getCloseOnDate(tempDate); } if(closePrice==undefined) return; //print(share.getEPIC()+" - "+closePrice+" - "+mid); if (type==0) return mid-closePrice; else return ((mid-closePrice)/closePrice*100); }