Hi guys,
The tendency of the last and first days of the month is one of the most well known and reliable statistical setups. This pattern has been working for decades and in many indices. I would like to share a trading system that based on the TDOM (trading day of the month) idea from Larry Williams one of the famous statistical traders.
The basic idea is to short the market on the first trading day of the month and to turn the position at the statistical monthly turning point. The system uses smart position management mechanism such as order cumulation, position sizing based on historical monthly behavior and maximal position size monitoring. Money management will be done by procentage stop loss and take profit orders.
The system is very simple but amazing profitable and works without any technical indicators.
The so-called Navigator trading system works in 4 hours timeframe and the backtest was done with 200.000 candles. Please find attached the first version for the DAX.
Reviews and suggestions for improvement are welcome.
I have created a forum topic for all discussions related to Navigator Trading System.
https://www.prorealcode.com/topic/navigator-trading-system/
Best, Reiner
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
// Navigator Trading System based on ProRealTime 10.3 // The algo based on the statistical advantage of the TDOM (trading day of the month) idea around the turn of the month // Version 1 // Instrument: DAX mini 1 EUR, 4H, 9-17 CET, 1 point spread, account size 10.000 Euro // ProOrder code parameter DEFPARAM CUMULATEORDERS = true // cumulate orders // define TDOM days ONCE tradingDaySell = 1 ONCE tradingDayBuy = 8 // define intraday trading window ONCE timeSell = 90000 ONCE timeBuy = 170000 // define position and money management parameter ONCE positionSize = 1 ONCE maxPositionSizeLong = 10 ONCE maxPositionSizeShort = 10 ONCE minSizeLong = 1 ONCE midSizeLong = 5 ONCE maxSizeLong = 10 ONCE maxSizeShort = -10 ONCE stopLossLong = 8.5 // in % ONCE takeProfitLong = 3 // in % ONCE stopLossShort = 3.75 // in % ONCE takeProfitShort = 1 // in % // define position multiplier for each month (>0 - long / <0 - short / 0 - no trade) ONCE longJanuary = 0 ONCE shortJanuary = maxSizeShort ONCE longFebruary = 0 ONCE shortFebruary = maxSizeShort ONCE longMarch = maxSizeLong ONCE shortMarch = 0 ONCE longApril = minSizeLong ONCE shortApril = 0 ONCE longMay = minSizeLong ONCE shortMay = maxSizeShort ONCE longJune = minSizeLong ONCE shortJune = 0 ONCE longJuly = midSizeLong ONCE shortJuly = maxSizeShort ONCE longAugust = 0 ONCE shortAugust = maxSizeShort ONCE longSeptember = 0 ONCE shortSeptember = maxSizeShort ONCE longOctober = midSizeLong ONCE shortOctober = maxSizeShort ONCE longNovember = midSizeLong ONCE shortNovember = maxSizeShort ONCE longDecember = midSizeLong ONCE shortDecember = maxSizeShort // calculate TDOM IF Month <> Month[1] THEN tradingDay = 0 ENDIF IF Time = 90000 THEN IF CurrentDayOfWeek > 0 AND CurrentDayOfWeek < 6 THEN tradingDay = tradingDay + 1 ENDIF ENDIF // set montly multiplier IF CurrentMonth = 1 THEN monthlyMultiplierLong = longJanuary monthlyMultiplierShort = shortJanuary ELSIF CurrentMonth = 2 THEN monthlyMultiplierLong = longFebruary monthlyMultiplierShort = shortFebruary ELSIF CurrentMonth = 3 THEN monthlyMultiplierLong = longMarch monthlyMultiplierShort = shortMarch ELSIF CurrentMonth = 4 THEN monthlyMultiplierLong = longApril monthlyMultiplierShort = shortApril ELSIF CurrentMonth = 5 THEN monthlyMultiplierLong = longMay monthlyMultiplierShort = shortMay ELSIF CurrentMonth = 6 THEN monthlyMultiplierLong = longJune monthlyMultiplierShort = shortJune ELSIF CurrentMonth = 7 THEN monthlyMultiplierLong = longJuly monthlyMultiplierShort = shortJuly ELSIF CurrentMonth = 8 THEN monthlyMultiplierLong = longAugust monthlyMultiplierShort = shortAugust ELSIF CurrentMonth = 9 THEN monthlyMultiplierLong = longSeptember monthlyMultiplierShort = shortSeptember ELSIF CurrentMonth = 10 THEN monthlyMultiplierLong = longOctober monthlyMultiplierShort = shortOctober ELSIF CurrentMonth = 11 THEN monthlyMultiplierLong = longNovember monthlyMultiplierShort = shortNovember ELSIF CurrentMonth = 12 THEN monthlyMultiplierLong = longDecember monthlyMultiplierShort = shortDecember ENDIF // all in if first day of month is Monday or Thuesday IF tradingDay = tradingDayBuy AND ( CurrentDayOfWeek = 1 OR CurrentDayOfWeek = 2 ) THEN monthlyMultiplierLong = maxSizeLong ENDIF // caculate current position profit posProfit = (((close - positionprice) * pointvalue) * countofposition) / pipsize // open long position with order cumulation l1 = tradingDay = tradingDayBuy l2 = tradingDay > tradingDayBuy AND posProfit < 0 IF ( (l1 OR l2) AND Time = timeBuy) THEN // check monthly setup and max position size IF monthlyMultiplierLong > 0 THEN IF (COUNTOFPOSITION + (positionSize * monthlyMultiplierLong)) <= maxPositionSizeLong THEN BUY positionSize * monthlyMultiplierLong CONTRACT AT MARKET ENDIF ELSIF monthlyMultiplierLong <> 0 THEN IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN BUY positionSize CONTRACT AT MARKET ENDIF ENDIF stopLoss = stopLossLong takeProfit = takeProfitLong ENDIF // sell short if valid month or close position only s1 = tradingDay = tradingDaySell IF ( s1 AND Time = timeSell ) THEN // check monthly setup and max position size IF monthlyMultiplierShort < 0 THEN IF (COUNTOFPOSITION + (positionSize * ABS(monthlyMultiplierShort))) <= maxPositionSizeShort THEN SELLSHORT positionSize * ABS(monthlyMultiplierShort) CONTRACT AT MARKET ENDIF ELSIF monthlyMultiplierShort <> 0 THEN IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeShort THEN SELLSHORT positionSize CONTRACT AT MARKET ENDIF ELSIF monthlyMultiplierShort = 0 THEN SELL AT MARKET ENDIF stopLoss = stopLossShort takeProfit = takeProfitShort ENDIF // stop and profit management SET STOP %LOSS stopLoss SET TARGET %PROFIT takeProfit |
Share this
No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.
ProRealTime ITF files and other attachments :PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials
thanks for all
Hi Reiner,
Many thanks for the superb strategy.I just tried to back-test on prerealtime but it didn’t give me any trades on 4h time-frame but it gives good results on 1 hour.
I am not sure why I am not getting exactly as your results(Is prorealtime 10.3 baktest results are good to believe? ).Could you please see the attachment
and let me know your valuable thoughts on this.
thanks ,
Joy John
Hi Joy John,
Navigator will allways sell at 9:00 at the first tdom and will accumulate a long position at 17:00 beginning with the 8.th tdom. Stop and take profit is also independent from the timeframe. The reason for 4H timeframe was the maximum available data history.
Best, Reiner
Thank you for an excellent system Reiner. Started it April 7 and it really showed what it can do these last few days.
Best regards, David
hello,
Anybody have test it in real for few month?
thanks a lot
Hi Reiner, great system. I was wondering how you decide the month multiplier value.
it is based on seasonality of DAX.
Hello I am new here
I am trying to understand this code
IF monthlyMultiplierLong > 0 THEN
IF (COUNTOFPOSITION + (positionSize * monthlyMultiplierLong)) <= maxPositionSizeLong THEN
BUY positionSize * monthlyMultiplierLong CONTRACT AT MARKET
ENDIF
ELSIF monthlyMultiplierLong 0 THEN —-> I DON’T understand this condition because monthlyMultiplierLong I understand that only can be 0 or > 0 (if >0 then enters above and 0 does nothing…right?.
IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
BUY positionSize CONTRACT AT MARKET
ENDIF
Thanks in advance
ENDIF
Sorry the code copied bad
the line I dont understand is: ELSIF monthlyMultiplierLong 0 THEN