AFL of the week: A simple Crude Oil Trading Strategy

On our reader’s demand, we have developed a Simple strategy to trade on Crude Oil futures in MCX. This is a Trend following swing trading strategy which takes positions on daily timeframe. Bollinger Bands is used as an indicator to determine Trend breakout. The number of trades generated using this strategy is very low which makes it easier to trade. However, max drawdown is on a little higher side, so risk management is necessary. This Crude oil Trading Strategy is specifically developed for beginners in commodity markets. Read below for the strategy overview and AFL details.

 Please visit Trading Tuitions Academy to learn AFL coding and create your own Trading systems.

AFL Overview

ParamterValue
Preferred TimeframeDaily
Indicators UsedBollinger Band
Buy ConditionClosing price of the day is greater than upper band of Bollinger Band.
Short ConditionClosing price of the day is less than lower band of Bollinger Band.
Sell ConditionSame as Short
Cover ConditionSame as Buy
Stop Loss1%
TargetsNo fixed target
Position Size50% of initial equity
Initial Equity200000
Brokerage100 per order
Margin20%

AFL Code

//------------------------------------------------------
//
//  Formula Name:    Crude Oil Trading Startegy
//  Author/Uploader: Trading Tuitions
//  E-mail:          support@tradingtuitions.com
//  Website:         www.tradingtuitions.com
//------------------------------------------------------

_SECTION_BEGIN("Crude Oil Trading Startegy");

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(50,spsPercentOfEquity);
SetOption( "AllowPositionShrinking", True );
BuyPrice=Open;
SellPrice=Open;
ShortPrice=Open;
CoverPrice=Open;

Plot( Close, "Price", colorWhite, styleCandle );
Periods = param("Periods", 40, 5, 100, 5 );
Width = param("Width", 1, 1, 10, 1 );
Color = ParamColor("Color", colorLightGrey );
Style = ParamStyle("Style", styleLine | styleNoLabel ) | styleNoLabel;
Plot( bbt = BBandTop( Close, Periods, Width ), "BBTop" + _PARAM_VALUES(), Color, Style ); 
Plot( bbb = BBandBot( Close, Periods, Width ), "BBBot" + _PARAM_VALUES(), Color, Style ); 
PlotOHLC( bbt, bbt, bbb, bbb, "", ColorBlend( Color, GetChartBkColor(), 0.8 ), styleNoLabel | styleCloud | styleNoRescale, Null, Null, Null, -1 );

Buy=Close>=BBandTop( Close, Periods, Width );
Short=Close<=BBandBot( Close, Periods, Width );
Sell=Short;
Cover=Buy;

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 );  

Stoploss=Optimize("SL",1,1,5,1);

ApplyStop(Type=0,Mode=1,Amount=StopLoss);

/* 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);


PlotGrid(0, colorLightGrey);
PlotGrid(25, colorLightGrey);
PlotGrid(-25, colorLightGrey);
_SECTION_END();

AFL Screenshot

Crude Oil AFL

Backtest Report

 ParamterValue
  Fixed Position Size
Initial Capital 200000
Final Capital581072
Scrip NameMCX Crude Oil Futures
Backtest Period16-Mar-2015 to 03-June-2016
TimeframeDaily
Net Profit %190.54%
Annual Return %111.72%
Number of Trades8
Winning Trade %37.50%
Average holding Period27.50 periods
Max consecutive losses3
Max system % drawdown-26.97%
Max Trade % drawdown-42.07%

This Crude Oil Trading strategy has little higher drawdown figures. But it would be always profitable on the long term. Download the detailed backtest report here.

Equity Curve

Crude Oil_Equity Curve

Additional Amibroker settings for backtesting

Goto Symbol-->Information, and specify the lot size and margin requirement. The below screenshot shows lot size of 100 and margin requirement of 20% for Crude Oil Futures:

Crude Oil_Symbol Information

Disclaimer:

All the AFL's posted in this section are for learning purpose. Trading Tuitions does not necessarily own these AFL's and we don't have any intellectual property rights on them. We might copy useful AFL's from public forums and post it in this section in a presentable format. The intent is not to copy anybody's work but to share knowledge. If you find any misleading or non-reproducible content then please inform us at support@tradingtuitions.com

Related Posts

20 Comments

  1. Greetings.
    Good to see ur efforts in commodity. Myself experienced that, commodities future trading are much fruitful to build capital than NF & BNF. Forget individual stock buying & holding. These are very lazy game & not my cup of tea.
    Bye the way, I request u to make this system in Excel, as most of the individual traders still do not have access to Amibroker. And fixed numerical entry & exit point shown in Excel cell gives much more control over emotion, than seeing a chart. 😉
    Thanks in advance.

    • Thanks for your suggestion Gautam. Are you requesting the same system to be coded in Excel or do you have any other recommendation?

  2. Another suggestion is: If we make some change in short/long covering by crossover of price with 20 SMA, than just swinging the position wrt BB. Hope this will give better results. Regards.

  3. @Admin: Yes same system in Excel, with a little change of exit current position when price crosses 20 SMA.
    Then re entry with BB signal as said in system.
    (IMO, this exit rule can give better result. Ur expertise is welcome.)

  4. Can we trade this strategy for intraday. If its works in intraday which time frame suitable like 5 Min, 15 Min

    • Hi Anandhan,

      No, this is a Swing Trading strategy. Intraday trading is not recommended.

      • Ok, Thanks for your hope sir, Any intraday strategy For crudeoil or how to get the open, high, low excel system in Mcx

  5. Hi admin,This Crude Oil Trading has sniper technique ?
    I am confuse name code which i saw in youtube name crude sniper.
    This code use in time frame?.
    Thank you for share.

  6. Can you share the strategy result for the last 10 years. You can use crude spot data.

  7. Hi I am new in commodities. Can u detail out some steps in this strategy for me to understand. Pls

  8. Hi admin.. thanks for helping out beginners like me. I have a question. If possible can you please back test for more years? So that I can directly get into trade than too much thinking. 🙂

    • Hi Ram,

      Even if I backtest on all available data, it would not assure 100% assurance on future success rate. Please do paper trading for few days before going live

  9. Periods = param(“Periods”, 40, 5, 100, 5 );
    Width = param(“Width”, 1, 1, 10, 1 );

    can you pls explain these two lines? is that 40 sma and 100 sma??

      • Thanks for the reply.. However I need some more help. Are there 4 different width and period parameters? would like to understand the system properly before using it.

Leave a Reply

Your email address will not be published. Required fields are marked *