Francesco78

Dax adaptable strategy Breakout/Mean reversion

Category: Strategies By: Francesco78 Created: April 22, 2017, 5:30 PM
April 22, 2017, 5:30 PM
Strategies
22 Comments
Dax adaptable strategy Breakout/Mean reversion

Dear all

I have elaborated a little over an  idea originally posted in the forum by Bjoern posted as True Range Breakout EUR/USD.

I applied to the Dax with the additional feature of switching from a breakout to a mean reversion strategy depending on some optimized value of the ADX indicator.

The strategy is a breakout strategy when the adx is above a certain value and a mean reverting strategy when ADX value is below that same value.

I have optimized it on several time frame and the results look quite promising, it would be great if someone think of a better way of discriminate between range trading vs trending phases.  I have used the  popular ADX indicator, but I am sure there are more efficient way to look at phase transitions in market.

The results for different time frames are attached, together with the 30minutes code.

Best Regards

Francesco

DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE =080000
DEFPARAM FLATAFTER =210000
adxval = 20
ATRperiod = 12
adxperiod = 15
indicator1 = adx[adxperiod]
atr = AverageTrueRange[ATRperiod]

m = 3
n = 2
c1 = indicator1 <adxval
c2 = indicator1 >adxval

if c1 then
 // short
 IF (abs(open-close) > (atr*m) and close > open)   THEN
  sellshort  1 CONTRACTS AT MARKET
  //SET STOP pLOSS losses
  //SET TARGET pPROFIT profits
 ENDIF

 //long
 IF (abs(open-close) > (atr*m) and close < open)   THEN
  buy  1 CONTRACTS AT MARKET
  //SET STOP pLOSS losses
  //SET TARGET pPROFIT profits
 ENDIF
endif

if c2 then
 // long
 IF (abs(open-close) > (atr*n) and close > open and close> Dhigh(1))   THEN
  buy  1 CONTRACTS AT MARKET
  //SET STOP pLOSS losses
  //SET TARGET pPROFIT profits
 ENDIF

 //short
 IF (abs(open-close) > (atr*n) and close < open and close< Dlow(1))   THEN
  sellshort  1 CONTRACTS AT MARKET
  //SET STOP pLOSS losses
  //SET TARGET pPROFIT profits
 ENDIF
endif

 

Download
Filename: comparison.png
Downloads: 238
Download
Filename: dax1hr.png
Downloads: 196
Download
Filename: Dax1hrMNandBreakv2withseas.png
Downloads: 127
Download
Filename: dax_1hr-1.png
Downloads: 179
Download
Filename: Dax1hrMNandBreakv2.itf
Downloads: 484
Download
Filename: dax_1hr.png
Downloads: 215
Download
Filename: dax_15mins.png
Downloads: 270
Download
Filename: Dax30minMNandBreak.itf
Downloads: 553
Download
Filename: dax_10mins.png
Downloads: 310
Francesco78
Francesco78 Master
Code artist, my biography is a blank page waiting to be scripted. Imagine a bio so awesome it hasn't been coded yet.
Author’s Profile

Comments

Jan Wind
7 years ago
#

21.04.2019: I retested the strategy for the DAX 5 minutes , it works fine for 10.000 bars, but gives sloppy results for 100.000 bars. . . the gold is to find the additional setting where it better fits all market slopes for the DAX . . . .

JanWd
8 years ago
#

Thank you for the coding, it seems promising. FTSE gives for the short term (5 min) promising results, but as always reliability is the key, not sure about that.

JR1976
9 years ago
#

HI all , anyone test 200k bar for this great code ?

Francesco78
9 years ago
#

ok sounds good, you can put min size = 1 and go for the seasonable breakout too, also you can get rid of the seasonals to avoid variable position

Juan Salas
9 years ago
#

Hi Francesco,

Yes, this is pretty much the question. The system ask me a number of contracts the moment I go live. I have checked the backtest history and it match with the number of contracts I am putting in the box.

Bottomline, right now with my limited capital, I will stick to your Hammernegated and MeanReverting for oil, which it is more "understandable" for me, and I can place Stops Losses and control the number of contracts. The Seasonable Breakout is for "big boys" :) :), but I will try to come back to it later.

In any case, thanks so much for your answer and in the name of all those members who can't produce/code a decent equity curve yet.

Best,

Juan 

Francesco78
9 years ago
#

Hi Juan Salas and thank you very much for your undeserved compliments.

I'm not sure if I undertand correctly your question, if you refer to the fact that the sistem ask you the max position allowed before running the code live, it is just a form of extra security the system adopt. 

For this strategy, run a backtest and see how much is the max position that is taken in history, alternatively you can modify the code to a fixed size.

When it ask the question of max position, input what you think is your max tolerable size, if you instead decide to run the code with a fix position, just put this fix position in the system when it asks.

Hop that helps

Juan Salas
9 years ago
#

Hi Francesco,

First of all, congratulations for your work and thanks for your contributions. I am one of your strategies' most devoted follower.

As a beginner, it may seems a simple question. I am studying this code (Seasonal, nor Adaptable) and I can see that the number of positions are depending on the ATR and the Seasonal Index you give to the different months.

The thing is than when I place the strategy in the ProRealOrder, automatically it asks you how many contracts I want to place/order (example: 1), so when the strategy is triggered I can see that I just have one contract open.

Probably there is a logical answer that because, I am a beginner, don't reach to see, so I would appreciate it if you or anyone in this Forum could enlighten me about it.

Thanks in advance,

Juan  

Francesco78
9 years ago
#

These are the comparison with my lates version and yours, I think it improves by all the measures. So great! thank you again

 

JR1976
9 years ago
#

Ok sorry Francesco :-)

 

Francesco78
9 years ago
#

Ciao JR 

Francesco here not Ale :))

thanks so much for checking the code, I will have a look, unfortunately me too I dont have 200k backtest. 

In any case check the forum as I posted few variations of the code

Thank you!

Francesco78
9 years ago
#

Ciao JR 

Francesco here not Ale :))

thanks so much for checking the code, I will have a look, unfortunately me too I dont have 200k backtest

JR1976
9 years ago
#

Buon pomeriggio ALe,

ho notato che  posticipando la parte di codice che esegue il breakout alle 9.00 anziche alle 8.00 , si eliminano alcuni trade e il drawdown diminuisce notevolmente  , sarebbe  interessante verificare con un backtest più ampio ( io arrivo solo fino a  maggio 2016

ecco il codice  che ne pensi ?


DEFPARAM CumulateOrders = false
//DEFPARAM FLATBEFORE =080000  original
//DEFPARAM FLATBEFORE =090000 // TF 30 min IT's better starting at 9 o clock
DEFPARAM FLATAFTER =210000
startbreak = 90000
startrevert = 80000
adxval = 20
//adxval = 25
ATRperiod = 12
//adxperiod = 15
adxperiod = 15
indicator1 = adx[adxperiod]
atr = AverageTrueRange[ATRperiod]
//m = 3
//n = 2
m = 3
n = 2
c1 = indicator1 <adxval
c2 = indicator1 >adxval
if time  >= startrevert then
if c1 then
// short
IF (abs(open-close) > (atr*m) and close > open)   THEN
sellshort  1 CONTRACTS AT market
//trading = 0
//SET STOP pLOSS losses
//SET TARGET pPROFIT profits
ENDIF
//long
IF (abs(open-close) > (atr*m) and close < open)   THEN
buy  1 CONTRACTS AT  market
//SET STOP pLOSS losses
//SET TARGET pPROFIT profits
ENDIF
endif
endif
// new
//MM100 = Average[200](CLose)
///test
If time >= startbreak then
if c2 then
// long
IF (abs(open-close) > (atr*n) and close > open and close> Dhigh(1))   THEN
buy  1 CONTRACTS AT market
//trading = 0
//SET STOP pLOSS losses
//SET TARGET pPROFIT profits
ENDIF

//short
//if DCLose(1) < MM100 then
IF (abs(open-close) > (atr*n) and close < open and close< Dlow(1))  THEN
sellshort  1 CONTRACTS AT market
//SET STOP pLOSS losses
//trading = 1
endif
endif
endif

set stop ploss 250
//IF shortonmarket and trading = 1  and close<tradeprice - 20 then
//exitshort at market
//endif

Cosmic1
9 years ago
#

Will post in your forum thread.

Francesco78
9 years ago
#

Hi Cosmic1

Thank you for the time you have devoted to the strategy I posted first of all.

I was aware of the fact that the original code did not give nice results on a 200k bars backtest, as someone did the test in the section on the forum dedicated to this strategy. https://www.prorealcode.com/topic/dax-adaptable-strategy-breackoutmean-reversion/

What I think could be  would interesting peraps would be to try the 1hr version of the code whereby I have also added the seasonalities parameter used in pathfinder and navigator system.  I have also rewritten the code in a way that maybe could be more understandable . 

Maybe the fact that the strategy performs only from 2014 is structural or maybe some changes in the code can be made in order to make it simpler and less dependandt by optimization. 

 

// dax  - IG MARKETS
// TIME FRAME 1H
// SPREAD 1.0 PIPS



DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE =090000
DEFPARAM FLATAFTER =210000

//highvolume = average[30](volume)<=volume//
//lowvolume = average[30](volume)>=volume

adxperiod = 14
atrperiod = 14
indicator1 = adx[adxperiod]
atr = AverageTrueRange[atrperiod]
//exitafternbars = 1

//// OPTIMIZED VARIABLES/////
adxval = 19
atrmin = 25
m = 3 // high vol coefficient for mean reversion
n = 2 //high vol coefficient for brekout
m1 = m-1 // low vol coefficient for mean reversion
n1 = n// low vol coefficient for breakout
///////////////////////////////////////


positionlong = saisonalpatternmultiplier*round(100/atr/2.1666)//define sixe of long trades
positionshort = round(100/atr)// define size of short trade
//a=5
lowvolenvironment = atr<atrmin //define lowvol environment use m1 and n1 as coefficient of movement
highvolenvironment = atr> atrmin //define highvol environment use m and n as coefficient of movement
meanrevertingenv = indicator1< adxval //define meanreverting environment
trendenv = indicator1 > adxval// define trendy environment


//////description of the possible combinations
sellhighvolmeanreverting = abs(open-close) > (atr*m) and close > open and meanrevertingenv and highvolenvironment
buyhighvolmeanreverting = abs(open-close) > (atr*m) and close < open and meanrevertingenv and  highvolenvironment
buyhighvoltrendy = abs(open-close) > (atr*n) and close > open and close> DOPEN(1) and trendenv and highvolenvironment
sellhighvoltrendy = abs(open-close) > (atr*n) and close < open and close< DOPEN(1) and trendenv and highvolenvironment
selllowvolmeanreverting = abs(open-close) > (atr*m1) and close > open and meanrevertingenv and lowvolenvironment
buylowvolmeanreverting = abs(open-close) > (atr*m1) and close < open and meanrevertingenv and lowvolenvironment
buylowvoltrendy = abs(open-close) > (atr*n1) and close > open and trendenv and lowvolenvironment
selllowvoltrendy = abs(open-close) > (atr*n1) and close < open and trendenv and lowvolenvironment
////////////////////////////////////////////////////////



// 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
IF (buyhighvolmeanreverting or buyhighvoltrendy or buylowvolmeanreverting or buylowvoltrendy )   THEN
buy positionlong CONTRACTS AT MARKET
ENDIF

// short
IF (sellhighvolmeanreverting or sellhighvoltrendy or selllowvolmeanreverting or selllowvoltrendy)   THEN
sellshort  positionshort CONTRACTS AT MARKET
endif




//if exitafternbars then
//IF longonmarket and BarIndex - TradeIndex = a Then
//sell  position contracts at Market
//EndIF

//IF shortonmarket and BarIndex - TradeIndex = a Then
//exitshort   position contracts at Market
//EndIF
//endif

 

bertrandpinoy
6 years ago
#

hello Francesco, are you still working on this strategy?

Cosmic1
9 years ago
#

https://ibb.co/bvrLGQ

Cosmic1
9 years ago
#

Hi Francesco,

I tried on 200k units but results were not good. Flat until your optimisation period then it gets going, which of course means curve fitted and little chance of success going forward. I'm not saying it can't work but it needs some IN/OUT sampling and WF testing to have a chance of success. If you need help with any of this then let me know. If you want me to test any other than 30min then let me know. Happy to help :) 

Francesco78
9 years ago
#

Enrique, I have added the Dax Seasonality on the 1hr TF and did some positioning modification.

I attach the code and the picture with the comparison.

Best Regards

Fr

// EUR/USD(mini) - IG MARKETS
// TIME FRAME 1H
// SPREAD 2.0 PIPS

DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE =090000
DEFPARAM FLATAFTER =210000
// 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

adxperiod = 14
atrperiod = 14
indicator1 = adx[adxperiod]
atr = AverageTrueRange[atrperiod]
//exitafternbars = 1
adxval = 19
atrmin = 25
position = round(100/atr/2.1666)
//a=5
m = 3
n = 2
m1 = m-1
n1 = n

if atr>atrmin then
c1 = indicator1 <adxval
c2 = indicator1 >adxval

if c1 then
// short
IF (abs(open-close) > (atr*m) and close > open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF

//long
IF (abs(open-close) > (atr*m) and close < open)   THEN
buy position*saisonalPatternMultiplier CONTRACTS AT MARKET

ENDIF
endif

if c2 then
// long
IF (abs(open-close) > (atr*n) and close > open and close> DOPEN(1))   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF

//short
IF (abs(open-close) > (atr*n) and close < open and close< DOPEN(1))   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF
endif
endif

if atr<atrmin then
c1 = indicator1 <adxval
c2 = indicator1 >adxval

if c1 then
// short
IF (abs(open-close) > (atr*m1) and close > open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF

//long
IF (abs(open-close) > (atr*m1) and close < open)   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF
endif

if c2 then
// long
IF (abs(open-close) > (atr*n1) and close > open )   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF

//short
IF (abs(open-close) > (atr*n1) and close < open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF
endif
endif
//if exitafternbars then
//IF longonmarket and BarIndex - TradeIndex = a Then
//sell  position contracts at Market
//EndIF

//IF shortonmarket and BarIndex - TradeIndex = a Then
//exitshort   position contracts at Market
//EndIF
//endif


ancesco 

Francesco78
9 years ago
#

I have done some more work on this code, I noticed that the strategy was poor when ATR (or VOl) was low, so I thought to make a position sizing inversely proportional to the ATR.

Further more I created 2 scenarios, 

1 ATR is bigger than x

2 ATR is smaller than x

Now the curve in the 1hr case looks steeper and smoother. 

I attach the results.

Regards

 

Francesco78
9 years ago
#

Thank you Enrique for your precious suggestion!

Ill try to incorporate it for sure (once I understand it :))) 

Best Regards

Francesco 

Francesco78
9 years ago
#

Enrique, I have added the Dax Seasonality on the 1hr TF and did some positioning modification.

I attach the code and the picture with the comparison.

Best Regards

Fr

// EUR/USD(mini) - IG MARKETS
// TIME FRAME 1H
// SPREAD 2.0 PIPS

DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE =090000
DEFPARAM FLATAFTER =210000
// 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

adxperiod = 14
atrperiod = 14
indicator1 = adx[adxperiod]
atr = AverageTrueRange[atrperiod]
//exitafternbars = 1
adxval = 19
atrmin = 25
position = round(100/atr/2.1666)
//a=5
m = 3
n = 2
m1 = m-1
n1 = n

if atr>atrmin then
c1 = indicator1 <adxval
c2 = indicator1 >adxval

if c1 then
// short
IF (abs(open-close) > (atr*m) and close > open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF

//long
IF (abs(open-close) > (atr*m) and close < open)   THEN
buy position*saisonalPatternMultiplier CONTRACTS AT MARKET

ENDIF
endif

if c2 then
// long
IF (abs(open-close) > (atr*n) and close > open and close> DOPEN(1))   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF

//short
IF (abs(open-close) > (atr*n) and close < open and close< DOPEN(1))   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF
endif
endif

if atr<atrmin then
c1 = indicator1 <adxval
c2 = indicator1 >adxval

if c1 then
// short
IF (abs(open-close) > (atr*m1) and close > open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF

//long
IF (abs(open-close) > (atr*m1) and close < open)   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF
endif

if c2 then
// long
IF (abs(open-close) > (atr*n1) and close > open )   THEN
buy  position*saisonalPatternMultiplier CONTRACTS AT MARKET
ENDIF

//short
IF (abs(open-close) > (atr*n1) and close < open)   THEN
sellshort  position CONTRACTS AT MARKET
ENDIF
endif
endif
//if exitafternbars then
//IF longonmarket and BarIndex - TradeIndex = a Then
//sell  position contracts at Market
//EndIF

//IF shortonmarket and BarIndex - TradeIndex = a Then
//exitshort   position contracts at Market
//EndIF
//endif


ancesco 

Enrique de Juan
9 years ago
#

 You could try integrating DAX's seasonality from the Pathfinder System. It may improve results considerably. 

https://www.prorealcode.com/prorealtime-trading-strategies/pathfinder-dax-4h/

Cheers!! 

ProRealCode ProRealCode
Loading...