//@Name:Alarm:Intraday MACD Cross //@Description:Intraday MACD cross alarm that triggers immediately, without waiting for the current bar to complete //@Returns:Text //@Env:Production //@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 var1 = 13; var var2 = 26; var var3 = 9; var crossType = 0 var crossList = ["MACD above signal","MACD below signal"]; var dataPeriod = 5; function init(status) { if (status == Loading || status == Editing) { crossType = storage.getAt(0); dataPeriod = storage.getAt(1) var1 = storage.getAt(2); var2 = storage.getAt(3); var3 = storage.getAt(4); } if (status == Adding || status == Editing) { // creates the first dialog where the type of cross and the time period are chosen dlg = new Dialog("Select Cross Type", 160, 75); dlg.addOkButton(-1,-1,-1,-1,"Next >"); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,80,-1,crossList,"","",crossType); dlg.addIntEdit("INT1",8,-1,-1,-1,"","min period",dataPeriod,1,240); if (dlg.show()==Dialog.Cancel) return false; crossType = dlg.getValue("DL1"); storage.setAt(0, crossType); dataPeriod = dlg.getValue("INT1"); storage.setAt(1, dataPeriod); // creates the second dialog where the periods are set dlg2 = new Dialog("Settings...",160,75); dlg2.addOkButton(); dlg2.addCancelButton(); dlg2.addIntEdit("INT2",8,-1,-1,-1,"","Short period",var1,2,1000); dlg2.addIntEdit("INT3",8,-1,-1,-1,"","Long period",var2,3,1000); dlg2.addIntEdit("INT4",8,-1,-1,-1,"","Signal period",var3,2,1000); if (dlg2.show()==Dialog.Cancel) return false; var1 = dlg2.getValue("INT2"); var2 = dlg2.getValue("INT3"); var3 = dlg2.getValue("INT4"); storage.setAt(2, var1); storage.setAt(3, var2); storage.setAt(4, var3); } setTitle("MACD Cross"); } function getVal(share) { var oldAlarm = getValueForShare(share); var alarmText; var daysNeeded = Math.min(Math.ceil((dataPeriod * var2 * 4) / 510), 10); var eodData = share.getPriceArray(); if (eodData.length=0;i--) { data = data.concat(share.getIBarArray(i,dataPeriod*60)); } if (data==undefined || data[0]==undefined || data.length<3) return; var macd1 = new MACD(var1,var2,var3); var macdLine = []; var signalLine = []; for (var i=0;isignalLine[signalLine.length-1]) || (crossType==1 && macdLine[macdLine.length-2]>signalLine[signalLine.length-2] && macdLine[macdLine.length-1]signalLine[signalLine.length-2] && macdLine[macdLine.length-1]>signalLine[signalLine.length-1])) setValueForShare(share, undefined); } return alarmText; }