Firstly, a big thank you to Nicolas for this great site and for originally introducing us to the CAC Breakout using the same code here.
I set about testing this strategy on other markets due to the fact you can backtest 8 years of data with 200,000 units on the 15Min time-frame. The other massive plus is no fake profits and only 26, 0 bars in 1500 trades! 🙂
In this version I am using a fixed position size but you can activate the re-invest system if you are happy with that. It makes for an interesting ride!
I stuck to the rules of not over optimising/curve fitting by using an IN/OUT sample as documented here. This ran from July 2008 – Jan 2014.
The results above are £1 Per Point, £1000 Start and 1.5 Spread.
I am live trading this with real money with minimum stakes to test. IG have now reduced the PPP from £2 to £1 just recently. This is very handy for forward live testing.
All times in the code are UK so please adjust to your timezone.
I have some more of these ported to other markets but need to spend a little more time getting them right before posting in the library. Expect them soon.
I have not had enough time to test different time frames. Maybe I will try that next if time allows.
Good luck and enjoy your weekend.
//-------------------------------------------------------------------------
// Main code : Breakout ProOrder EN DAX
//-------------------------------------------------------------------------
// We do not store data until the system starts.
// If it is the first day that the system is launched and if it is afternoon,
// it will wait until the next day for defining sell and buy orders.
//All times are UK Time Zone
DEFPARAM PreLoadBars = 0
// Position is closed at 20h00 PM
DEFPARAM FlatAfter = 200000
// No new position will be initiated after the 16:00PM candlestick. Any existing orders cancelled at 16:30pm
LimitHour = 161500
// Market scan begin with the 15 minute candlestick that closed at 8:30AM
StartHour = 081500
// The 24th-31st days of December will not be traded because the market closes early.
IF (Month = 5 AND Day = 1) OR (Month = 12 AND (Day = 24 OR Day = 25 OR Day = 26 OR Day = 30 OR Day = 31)) THEN
TradingDay = 0
ELSE
TradingDay = 1
ENDIF
// Variables that would be adapted to your preferences
if time = 074500 then
//PositionSize = max(1,1+ROUND((strategyprofit-1000)/1000)) //gain re-invest trade volume
PositionSize = 1 //constant trade volume over the time
endif
MaxAmplitude = 170
MinAmplitude = 22
OrderDistance = 9
PourcentageMin = 19
// Variable initilization once at system start
ONCE StartTradingDay = -1
// Variables that can change in intraday are initiliazed
// at first bar on each new day
IF (Time <= StartHour AND StartTradingDay <> 0) OR IntradayBarIndex = 0 THEN
BuyTreshold = 0
SellTreshold = 0
BuyPosition = 0
SellPosition = 0
StartTradingDay = 0
ELSIF Time >= StartHour AND StartTradingDay = 0 AND TradingDay = 1 THEN
// We store the first trading day bar index
DayStartIndex = IntradayBarIndex
StartTradingDay = 1
ELSIF StartTradingDay = 1 AND Time <= LimitHour THEN
// For each trading day, we define each 15 minutes
// the higher and lower price value of the instrument since StartHour
// until the buy and sell tresholds are not defined
IF BuyTreshold = 0 OR SellTreshold = 0 THEN
HighLevel = Highest[IntradayBarIndex - DayStartIndex + 1](High)
LowLevel = Lowest [IntradayBarIndex - DayStartIndex + 1](Low)
// Spread calculation between the higher and the
// lower value of the instrument since StartHour
DaySpread = HighLevel - LowLevel
// Minimal spread calculation allowed to consider a significant price breakout
// of the higher and lower value
MinSpread = DaySpread * PourcentageMin / 100
// Buy and sell tresholds for the actual if conditions are met
IF DaySpread <= MaxAmplitude THEN
IF SellTreshold = 0 AND (Close - LowLevel) >= MinSpread THEN
SellTreshold = LowLevel + OrderDistance
ENDIF
IF BuyTreshold = 0 AND (HighLevel - Close) >= MinSpread THEN
BuyTreshold = HighLevel - OrderDistance
ENDIF
ENDIF
ENDIF
// Creation of the buy and sell orders for the day
// if the conditions are met
IF SellTreshold > 0 AND BuyTreshold > 0 AND (BuyTreshold - SellTreshold) >= MinAmplitude THEN
IF BuyPosition = 0 THEN
IF LongOnMarket THEN
BuyPosition = 1
ELSE
BUY PositionSize CONTRACT AT BuyTreshold STOP
ENDIF
ENDIF
IF SellPosition = 0 THEN
IF ShortOnMarket THEN
SellPosition = 1
ELSE
SELLSHORT PositionSize CONTRACT AT SellTreshold STOP
ENDIF
ENDIF
ENDIF
ENDIF
// Conditions definitions to exit market when a buy or sell order is already launched
IF LongOnMarket AND ((Time <= LimitHour AND SellPosition = 1) OR Time > LimitHour) THEN
SELL AT SellTreshold STOP
ELSIF ShortOnMarket AND ((Time <= LimitHour AND BuyPosition = 1) OR Time > LimitHour) THEN
EXITSHORT AT BuyTreshold STOP
ENDIF
// Maximal risk definition of loss per position
// in case of bad evolution of the instrument price
SET STOP PLOSS MaxAmplitude
//SET TARGET PPROFIT 190