Dear all
I have tested a slight variation on the them of my previously described strategy on short TF.
This time I took a very long timeseries, used Daily timeframe and modified the exit strategy in term of number of bars, all is optimized with Reiner’s seasonal parameters
Although the return of 180% with a drawdown of ~20k on a such a long timeseries is not great, I though it was worth posting because of the ability of this strategy to survive all the 1998/2001/2008 shocks and because it’s relative smoothness.
Any idea to reduce the drawdown even more would be greatly appreciated.
Best Regards
Francesco
// DAX(mini) - IG MARKETS
// TIME FRAME 1Day
// SPREAD 1.0 Point
DEFPARAM CumulateOrders = False
//DEFPARAM FLATBEFORE =090000
//DEFPARAM FLATAFTER =210000
golong = 1
goshort = 1
exitafternbars =1 // the strategy has an exit strategy of the type n bars
// variables optimized
adxvallong = 36 // set the adx value for long position under which the strategy is mean reverting and above which the strategy is breakout
atrmaxlong = 100//set the max vol accetable for long position
adxvalshort = 24// set the adx value for short poistions under which the strategy is mean reverting and above which the strategy is breakout
atrmaxshort = 200//set the max vol acceptable for short positions
along= 30//number of cons bar for a long trade
mlong = 1// sets the atr multiplier to enter into a mean reverting strategy for long positions
nlong = 1//sets the atr multiplier to enter into a breakout strategy for long positions
ashort=5//number of cons bars for a short trade
mshort = 1//sets the atr multiplier to enter into a mean reverting strategy for short positions
nshort = 2//sets the atr multiplier to enter into a breakout strategy for short positions
//
vollongok = atr<atrmaxlong
volshortok = atr<atrmaxshort
brekoutlong = marketregimeindicator>adxvallong
meanreversionlong = marketregimeindicator <adxvallong
brekoutshort = marketregimeindicator>adxvalshort
meanreversionshort = marketregimeindicator<adxvalshort
adxperiod = 14
atrperiod = 14
marketregimeindicator = adx[adxperiod]
atr = AverageTrueRange[atrperiod]
positionshort = round(1000/atr) //define the size of short positions
positionlong = saisonalpatternmultiplier*round(1000/atr/2.16666) // define the size of long positions
// define saisonal position multiplier for each month 1-15 / 16-31 (>0 - long / <0 - short / 0 no trade)
ONCE January1 = 3 //0 risk(3)
ONCE January2 = 0 //3 ok
ONCE February1 = 3 //3 ok
ONCE February2 = 3 //0 risk(3)
ONCE March1 = 3 //0 risk(3)
ONCE March2 = 2 //3 ok
ONCE April1 = 3 //3 ok
ONCE April2 = 3 //3 ok
ONCE May1 = 1 //0 risk(1)
ONCE May2 = 1 //0 risk(1)
ONCE June1 = 1 //1 ok 2
ONCE June2 = 2 //3 ok
ONCE July1 = 3 //1 chance
ONCE July2 = 2 //3 ok
ONCE August1 = 2 //1 chance 1
ONCE August2 = 3 //3 ok
ONCE September1 = 3 //0 risk(3)
ONCE September2 = 0 //0 ok
ONCE October1 = 3 //0 risk(3)
ONCE October2 = 2 //3 ok
ONCE November1 = 1 //1 ok
ONCE November2 = 3 //3 ok
ONCE December1 = 3 // 1 chance
ONCE December2 = 2 //3 ok
// set saisonal multiplier
currentDayOfTheMonth = Day
midOfMonth = 15
IF CurrentMonth = 1 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = January1
ELSE
saisonalPatternMultiplier = January2
ENDIF
ELSIF CurrentMonth = 2 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = February1
ELSE
saisonalPatternMultiplier = February2
ENDIF
ELSIF CurrentMonth = 3 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = March1
ELSE
saisonalPatternMultiplier = March2
ENDIF
ELSIF CurrentMonth = 4 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = April1
ELSE
saisonalPatternMultiplier = April2
ENDIF
ELSIF CurrentMonth = 5 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = May1
ELSE
saisonalPatternMultiplier = May2
ENDIF
ELSIF CurrentMonth = 6 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = June1
ELSE
saisonalPatternMultiplier = June2
ENDIF
ELSIF CurrentMonth = 7 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = July1
ELSE
saisonalPatternMultiplier = July2
ENDIF
ELSIF CurrentMonth = 8 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = August1
ELSE
saisonalPatternMultiplier = August2
ENDIF
ELSIF CurrentMonth = 9 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = September1
ELSE
saisonalPatternMultiplier = September2
ENDIF
ELSIF CurrentMonth = 10 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = October1
ELSE
saisonalPatternMultiplier = October2
ENDIF
ELSIF CurrentMonth = 11 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = November1
ELSE
saisonalPatternMultiplier = November2
ENDIF
ELSIF CurrentMonth = 12 THEN
IF currentDayOfTheMonth <= midOfMonth THEN
saisonalPatternMultiplier = December1
ELSE
saisonalPatternMultiplier = December2
ENDIF
endif
//long meanreversion
IF (abs(open-close) > (atr*mlong) and close < open and golong and vollongok and meanreversionlong) THEN
buy positionlong CONTRACTS AT MARKET
ENDIF
// long breakout
IF (abs(open-close) > (atr*nlong) and close > open and golong and vollongok and brekoutlong) THEN
buy positionlong CONTRACTS AT MARKET
ENDIF
//short meanrevesrion
IF (abs(open-close) > (atr*mshort) and close > open and goshort and volshortok and meanreversionshort) THEN
sellshort positionshort CONTRACTS AT MARKET
ENDIF
// short
IF (abs(open-close) > (atr*nshort) and close < open and goshort and volshortok and brekoutshort) THEN
sellshort positionshort CONTRACTS AT MARKET
ENDIF
if exitafternbars then
IF shortonmarket and BarIndex - TradeIndex >= ashort Then
exitshort positionshort contracts at Market
EndIF
endif
if exitafternbars then
IF longonmarket and BarIndex - TradeIndex >= along Then
sell positionlong contracts at Market
EndIF
endif
//set target profit p*atr
//set stop ploss l*atr