This is a system I made over 6 months ago and have been running live on the DAX 30m. It is based on identifying tops or bottoms in the price. When a breakout from these levels occur it tries to capture the movement, in either direction. It averages 1.55 trades/day and is flat overnight. It employs some simple filters and varied position sizes.
Important things to know:
I can answer your questions in the comments.
Strategy code:
/////////////////////////////////////
// Wing's Resistance Breacher
// DAX 30m timeframe. Last optimized Nov 2, 2016
//
// Made by user "Wing" of ProRealCode.com
// https://www.prorealcode.com/user/wing/
/////////////////////////////////////
defparam cumulateorders=false
stoch=Stochastic[8,3](close)
mm2=exponentialaverage[8]
// Position size module, 2 is the default. Can be adapted to scale with the profits
/////////////////////////////////////////////////////////////////////////
positionsize=2//+2*round((strategyprofit*2)/10000)
maybe= positionperf(1)<0
losses = positionperf(1)<0 and positionperf(2)<0
if losses then
PositionSize = 3//+3*round((strategyprofit*2)/10000)
elsif not losses then
PositionSize = 2//+2*round((strategyprofit*2)/10000)
Endif
if maybe and not losses then
positionsize=3//+3*round((strategyprofit*2)/10000)
endif
if positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0 then
positionSize=2//+2*round((strategyprofit*2)/10000)
endif
if positionperf(1)>0 and positionperf(2)>0 then
positionsize=1//+1*round((strategyprofit*2)/10000)
endif
if positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0 and positionperf(4)<0 and positionperf(5)<0 and positionperf(6)<0 then
positionsize=5
endif
if positionperf(1)>0 and positionperf(2)>0 and positionperf(3)>0 and positionperf(4)>0 and positionperf(5)>0 and positionperf(6)>0 then
positionsize=1
endif
///////////////////////////////////////////////////////////////////////////////////
// Optimization variables
////////////////////////////////////////////////////////////////////////////////
bul=3.5 //long, SL
but=12 // long, PT
shl=6.5 // Short, SL
sht=3.5 // Short PT
lowt=65 // stochastic filter
test=45 //stochastic filter
mmlean=1.0002 // Moving average lean filter
mmlean2=1.0005 // Moving average lean filter
// moving averages
yy=47
tt=53
////////////////////////////////////////////////////////////////////////////////
minSL=20 // minimum SL
lasttime=210000 // last time to open position
which=10 // Parameter of the ATR for SL/TP
once mabot=0
once mabotz=0
once maboty=0
once mabotzy=0
if time<lasttime then
if time>080000 and dayofweek>1 and stoch>test and mm2[1]*mmlean<mm2 and averagetruerange[which]*bul> minSL and go=1 and mm2[1]*mmlean2>mm2 and close>MaBotzy and onmarket=0 then
buy PositionSize lot at market
mystop=averagetruerange[which]*bul
myprofit=averagetruerange[which]*but
go=0
endif
if time>080000 and stoch<Lowt and mm2*mmlean<mm2[1] and go=1 and mm2*mmlean2>mm2[1] and averagetruerange[which]*shl>minSL and close<MaBotz and onmarket=0 then
sellshort PositionSize lot at market
mystop=averagetruerange[which]*shl
myprofit=averagetruerange[which]*sht
go=0
endif
endif
// Identifying tops/bottoms in price
//////////////////////////////////////////////////////////////////////
if close<average[yy] and close<exponentialaverage[tt] and MaBot=0 then
MaBot=close
go=1
endif
if close<average[yy] and close<exponentialaverage[tt] and Mabot>0 and close<MaBot then
mabot=close
endif
if close<average[yy] and close<exponentialaverage[tt] and Mabot>0 and close>MaBot then
MaBotz=MaBot
endif
if close>average[yy] or close>exponentialaverage[tt] then
MaBot=0
MaBotz=0
endif
if close>average[yy] and close>exponentialaverage[tt] and MaBoty=0 then
MaBoty=close
go=1
endif
if close>average[yy] and close>exponentialaverage[tt] and Maboty>0 and close>MaBoty then
maboty=close
endif
if close>average[yy] and close>exponentialaverage[tt] and Maboty>0 and close<MaBoty then
MaBotzy=MaBoty
endif
if close<average[yy] or close<exponentialaverage[tt] then
MaBoty=0
MaBotzy=0
endif
/////////////////////////////////////////////////////////////////////////////////////
// Sell at end of day
if time>215300 then
exitshort at market
sell at market
endif
// Earlier friday exit. Insurance against accidental holding over weekends
if dayofweek=5 and time>212300 then
exitshort at market
sell at market
endif
set target profit myprofit
set stop loss mystop
You must be logged in to post a comment.
There's a few threads on the forum about backtest and live trades being different at times. I suggest looking in them for reasons. I run 0 automated strategies at the moment, but that's just me being picky with running suitable systems and not distracting myself from manual trading (which I do a lot).
Hey, Yes it´s running in 30 m timeframe. I had it running and it made two trads in january. Then I thought I needed to add (PRELOADBARS = 150) but that has not helped! Strange that it made two trads and then no more. How do I know if position limit is too low? No rejected orders! Can I ask you why you do not have the strategy running? Big thanks for your help, I'm quite new to this so happy for all the help I can get. Finds this super interesting :))
Hi, I've had this strategy running for a month now. But during this period, it has not made any trade. But in a backtest it should have done it. What am I doing wrong? Have I installed the code incorrectly? Have enough money on your account so it can not be that! Thanks for your help :)) ///////////////////////////////////// defparam cumulateorders=false DEFPARAM PRELOADBARS = 150 stoch=Stochastic[8,3](close) mm2=exponentialaverage[8] // Position size module, 2 is the default. Can be adapted to scale with the profits ///////////////////////////////////////////////////////////////////////// positionsize=2//+2*round((strategyprofit*2)/10000) maybe= positionperf(1)<0 losses = positionperf(1)<0 and positionperf(2)<0 if losses then PositionSize = 3//+3*round((strategyprofit*2)/10000) elsif not losses then PositionSize = 2//+2*round((strategyprofit*2)/10000) Endif if maybe and not losses then positionsize=3//+3*round((strategyprofit*2)/10000) endif if positionperf(1)<0 and positionperf(2)<0 and positionperf(3)0 and positionperf(2)>0 then positionsize=1//+1*round((strategyprofit*2)/10000) endif if positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0 and positionperf(4)<0 and positionperf(5)<0 and positionperf(6)0 and positionperf(2)>0 and positionperf(3)>0 and positionperf(4)>0 and positionperf(5)>0 and positionperf(6)>0 then positionsize=1 endif /////////////////////////////////////////////////////////////////////////////////// // Optimization variables //////////////////////////////////////////////////////////////////////////////// bul=3.5 //long, SL but=12 // long, PT shl=6.5 // Short, SL sht=3.5 // Short PT lowt=65 // stochastic filter test=45 //stochastic filter mmlean=1.0002 // Moving average lean filter mmlean2=1.0005 // Moving average lean filter // moving averages yy=47 tt=53 //////////////////////////////////////////////////////////////////////////////// minSL=20 // minimum SL lasttime=210000 // last time to open position which=10 // Parameter of the ATR for SL/TP once mabot=0 once mabotz=0 once maboty=0 once mabotzy=0 if time080000 and dayofweek>1 and stoch>test and mm2[1]*mmlean minSL and go=1 and mm2[1]*mmlean2>mm2 and close>MaBotzy and onmarket=0 then buy PositionSize lot at market mystop=averagetruerange[which]*bul myprofit=averagetruerange[which]*but go=0 endif if time>080000 and stoch<Lowt and mm2*mmleanmm2[1] and averagetruerange[which]*shl>minSL and close<MaBotz and onmarket=0 then sellshort PositionSize lot at market mystop=averagetruerange[which]*shl myprofit=averagetruerange[which]*sht go=0 endif endif // Identifying tops/bottoms in price ////////////////////////////////////////////////////////////////////// if close<average[yy] and close<exponentialaverage[tt] and MaBot=0 then MaBot=close go=1 endif if close<average[yy] and close0 and close<MaBot then mabot=close endif if close<average[yy] and close0 and close>MaBot then MaBotz=MaBot endif if close>average[yy] or close>exponentialaverage[tt] then MaBot=0 MaBotz=0 endif if close>average[yy] and close>exponentialaverage[tt] and MaBoty=0 then MaBoty=close go=1 endif if close>average[yy] and close>exponentialaverage[tt] and Maboty>0 and close>MaBoty then maboty=close endif if close>average[yy] and close>exponentialaverage[tt] and Maboty>0 and close<MaBoty then MaBotzy=MaBoty endif if close<average[yy] or close215300 then exitshort at market sell at market endif // Earlier friday exit. Insurance against accidental holding over weekends if dayofweek=5 and time>212300 then exitshort at market sell at market endif set target profit myprofit set stop loss mystop
I've been running it live since 26th of september with MM, P/L is 1.08 and total gain is about €288. Not too great considering I'm running the dynamic position code which takes more than one contract at a time.
yes i'm running it live
Hello Verdi, I'm not sure to understand what you mean..Did you tried to test with your correction?
Only MaBotzy in line 127 should be set to a large value, for example MaBotzy = 10000000. MaBoty must be set to 0 in line 126, this is correctly coded. When MaBotzy is 0, in line 76 this would mean that the threshold above which a new long position can be opened is 0, i.e. a long position could always be opened.
I agree with verdi55. As it is now, the code will only test for a breakout on the upside (lines 113 to 128) when the close is above the MA and EMA. But, when the close is below the MA and EMA the system will still trade long because the condition for this is close > mabotzy and mabotzy = 0. Therefore it is entering long positions, without actually testing for a breakout, whenever the close is below the MA and EMA. I also agree with his other comment that this will be fine as long as you are in a long-term uptrend, but when a long downtrend comes along it will hurt.
Same thing again. Post was truncated. Once again the lost remarks : I think there is a logical error in lines 125-128. I think these lines are supposed to mean : When close is below one of the averages (close<average or close0 (close > MaBotzy) is always true, a new long position can ALWAYS be opened in the next bar, although there is no uptrend.
I try once again. Part of my previous post disappeared, and it is therefore unintelligible. Interesting system. I tried to understand the method to determine new highs and lows, and I think there is a logical error in lines 125-128. I think these lines are supposed to mean : When close is below one of the averages (close<average[yy] or close0 (close > MaBotzy) is always true, a new long position can ALWAYS be opened in the next bar, although there is no uptrend. For the short positions, I think this is correctly coded. Lines 108-111 mean that there is no downtrend anymore, and both the low of the downtrend MaBot and the threshold for short positions MaBotz are set to 0. In line 83, this means, that in the following bar, a short position can NEVER be opened, because close cannot be smaller than 0 (value of MaBotz). This is correct, because there is no downtrend (close is above one of the averages) and therefore no short positions can be opened. I think that "in principle", in order to make the decisions for long and short orders equivalent, the values of MaBoty and MaBotzy should be set to a very large value in lines 126 and 127, for example MaBoty=1000000000, and MaBotzy=1000000000. Then, in the next bar, a long position will also NEVER be opened in line 76, because there is no uptrend. Am I wrong, or did I understand something in the wrong way ?
Interesting system. I tried to understand the method to determine new highs and lows, and I think there is a logical error in lines 125-128. I think these lines are supposed to mean : When close is below one of the averages (close<average[yy] or close0 (close>MaBotzy), ALTHOUGH there is NO uptrend. For the short positions, I think this is correctly coded. Lines 108-111 mean that there is no downtrend anymore, and both the low of the downtrend MaBot and the threshold for short positions MaBotz are set to 0. In line 83, this means, that in the following bar, a short position can NEVER be opened, because close cannot be smaller than 0 (value of MaBotz). This is correct, because there is no downtrend (close is above one of the averages) and therefore no short positions can be opened. I think that "in principle", in order to make the decisions for long and short orders equivalent, the values of MaBoty and MaBotzy should be set to a very large value in lines 126 and 127, for example MaBoty=1000000000, and MaBotzy=1000000000. Then, in the next bar, a long position will also NEVER be opened in line 76, because there is no uptrend. Am I wrong, or did I understand something in the wrong way ?
I ran a test with the code, in demo account, since 06/24/17 71 Trades thereof 34 profit thereof 37 loss Profit: 1.838 Euro max drawdown 416 Euro max Runup 520 Euro Ich habe einen Test laufen lassen mit dem Code , im Demo-Account, seit 24.06.17 71 Trades davon 34 Gewinn davon 37 Verlust Gewinn: 1.838 Euro max Drawdown 416 Euro max Runup 520 Euro Demnächst werde ich den Backtest für diesen Zeitraum drüber laufen lassen und die Ergebnisse vergleichen. Bin gespannt. Wenn die Ergebnisse einigermaßen identisch sind, werde ich versuchen mit 2,3 Oszillatoren das Ergebnis zu verbessern. Liebe Grüße JohnScher
Hi Wing, First of all : bravo ! Your strategy is great. Anyway in demo, it looks like October 2017 (which is not over yet) is quite poor. The worst performing month since you started it live if I am not mistaken. Anyway, overall, strategy is great. Would it be worth to backtest it in Walk Forward ? (can't do it myself). Thanks again.
Hi Wing, I have been using your code and it has been quite profitable until now indeed! So first of all thank you very much for sharing it. I am wondering as there are many variables, which one would you choose in case you wanted to reoptimize it? Thank you!!!
Seems like it always closes position at 22:00:0X time?
Hi Wing, nice work!!! question: could you put a trailing stop in it? like: after profit of points x start trailing stop with a trailing step? like this: trailingstart = 25 //trailing will start @trailinstart points profit trailingstep = 30 //trailing step to move the "stoploss
Hi Wings, i did not found a forum thread for this interesting system so i post my comment here. I'm running it live in demo account since 12 july without touching optimization, and so far it gained 455 euros. It seems pretty good, but i've got a big backslash of bad trading from 14 july to 26 july, 7 consecutive loss for 1k of losses. Maybe this can be avoided by optimization. Stats are: 16 Trades: 6 win, 10 loss 1.32 Gains / Losses Max DD: 864,60 Max consecutives lossing trade: 7 Max Runup: 878,50 Max consecutives winning trade: 2 Time on Market: 46,7% Good work anyway.
Hi Wing,
Your code looks quite interresting.
I was wondering if you could develop a bit more on :
Thanks again and for the time you will take to give answer.
The larger than sign (>) means that it will trigger at 54 or later, i.e. also 22:00.
are u still active Wing?