// Downloaded From https://www.WiseStockTrader.com function ParamOptimize( pname, defaultval, minv, maxv, step ) { return Optimize( pname, Param( pname, defaultval, minv, maxv, step ), minv, maxv, step ); } _SECTION_BEGIN("Augubhai's ORB System v1.1"); //--Intraday time frame TimeFrameSet(in5Minute); //If reseting, check formula for TimeFrameInMinutes TimeFrameInMinutes = 5; //--Define all params EntryBufferPct = ParamOptimize("Entry Buffer %", 0, 0, 2, 0.1); SLPct = ParamOptimize("SL %", 1.4, 0.1, 10, 0.1); TargetPct = ParamOptimize("Target %", 0, 0, 20, 0.5); MaxTarget = 100; TargetPct = IIf(TargetPct == 0, MaxTarget, TargetPct); EntryTimeStart = ParamOptimize("Entry Time Start (Minutes)", 5, 5, 120, 5); EntryBarStart = floor(EntryTimeStart/TimeFrameInMinutes) - 1; EntryTimeEnd = ParamOptimize("Entry Time End (Minutes)", 25, 10, 180, 5); EntryBarEnd = floor(EntryTimeEnd/TimeFrameInMinutes) - 1; EntryBarEnd = IIf(EntryBarEnd < EntryBarStart, EntryBarStart, EntryBarEnd); //--Plot Price Candle Chart SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", colorBlack, styleNoTitle | GetPriceStyle() ); //--New Day & Time. End Day & Time . End Day & Time is null till end of day 1 NewDay = (Day()!= Ref(Day(), -1)) OR BarIndex() == 0; printf("\n NewDay : " + NewDay ); EndDay = (Day()!= Ref(Day(), 1)); printf("\n EndDay : " + EndDay ); FirstBarTime = ValueWhen(NewDay,TimeNum(),1); EndTime = ValueWhen(EndDay,TimeNum(),1); SquareOffTime = EndTime; //--Calculate ORB, and SL HighestOfDay = HighestSince(NewDay,H,1); LowestOfDay = LowestSince(NewDay,L,1); BarsSinceNewDay = BarsSince(NewDay); ORBH = ValueWhen(BarsSinceNewDay<=EntryBarStart,HighestOfDay ,1) * (1 + (EntryBufferPct/100)); ORBL = ValueWhen(BarsSinceNewDay<=EntryBarStart,LowestOfDay ,1) * (1 - (EntryBufferPct/100)); ORBHSL = ORBH * (1-(SLPct/100)); //ORBHSL = ORBL; ORBLSL = ORBL * (1+(SLPct/100)); //ORBLSL = ORBH; ORBHTarget = ORBH * (1+(TargetPct/100)); ORBLTarget = ORBL * (1-(TargetPct/100)); //--Find Buy, Sell, Short & Cover Signals BuySignal = (H >= ORBH) AND (BarsSinceNewDay > EntryBarStart); printf("\nBuySignal : " + BuySignal ); ShortSignal = (L <= ORBL) AND (BarsSinceNewDay > EntryBarStart) ; printf("\nShortSignal : " + ShortSignal ); BarsSinceLastBuySignal = (BarsSince(Ref(BuySignal,-1)) + 1); BarsSinceLastShortSignal = (BarsSince(Ref(ShortSignal,-1)) + 1); BarsSinceLastEntrySignal = Min(BarsSinceLastBuySignal, BarsSinceLastShortSignal); BothEntrySignalsNull = IsNull(BarsSinceLastBuySignal) AND IsNull(BarsSinceLastShortSignal); //true for start of Day 1 printf("\n\nBarsSinceNewDay : " + BarsSinceNewDay ); printf("\n BarsSinceLastEntrySignal : " + BarsSinceLastEntrySignal); Buy = (H >= ORBH) AND (BarsSinceNewDay > EntryBarStart) AND (BarsSinceNewDay <= EntryBarEnd) AND ((BarsSinceNewDay < BarsSinceLastEntrySignal) OR BothEntrySignalsNull ); Sell = (L <= ORBHSL) OR (H >= ORBHTarget) OR (TimeNum() > SquareOffTime-1) AND (BarsSinceNewDay > BarsSinceLastBuySignal); Short = (L <= ORBL) AND (BarsSinceNewDay > EntryBarStart) AND (BarsSinceNewDay <= EntryBarEnd) AND ((BarsSinceNewDay < BarsSinceLastEntrySignal) OR BothEntrySignalsNull ); Cover = (H >= ORBLSL) OR (L <= ORBLTarget) OR (TimeNum() > SquareOffTime-1) AND (BarsSinceNewDay > BarsSinceLastShortSignal); printf("\nBuy : " + Buy ); printf("\nSell : " + Sell ); printf("\nShort : " + Short ); printf("\nCover : " + Cover ); //--Handle if ORB broken both sides on same bar //--And remove duplicate Sell & Cover signals, since ExRem did not work as needed when Buy & Sell on same bar orbBothSides = IIf(Buy AND Short, 1, 0); Buy = IIf(orbBothSides AND C <= O, 0, Buy); Short = IIf(orbBothSides AND C > O, 0, Short); Sell = IIf(orbBothSides AND C > O AND (L <= ORBHSL), 1, Sell); Sell = IIf((BarsSince(Buy) < (BarsSince(Ref(Sell,-1))+1)) OR (BarsSince(Buy) AND IsNull(BarsSince(Ref(Sell,-1)))),Sell,0); Cover = IIf(orbBothSides AND C <= O AND (H >= ORBLSL), 1, Cover); Cover = IIf((BarsSince(Short) < (BarsSince(Ref(Cover,-1))+1)) OR (BarsSince(Short) AND IsNull(BarsSince(Ref(Cover,-1)))),Cover,0); printf("\n\norbBothSides : " + orbBothSides); printf("\nBuy : " + Buy ); printf("\nSell : " + Sell ); printf("\nShort : " + Short ); printf("\nCover : " + Cover ); //--Special Condition for 18 & 19 May 2009 for the Indian Market Buy =IIf(DateNum()==1090518 OR (DateNum()==1090519 AND NewDay),0,Buy ); Sell =IIf(DateNum()==1090518 OR (DateNum()==1090519 AND NewDay),0,Sell ); Short =IIf(DateNum()==1090518 OR (DateNum()==1090519 AND NewDay),0,Short ); Cover =IIf(DateNum()==1090518 OR (DateNum()==1090519 AND NewDay),0,Cover ); //--Set prices BuyPrice = IIf(Buy, ORBH, Null); SellPrice = IIf(Sell, IIf(H >= ORBHTarget, ORBHTarget, Max(ORBHSL, L)), Null); ShortPrice = IIf(Short, ORBL, Null); CoverPrice = IIf(Cover, IIf(L <= ORBLTarget, ORBLTarget, Min(ORBLSL, H)), Null); //--Plot ORB, and SL Plot(ORBHSL,"",colorRed,styleDashed); Plot(ORBLSL,"",colorRed,styleDashed); Plot(IIf(TargetPct == MaxTarget, Null, ORBHTarget),"",colorGreen,styleDashed); Plot(IIf(TargetPct == MaxTarget, Null, ORBLTarget),"",colorGreen,styleDashed); PlotOHLC( ORBL, ORBH, ORBL, ORBH, "", colorYellow, styleCloud); //--Plot Signals shape1 = Buy * shapeUpArrow + Sell * shapeDownArrow; PlotShapes( shape1, IIf( Buy, colorGreen, colorGreen), 0, IIf( Buy, Low, High ) ); shape2 = Cover * shapeUpArrow + Short * shapeDownArrow; PlotShapes( shape2, IIf( Cover, colorRed, colorRed), 0, IIf( Cover, Low, High ) ); GraphXSpace = 5; //--Restore time frame TimeFrameRestore(); _SECTION_END();