Welcome to this post, where we’ll delve into an effective trading strategy known as the Volume Breakout Trading Strategy. This strategy identifies stocks that break out of their price ranges with significant trading volumes. It’s a straightforward approach that doesn’t rely on complex indicators but has consistently delivered impressive profits. This strategy is applicable to a wide range of highly liquid and high-beta stocks, as proven through our testing. We’ve even coded an AFL (AmiBroker Formula Language) for this strategy and rigorously back-tested it on BankNifty futures traded at the NSE. The results show a compounded annual return of around 23% over the last 11 years of backtesting.
If you’re interested in learning how to code in AFL and create your trading systems, you can find a helpful guide here.
A Quick Overview of the AFL for the Volume Breakout Trading Strategy
Parameter | Value |
Preferred Time-frame | Daily |
Indicators Used | EMA |
Buy Condition |
|
Short Condition |
|
Sell Condition |
|
Cover Condition |
|
Stop Loss | 3% |
Targets | 30% |
Position Size | 120 Quantities |
Initial Equity | 200,000 |
Brokerage | 100 per order |
Margin | 10% |
AFL Code
//------------------------------------------------------
//
// Formula Name: Volume Breakout Trading System
// Website: zerobrokerageclub.com
//------------------------------------------------------
_SECTION_BEGIN("Volume Breakout Trading System");
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 ) ) ));
//Initial Parameters
SetTradeDelays( 1, 1, 1, 1 );
SetOption( "InitialEquity", 200000);
SetOption("FuturesMode" ,True);
SetOption("MinShares",1);
SetOption("CommissionMode",2);
SetOption("CommissionAmount",100);
SetOption("AccountMargin",10);
SetOption("RefreshWhenCompleted",True);
SetPositionSize(120,spsShares);
SetOption( "AllowPositionShrinking", False );
BuyPrice=Open;
SellPrice=Open;
ShortPrice=Open;
CoverPrice=Open;
//Buy-Sell Logic
range=High-Low;
VolLookback=Param("VolLookback",50,10,100,10);
MALookback=Param("MALookback",20,10,100,10);
Buy = Volume>=Ref(Volume,-1)*1.5 AND Close>MA(Close,MALookback) AND Volume>MA(Volume,VolLookback) ;
Short =Volume>=Ref(Volume,-1)*1.5 AND CloseMA(Volume,VolLookback);
Cover = Buy;
Sell=Short;
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
printf("\nBuy : " + Buy );
printf("\nSell : " + Sell );
printf("\nShort : " + Short );
printf("\nCover : " + Cover );
printf("\nVolume : " + Volume );
StopLoss=Param("SL",3,1,10,1);
Target=Param("Target",30,5,40,5);
ApplyStop(Type=0,Mode=1,Amount=StopLoss);
ApplyStop(Type=1,Mode=1,Amount=Target);
Plot( Close, "Price", colorWhite, styleCandle );
Plot(MA(Close,MALookback),"",colorYellow);
/* Plot Buy and Sell 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(Cover, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);
PlotShapes(IIf(Cover, shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);
PlotShapes(IIf(Cover, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0,H, 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);
_SECTION_END();
AFL Screenshot
Backtest Report for the Volume Breakout Trading Strategy
Parameter | Value |
BankNifty | |
Initial Capital | 200,000 |
Final Capital | 1,973,764.04 |
Scrip Name | NSE Banknifty |
Backtest Period | 25-Aug-2005 to 17-June-2016 |
Timeframe | Daily |
Net Profit % | 886.88% |
Annual Return % | 23.09% |
Number of Trades | 78 |
Winning Trade % | 37.18% |
Average Holding Period | 19.28 periods |
Maximum Consecutive Losses | 10 |
Maximum System % Drawdown | -34.03% |
Maximum Trade % Drawdown | -75.56% |
The backtest report reveals that the drawdown is relatively high. To mitigate this risk, you can implement effective Risk Management strategies. You can also download the comprehensive backtest report here.
Equity Curve
Profit Table
This volume breakout trading strategy has proven to be profitable in all years except for 2015 and 2012.
Additional AmiBroker Settings for Backtesting
For more accurate backtesting, navigate to Symbol–>Information and specify the lot size and margin requirements. In the screenshot below, you can see a lot size of 40 and a margin requirement of 10% for NSE BankNifty:
2 Comments