//@Name:Inside/Outside Bar //@Description:Returns 1 if the current candle is an outside bar and -1 if the current candle is an inside bar. //@Returns:Number //@Width:90 //@Env:Production //@Update:Periodic,30 //This code by Roger Harmer //Put on main chart as a stop. The close finishes beyond the line to signal a change in direction. //@Future:Yes // Care has been taken in preparing this code but it is provided without guarantee. var dataList = ["1m","2m","2.5m","3m","4m","5m","6m","10m","15m","20m","30m","1h","2h","3h","4h","Daily","Weekly","Monthly"]; var dataSource = 15; var outputList = ["Use current incomplete bar","Use last complete bar"]; var outputChoice = 1; function init(status) { if (status == Loading || status == Editing) { outputChoice = storage.getAt(0); dataSource = storage.getAt(1); } if (status == Adding || status == Editing) { var dlg = new Dialog("Settings.....", 260, 50); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL1",95,5,100,-1,outputList,"For intraday time periods:","",outputChoice); dlg.addDropList("VAL2",95,22,-1,-1,dataList,"Data Source","",dataSource); if (dlg.show() == Dialog.Cancel) return false; outputChoice = dlg.getValue("VAL1"); dataSource = dlg.getValue("VAL2"); } storage.setAt(0, outputChoice); storage.setAt(1, dataSource); //setTitle("CBL " + countback+" Value ("+dataList[dataSource]+")"); } function getVal(share) { 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 data = share.getIBarArray(0,dataPeriod*60) } else var data = getData(share,dataSource-15,1); if (data==undefined || data[0]==undefined || data.length<3) return; if(isAlarmContext) { if (dataSource<15) { if((data[data.length-1].timeNum == share.getMarketCloseTime() || outputChoice == 0) && (getValueForShare(share)==undefined || getValueForShare(share)==0)) { var cHigh = data[data.length-1].high; var cLow = data[data.length-1].low; var pHigh = data[data.length-2].high; var pLow = data[data.length-2].low; if(cHigh>pHigh && cLowpLow) { setValueForShare(share,-1); return -1; } } else { var cHigh = data[data.length-2].high; var cLow = data[data.length-2].low; var pHigh = data[data.length-3].high; var pLow = data[data.length-3].low; if(cHigh>pHigh && cLowpLow) { setValueForShare(share,-1); return -1; } } } else { var cHigh = data[data.length-1].high; var cLow = data[data.length-1].low; var pHigh = data[data.length-2].high; var pLow = data[data.length-2].low; if(cHigh>pHigh && cLowpLow) { setValueForShare(share,-1); return -1; } } //Reset Alarms if(getValueForShare(share)==1 && (cHighpLow)) { setValueForShare(share,0); } if(getValueForShare(share)==-1 && (cHigh>pHigh ||cLowpHigh && cLowpLow) { return -1; } } else { var cHigh = data[data.length-2].high; var cLow = data[data.length-2].low; var pHigh = data[data.length-3].high; var pLow = data[data.length-3].low; if(cHigh>pHigh && cLowpLow) { return -1; } } } else { var cHigh = data[data.length-1].high; var cLow = data[data.length-1].low; var pHigh = data[data.length-2].high; var pLow = data[data.length-2].low; if(cHigh>pHigh && cLowpLow) { return -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.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