//@Name:Alarm:Inverse Fisher RSI //@Description:An alarm that triggers when the Inverse Fisher Transform of a smoothed RSI crosses a given level. //@Returns:Text //@Update:Periodic,15 //@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: Richard Chiesa, ShareScript Support //Modified by: Phil Tolhurst, ShareScript Support var period = 5; var period2 = 9; var LineCol = Colour.Red; var LineStyle = 0; var LineWidth = 0; var triggerLevel = 0; var triggerType = 0; function init(status) { if (status == Loading || status == Editing) { period = storage.getAt(0); period2 = storage.getAt(1); triggerLevel = storage.getAt(2); triggerType = storage.getAt(3); } if (status == Adding || status == Editing) { dlg = new Dialog((status==Adding?"Add":"Edit")+" indicator", 180, 75); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("VAL1",78,-1,-1,-1,"RSI Period","",period,2,1000); dlg.addIntEdit("VAL2",78,-1,-1,-1,"Smoothing period","",period2,2,1000); dlg.addNumEdit("VAL3",78,-1,-1,-1,"Trigger Level","",triggerLevel,-1,1); dlg.addDropList("VAL4",43,-1,-1,-1,["Crosses Above","Crosses Below"],"","",triggerType); if (dlg.show()==Dialog.Cancel) return false; period = dlg.getValue("VAL1"); period2 = dlg.getValue("VAL2"); triggerLevel = dlg.getValue("VAL3"); triggerType = dlg.getValue("VAL4"); storage.setAt(0, period); storage.setAt(1, period2); storage.setAt(2, triggerLevel); storage.setAt(3, triggerType); } } function getVal(share) { //Get data array and add intraday data as the last Open,High,Low,Close and Volume figures in the aray var data = share.getPriceArray(); if (data.lengthdata[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 rsi1 = new RSI(period); var ma1 = new MA(period2,MA.Weighted); var value1 = []; var value2 = []; var iFish = []; for (var i=0;itriggerLevel) { setValueForShare(share,1); return ("Crossed Above:"+triggerLevel); } } if (triggerType==1 && getValueForShare(share)!=1) { if (iFish[iFish.length-2]>triggerLevel && iFish[iFish.length-1]