This is a 5 minute reversal breakout order (RBO) trading system indicator for intraday trading only.
I took the basic code from the net but have added many other parameters to make it more user friendly.
-you can change entry exit time
– Target and SL has been added
– Buffer zone is there for you to decide if you want to enter with some butter.
– Squares off your position at 3:05 Pm or you can choose your time of sq off.
Kindly let me know for any concerns you have.
- Only one word of caution – DO not apply in sideways stocks. Apply on high volatile scripts to get good results.
Regards,
SK

SetTradeDelays( 1, 1, 1, 1 ); //set trade delays at 1 bar openRoundLotSize = 40; // Define Round Lot Size of the Trading InstrumentSetPositionSize( 500, spsShares); // Define Fixed Trading SizeSetOption( "InitialEquity", 200000 );SetOption( "MinShares", 1 );SetOption( "MinPosValue", 1 ); // Enable Futures ModeSetOption( "FuturesMode", True);SetOption( "AllowPositionShrinking", True);SetOption( "ActivateStopsImmediately", False);SetOption( "ReverseSignalForcesExit", False);SetOption( "AllowSameBarExit", False);SetOption( "CommissionMode", 2 ); // Fixed Brokerage Commissions (Per Trade)SetOption( "CommissionAmount", 100 ); // Rs 100/Leg CommisionsSetOption( "InterestRate", 0 );SetOption( "MarginRequirement", 2 ); //Define Margin RequirementSetOption( "AccountMargin", 2 ); //Define Account Margin
functionParamOptimize( pname, defaultval, minv, maxv, step ){returnOptimize( pname,Param( pname, defaultval, minv, maxv, step ),minv, maxv, step );}
_SECTION_BEGIN( "Price");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", colorCustom11, styleNoTitle| GetPriceStyle() );_SECTION_END();
//////////////////////// DAY SEPERATOR ///////////////////////////////--Define all params_SECTION_BEGIN( "RBO System Parameters");EntryBufferPct = ParamOptimize( "Entry Buffer %", 0, 0, 15, 0.1 );SLPct = ParamOptimize( "SL %", 3, 0.25, 5, 0.25 );TargetPct = ParamOptimize( "Target %", 5, 0, 100, 0.25 );MaxTarget = 100;TargetPct = IIf( TargetPct == 0, MaxTarget, TargetPct );_SECTION_END();
_SECTION_BEGIN( "RBO System Signals & Time");n = 1; //ParamOptimize("Number of B/S to Generate in a Day",1,1,1,1);ST = ParamOptimize( "Entry Start Time", 0915, 0915, 1445, 1 );ET = ParamOptimize( "Entry End Time", 1430, 1010, 1530, 1 );FTime = ParamOptimize( "Exit for the Day @", 1505, 1445, 1530, 1 );tn = TimeNum();TimeOK = tn >= ( ST * 100 ) ANDtn <= ( ET * 100 );FT = tn >= ( FTime * 100 );_SECTION_END();
_SECTION_BEGIN( "RBO System");//--New Day & Time. End Day & Time . End Day & Time is null till end of day 1NewDay = ( Day() != Ref( Day(), -1 ) ) ORBarIndex() == 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;
Day1 = TimeFrameGetPrice( "O", inDaily); // current day open
//Calculate ORB and Sl for 5Min RBOHighestOfDay = HighestSince( NewDay, H, 1 );LowestOfDay = LowestSince( NewDay, L, 1 );ORBH = ValueWhen( NewDay, HighestOfDay , 1 ) * ( 1 + ( EntryBufferPct / 100 ) );ORBL = ValueWhen( NewDay, LowestOfDay , 1 ) * ( 1 - ( EntryBufferPct / 100 ) );
//--Find Buy, Short, Sell & Cover SignalsBarsSinceNewDay = BarsSince( NewDay );BuySignal = ( H>= ORBH );printf( "\nBuySignal : "+ BuySignal );ShortSignal = ( L<= ORBL );printf( "\nShortSignal : "+ ShortSignal );BarsSinceLastBuySignal = ( BarsSince( Ref( BuySignal, -1 ) ) + 1 );BarsSinceLastShortSignal = ( BarsSince( Ref( ShortSignal, -1 ) ) + 1 );BarsSinceLastEntrySignal = Min( BarsSinceLastBuySignal, BarsSinceLastShortSignal );BothEntrySignalsNull = IsNull( BarsSinceLastBuySignal ) ANDIsNull( BarsSinceLastShortSignal ); //true for start of Day 1Daych = Day() != Ref( Day(), -1 );
B1 = ( O>= ORBH ) AND( C>= ORBH ) ANDTimeOK;S1 = ( O<= ORBL ) AND( C<= ORBL ) ANDTimeOK;
Buy= B1; // AND B2;Short= S1;// AND S2;
Buy= BuyANDSum( Buy, BarsSince( newday ) + 1 ) <= N ;Short= ShortANDSum( Short, BarsSince( newday ) + 1 ) <= N ;
BuyPrice= IIf( Buy, Max( ORBH, O), Null);ShortPrice= IIf( Short, Min( ORBL, Open), Null);
ORBHSL = ValueWhen( BuyPrice, BuyPrice) * ( 1 - ( SLPct / 100 ) );ORBLSL = ValueWhen( ShortPrice, ShortPrice) * ( 1 + ( SLPct / 100 ) );ORBHTarget = ValueWhen( BuyPrice, BuyPrice) * ( 1 + ( TargetPct / 100 ) );ORBLTarget = ValueWhen( ShortPrice, ShortPrice) * ( 1 - ( TargetPct / 100 ) );
Sell= FT ORL<= ORBHSL ORH>= ORBHTarget OR( ( TimeNum() > SquareOffTime - 1 ) AND( BarsSinceNewDay > BarsSinceLastBuySignal ) );Cover= FT ORH>= ORBLSL ORL<= ORBLTarget OR( ( TimeNum() > SquareOffTime - 1 ) AND( BarsSinceNewDay > BarsSinceLastShortSignal ) );
Buy= ExRem( Buy, ShortORdaych ORSell);Short= ExRem( Short, BuyORdaych ORCover);
SellPrice= IIf( Sell, IIf( H>= ORBHTarget, ORBHTarget, Max( ORBHSL, L) ), Null);CoverPrice= IIf( Cover, IIf( L<= ORBLTarget, ORBLTarget, Min( ORBLSL, H) ), Null);
//--Handle if ORB broken both sides on same bar//--And remove duplicate Short & Cover signals, since ExRem did not work as needed when Buy & Short on same barorbBothSides = IIf( BuyANDShort, 1, 0 );Buy= IIf( orbBothSides ANDC<= O, 0, Buy);Short= IIf( orbBothSides ANDC> O, 0, Short);Sell= IIf( orbBothSides ANDC> OAND( L<= ORBHSL ), 1, Sell);Sell= IIf( ( BarsSince( Buy) < ( BarsSince( Ref( Sell, -1 ) ) + 1 ) ) OR( BarsSince( Buy) ANDIsNull( BarsSince( Ref( Sell, -1 ) ) ) ), Sell, 0 );Cover= IIf( orbBothSides ANDC<= OAND( H>= ORBLSL ), 1, Cover);Cover= IIf( ( BarsSince( Short) < ( BarsSince( Ref( Cover, -1 ) ) + 1 ) ) OR( BarsSince( Short) ANDIsNull( BarsSince( Ref( Cover, -1 ) ) ) ), Cover, 0 );
dist = 3.5 * ATR( 10 );dist1 = 2.5 * ATR( 10 );
for( i = 0; i < BarCount; i++ ){if( Buy[i] ){PlotText( ""+ C[ i ], i, C[ i ] - dist[i], colorWhite, colorBlue);}
if( Short[i] ){PlotText( ""+ C[ i ], i, C[ i ] + dist1[i], colorRed, colorYellow);}}
dist = -2 * ATR( 10 );dist1 = -5.5 * ATR( 10 );
for( i = 0; i < BarCount; i++ ){if( Sell[i] ){PlotText( ""+ C[ i ], i, C[ i ] - dist[i], colorCustom11, colorBlack);}
if( Cover[i] ){PlotText( ""+ C[ i ], i, C[ i ] + dist1[i], colorYellow, colorBlack);}}
Plot( ORBH, "", colorBlue, styleDots);Plot( ORBL, "", colorRed, styleDots);PlotOHLC( ORBL, ORBH, ORBL, ORBH, "", colorGrey40, styleCloud);
/* Plot Buy and Short Signal Arrows */PlotShapes( IIf( Buy, shapeSquare, shapeNone), colorGreen, 0, L, Offset = -40 );PlotShapes( IIf( Buy, shapeSquare, shapeNone), colorLime, 0, L, Offset = -50 );PlotShapes( IIf( Buy, shapeUpArrow, shapeNone), colorWhite, 0, L, Offset = -45 );PlotShapes( IIf( Short, shapeSquare, shapeNone), colorRed, 0, H, Offset = 40 );PlotShapes( IIf( Short, shapeSquare, shapeNone), colorOrange, 0, H, Offset = 50 );PlotShapes( IIf( Short, shapeDownArrow, shapeNone), colorWhite, 0, H, Offset = -45 );
PlotShapes( IIf( Cover, shapeSmallUpTriangle, shapeNone), colorYellow, 0, L, Offset = -40 );PlotShapes( IIf( Sell, shapeSmallDownTriangle, shapeNone), colorWhite, 0, H, Offset = -40 );
_SECTION_END();
//////////////////////// DAY SEPERATOR /////////////////////////////_SECTION_BEGIN( "Day Seperator, EOD, Current Price");nday = IIf( Day() != Ref( Day(), -1 ), 1, 0 );Plot( nday, "", 3, styleHistogram| styleDashed| styleNoLabel| styleOwnScale, 0, 1 );_SECTION_END();
////////////////////PLOT NAME STRATEGY NAME, PRICE, FULL NAME ETC ON CHART//////////////////_SECTION_BEGIN( "Get Strategy Name on Chart");x = 1;y = 1;
GfxGradientRect( 1, 1, 1400, 35, colorGrey50, colorDarkGrey);GfxSetBkMode( 0 );
GfxSelectFont( "Comic Sans MS", 10, 500, False);GfxSetTextColor( colorYellow);GfxTextOut( Interval( 2 ), x + 25, y + 20 );
GfxSelectFont( "Tahoma", 10, 1200, False);GfxSetTextColor( colorWhite);GfxTextOut( "RBO With TGT & SL", x + 90, y + 20 );
GfxSelectFont( "Arial", 11, 50, False);GfxSetTextColor( colorWhite);GfxTextOut( Date(), x + 325, y + 20 );
GfxSelectFont( "Tahoma", 13, 750, False);GfxSetTextColor( colorGold);GfxTextOut( Name(), x + 485, y + 18 );
GfxSelectFont( "Tahoma", 13, 750, False);GfxSetTextColor( colorLavender);GfxTextOut( FullName(), x + 675, y + 18 );
GfxSelectFont( "Comic Sans MS", 16, 525, False);GfxSetTextColor( colorYellow);GfxTextOut( " "+ C, x + 925, y + 10 );
YC = TimeFrameGetPrice( "C", inDaily, -1 );DD = Prec( C- YC, 2 );xx = Prec( ( DD / YC ) * 100, 2 );PercH = C> YC;PercL = C< YC;
GfxSelectFont( "Comic Sans MS", 10, 525, False);GfxSetTextColor( colorYellow);GfxTextOut( ""+ DD + " ("+ xx + "%)", x + 925, y + 38 );
_SECTION_END();
Leave a Reply
You must be logged in to post a comment.