//@Name:Fractals //@Description:Triggers when there is a flag (bar colour change) based on the Fractals study. The alternative mode counts through 4 bars instead of the standard 5 //@Returns:Number //@Width:95 //@Env:Production //@Update:Periodic //@DefaultRangeMax:1 //@DefaultRangeMin:-1 var useAlt = 0 var useAltList = ["Standard - 5 Bar","Alternative - 4 Bar"] var useIntra=0; var dataList = ["1m","2m","2.5m","3m","4m","5m","6m","10m","15m","20m","30m","1h","2h","3h","4h","Daily","Weekly","Monthly"]; var dataSource = 15; function init(status) { if (status == Loading || status == Editing) { useAlt = storage.getAt(0); dataSource = storage.getAt(1); useIntra = storage.getAt(2); } if (status == Adding || status == Editing) { dlg = new Dialog((status==Adding?"Add":"Edit")+" indicator", 255, 55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL1",5,5,100,-1, useAltList, "","",useAlt); dlg.addDropList("VAL2",45,22,55,-1, dataList, "Data Source:","",dataSource); dlg.addTickBox("VAL3",105,24,85,-1,"Include Intraday Data",useIntra); if (dlg.show()==Dialog.Cancel) return false; useAlt = dlg.getValue("VAL1");; dataSource = dlg.getValue("VAL2"); useIntra = dlg.getValue("VAL3"); storage.setAt(0, useAlt); storage.setAt(1, dataSource); storage.setAt(2, useIntra); } setTitle("Fractals ("+useAltList[useAlt]+") "+(useIntra?"i":"")+dataList[dataSource]); } function getVal(share) { // gets the correct PriceData array if (dataSource<15) { switch (dataSource) { case 0: var dataPeriod = 1; break; case 1: var dataPeriod = 2; break; case 2: var dataPeriod = 2.5; break; case 3: var dataPeriod = 3; break; case 4: var dataPeriod = 4; break; case 5: var dataPeriod = 5; break; case 6: var dataPeriod = 6; break; case 7: var dataPeriod = 10; break; case 8: var dataPeriod = 15; break; case 9: var dataPeriod = 20; break; case 10: var dataPeriod = 30; break; case 11: var dataPeriod = 60; break; case 12: var dataPeriod = 120; break; case 13: var dataPeriod = 180; break; case 14: var dataPeriod = 240; break; } var daysNeeded = Math.ceil(dataPeriod * 81*4/510); var eodData = share.getPriceArray(); if (eodData.length=0;i--) { tempData = share.getIBarArray(i,dataPeriod*60); if (tempData==undefined || tempData.length<1) continue; data = data.concat(share.getIBarArray(i,dataPeriod*60)); } if (data==undefined || data[0]==undefined || data.length<3) return; } if (dataSource==15) var data = getData(share,0,useIntra) if (dataSource==16) var data = getData(share,1,useIntra) if (dataSource==17) var data = getData(share,2,useIntra) if(data == undefined || data.length<25) return; var output = []; for (var i=2;i data[i].low) { output[i] = -1; } } if(isAlarmContext) { if(getValueForShare(share)!=1 && output[output.length-2] == 1) { setValueForShare(share,1) return 1; } else if(getValueForShare(share)!=-1 && output[output.length-2] == -1) { setValueForShare(share,1) return -1; } else if(getValueForShare(share)!= 0 && output[output.length-2] == 0) { setValueForShare(share,0) } } else { return output[output.length-1]; } } function getData(share,dataType,useIntra) { if (dataType==0)var data = share.getPriceArray(); if (dataType==1)var data = share.getWeeklyBarArray(); if (dataType==2)var data = share.getMonthlyBarArray(); if (data==undefined || data.length<2) return []; if (dataType==0 && useIntra==1) { 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()) { data[data.length]={ open:idata[0].open, high:idata[0].high, low:idata[0].low, close:(share.getIClose()==null?share.getIMid():share.getIClose()), volume:idata[0].volume, dateNum:idata[0].dateNum}; } } if (dataType==1 && useIntra==1) { 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()) { if (idata[0].date.getDay()data[data.length-1].high?idata[0].high:data[data.length-1].high), low:(idata[0].lowdata[data.length-1].high?idata[0].high:data[data.length-1].high), low:(idata[0].low