//@Name:MACD Reversal //@Description:Returns a 1 if the MACD Main,Signal or Histogram is has risen and then fallen and -1 if it has fallen and then risen. //@Returns:Number //@Width:80 //@Env:Production // Author: Phil Tolhurst, ShareScript Support // Modified: Phil Tolhurst, ShareScript Support - 20/03/18 (Add options for Signal, Main and Histogram) // 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 shortPeriod = 13; var longPeriod = 26; var signalPeriod = 9; var dataList = ["Daily","Weekly","Monthly"]; var dataSource = 0; var outputList = ["Main","Signal","Histogram"] var outputSource = 2; function init(status) { if (status == Loading || status == Editing) { shortPeriod = storage.getAt(0); longPeriod = storage.getAt(1); signalPeriod = storage.getAt(2); dataSource = storage.getAt(3); outputSource = storage.getAt(4); } if (status == Adding || status == Editing) { dlg = new Dialog("MACD settings",240,100); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("VAL1",8,5,-1,-1,"","Short period",shortPeriod,2,1000); dlg.addIntEdit("VAL2",8,22,-1,-1,"","Long period",longPeriod,3,1000); dlg.addIntEdit("VAL3",8,39,-1,-1,"","Signal period",signalPeriod,2,1000); dlg.addDropList("VAL4",80,56,48,-1,outputList,"Show reversal in the:","",outputSource); dlg.addDropList("VAL5",80,73,48,-1,dataList,"Data Source","",dataSource); if (dlg.show()==Dialog.Cancel) return false; shortPeriod = dlg.getValue("VAL1"); longPeriod = dlg.getValue("VAL2"); signalPeriod = dlg.getValue("VAL3"); outputSource = dlg.getValue("VAL4"); dataSource = dlg.getValue("VAL5"); storage.setAt(0, shortPeriod); storage.setAt(1, longPeriod); storage.setAt(2, signalPeriod); storage.setAt(3, dataSource); storage.setAt(4, outputSource); } //sets the title of the column setTitle(outputList[outputSource]+": "+shortPeriod+","+longPeriod+","+signalPeriod+" ("+dataList[dataSource]+")"); } function getVal(share) { var output; if (dataSource==0) var data = share.getPriceArray(longPeriod*6); if (dataSource==1) var data = share.getWeeklyBarArray(longPeriod*6); if (dataSource==2) var data = share.getMonthlyBarArray(longPeriod*6); var macd1 = new MACD(shortPeriod,longPeriod,signalPeriod); var histoRes = []; var macdRes = []; var signalRes = []; for (var i=0;i0) { if (macdRes[y2]macdRes[t]) output = 1; if (macdRes[y2]>histoRes[y] && macdRes[y]macdRes[t]) output = 1; if(macdRes[y2]>macdRes[y] && macdRes[y]0) { if (signalRes[y2]signalRes[t]) output = 1; if (signalRes[y2]>signalRes[y] && signalRes[y]signalRes[t]) output = 1; if(signalRes[y2]>signalRes[y] && signalRes[y]0) { if (histoRes[y2]histoRes[t]) output = 1; if (histoRes[y2]>histoRes[y] && histoRes[y]histoRes[t]) output = 1; if(histoRes[y2]>histoRes[y] && histoRes[y]