Coded for micro DAX €1 (simply multiply by 25 to run on standard DAX €25 or by 5 to run on mini DAX €5), 1-hour TF.
I used the Multiple Time Frame support to allow Breakeven/Trailing Stop to run on 1-minute bars (default TF).
Strategy from https://www.forexstrategiesresources.com/trend-following-forex-strategies/111-kama-strategy/.
Compared to the original version at the above link, I only optimized the SMA (called MVA in the above site) and set it to 22, instead of 7.
I also added SL & TP plus my own Breakeven/Trailing Stop code snippet.
Lines 10-11 allow to enable/disable Long/Short trading (both enabled by default).
Lines 21-25, along with lines 54-61 and lines 67 and 74, ban further trading before a whole 1-hour bar has elapsed, in case a trade exits within a few 1-minute bars. In such case the 1-hour signal is still set and valid, but it would most likely lead to a losing trade since the momentum is likely to have faded.
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 |
//************************************************************************ // Kama & Sma Trading System DAX mtf //************************************************************************ // DEFPARAM CumulateOrders = False DEFPARAM PreLoadBars = 2000 //////////////////////////////////////////////////////////////////////// TIMEFRAME (default) ONCE nLots = 1 ONCE LongTrading = 1 //1=allowed 0=banned ONCE ShortTrading = 1 //1=allowed 0=banned // ONCE TP = 200 //200 pips ONCE SL = 50 //50 pips // TimeForbidden = OpenTime < 090000 AND OpenTime > 190000 LongCond = (Not TimeForbidden) AND LongTrading ShortCond = (Not TimeForbidden) AND ShortTrading // TIMEFRAME (1 hour, updateonclose) //h1 IF Not OnMarket THEN BarCount = 0 ELSE BarCount = BarCount + 1 ENDIF //------------------------------------------------------------------------------------ // Kama & Sma Strategy // //https://www.forexstrategiesresources.com/trend-following-forex-strategies/111-kama-strategy/ // Period = 2 //2 (standard 10) FastPeriod = 2 //standard SlowPeriod = 30 //standard // Fastest = 2 / (FastPeriod + 1) Slowest = 2 / (SlowPeriod + 1) if barindex >= (Period + 1) then Num = abs(close-close[Period]) Den = summation[Period](abs(close-close[1])) ER = Num / Den Alpha = SQUARE(ER *(Fastest - Slowest )+ Slowest) Kama = (Alpha * Close) + ((1 -Alpha)* Kama[1]) else Kama = close endif //------------------------------------------------------------------------------------ Sma = average[22,0](close) //22 //------------------------------------------------------------------------------------ a1 = Kama CROSSES OVER Sma // --- SHORT b1 = Kama CROSSES UNDER Sma //////////////////////////////////////////////////////////////////////// TIMEFRAME (default) //1 min ONCE TradeON = 1 IF IntraDayBarIndex = 0 THEN TradeON = 1 ENDIF TradeBar = BarCount IF Not OnMarket AND TradeBar <> TradeBar[1] THEN TradeON = 1 ENDIF //************************************************************************ // LONG trades //************************************************************************ IF a1 AND TradeON AND LongCond THEN BUY nLots CONTRACT AT MARKET TradeON = 0 ENDIF //************************************************************************ // SHORT trades //************************************************************************ IF b1 AND TradeON AND ShortCond THEN SELLSHORT nLots CONTRACT AT MARKET TradeON = 0 ENDIF // SET TARGET pPROFIT TP SET STOP pLOSS SL ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Trailing Stop //------------------------------------------------------------------------------------ IF Not OnMarket THEN TrailStart = 10 //10 Start trailing profits from this point BasePerCent = 0.100 //10.0% Profit to keep StepSize = 6 //6 Pips chunks to increase Percentage PerCentInc = 0.100 //10.0% PerCent increment after each StepSize chunk RoundTO = -0.5 //-0.5 rounds to Lower integer, +0.4 rounds to Higher integer PriceDistance = 7 * pipsize//8.9 minimun distance from current price y1 = 0 y2 = 0 ProfitPerCent = BasePerCent ELSIF LongOnMarket AND close > (TradePrice + (y1 * pipsize)) THEN //LONG x1 = (close - tradeprice) / pipsize //convert price to pips IF x1 >= TrailStart THEN //go ahead only if N+ pips Diff1 = abs(TrailStart - x1) Chunks1 = max(0,round((Diff1 / StepSize) + RoundTO)) ProfitPerCent = BasePerCent + (BasePerCent * (Chunks1 * PerCentInc)) ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent)) y1 = max(x1 * ProfitPerCent, y1) //y = % of max profit ENDIF ELSIF ShortOnMarket AND close < (TradePrice - (y2 * pipsize)) THEN//SHORT x2 = (tradeprice - close) / pipsize //convert price to pips IF x2 >= TrailStart THEN //go ahead only if N+ pips Diff2 = abs(TrailStart - x2) Chunks2 = max(0,round((Diff2 / StepSize) + RoundTO)) ProfitPerCent = BasePerCent + (BasePerCent * (Chunks2 * PerCentInc)) ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent)) y2 = max(x2 * ProfitPerCent, y2) //y = % of max profit ENDIF ENDIF IF y1 THEN //Place pending STOP order when y>0 SellPrice = Tradeprice + (y1 * pipsize) //convert pips to price IF abs(close - SellPrice) > PriceDistance THEN IF close >= SellPrice THEN SELL AT SellPrice STOP ELSE SELL AT SellPrice LIMIT ENDIF ELSE SELL AT Market ENDIF ENDIF IF y2 THEN //Place pending STOP order when y>0 ExitPrice = Tradeprice - (y2 * pipsize) //convert pips to price IF abs(close - ExitPrice) > PriceDistance THEN IF close <= ExitPrice THEN EXITSHORT AT ExitPrice STOP ELSE EXITSHORT AT ExitPrice LIMIT ENDIF ELSE EXITSHORT AT Market ENDIF ENDIF |
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
You mean coded for the 1-min TF?
It’s a Multiple Time Frame strategy.
It must be launched from a 1-minute chart, but signals are generated on the 1-hour TF.
Ok I just noticed your lower down comment about opening u pnew topic… sorry about that…. I’ll maybe traul the code a little and backtest, but backtestingon 4hr gives good results.. Think Ineed tounderstand its principles though to manage properly so a coding traul may be my best option…. Cheers for the code in principle anyway.. Currently its trailing stop for positive stoploss so that seems to be working.. Thumbs up there, Hi Robert. problem with open time – I copied this code try and MTF running from the 4hr doensnt pose an issue, whereas normally one woul dneed to go to the LTF as you’ve said elsewhere. I’ve backtested this off the 4hr with good results so thought to try live, though a bit dubious about running unwritten code as I’ve started doing my own, I have put it up live to review on live testing. The issue this morning was that it opened a trade at 0400hrs.??!!?!?! Looking at the code there’s no reference to not timeforbidden (not timeForbiddenEntry AND ) that I can see in the enter trade code… So this code seems to backtest on the 4hr OK, and it launches from the 4hr wihtuot error messages and appears to treigger trades and closes them off . So question is since the trade opened at 0400hrs this morning London time do I have to contact PRT support tickets? or is it a coding error.. I’ve added the code but cant see it displayed ….
Sorry for replaying so late, I really missed your post.
There is a discussion thread here https://www.prorealcode.com/topic/kama-sma-trading-system-dax-discussion-thread/
Lines 17-18 deal with trading hours.
Sure Roberto, but didn’t get any trades on the 1H TF, so trading TF should be 1-min 🙂
Yes.
You need to search MTF to read what it is all about and understand how it works.
You will only see trades on your 1-minute chart.
What should be multiplied in order to compensate för other contracts size?
Line 9, nLots is the number of contracts, you can change it as best suits you.
Ah, that’s what I thought as there were no ties in to the actual logics. Thanks!
I do not understand.
Even if you change “time forbidden,” the system still produces the same results, with entries within that range.
TimeForbidden = OpenTime 190000
I have ran this now for today and now @15:00 i got a “Alert triggerd for a sell Qty-1” and @ 15:05 I got a new alert on Buy (exit) qty +1 but no trades where triggerd why is that? Running with max position size of 2 contracts. when i backtest it a trade should have been done at these timestamps.
If you want to discuss about inner workings or detail, please open a new topic on the ProOrder Support Forum and always attach detailed pics (instrument,TF,date and time should be visible), along with details posted.
Thank you.
it could be tested on larger historic?
If someone has access to 200K data history might post results (it would be better to start a topic on the ProOrder support forum). Upcoming v11 will support up to 1M bars of data history.
Hi Roberto, thanks for this new strategy but I don’t understand why I can’t backtest it with 200K units… it stops after 6 trades.
There must be an issue with candlestick data from March 7th through March 12th. which causes backtest to stop at 15:04 om March 7th.
If you make your backtest start from 00:00 March 13th, then it works fine.
I will report this to PRT/IG.
Hi, I found the same problem with the time forbidden code but I have messed about with it using some code that I use for day trading and money management along with altering the stop size based on the trades taken in the last 100k bars.
There must be an issue with candlestick data from March 7th through March 12th. which causes backtest to stop at 15:04 om March 7th.
If you make your backtest start from 00:00 March 13th, then it works fine.
I will report this to PRT/IG.
https://www.prorealcode.com/topic/kama-sma-trading-system-dax-discussion-thread/
Sorry if I missed the latest discussions recently, but is MTF now usable and reliable in PRT production environment ?
MTF was officially made available to all customers 2-3 months ago after almost a year being beta tested.
OpenTime < 090000 AND OpenTime > 190000 should probably be OpenTime < 090000 OR OpenTime > 190000
Well spotted Zebra!
Is this trading system generating profit on micro DAX future?
can i put a completely different strategy under this strategy in the same code? or do i have to put 2 strategies separate in prorealtime?
You can read this topic (https://www.prorealcode.com/topic/multiple-strategies-within-one-trading-system/#post-41278) and keep posting there, if you need to.
Thanks Roberto to post this Kama SMA strategy.
Bonjour
J’ai beau essayer de le faire fonctionner sur du 1H, 15 min 5 min ou 1 min, rien ne fonctionne.
Quelle est la procédure à suivre pour avoir vos résultats ?
Cela fonctionne bien, peut-être que vous avez fait un mauvais copier-coller, je ne sais pas.
Ouvrez un thread dans le support ProOrder et publiez le code.
Bonjour,
merci pour le super partage, la stratégie offre des très beaux résultats.
Je ne suis pas expert dans le code de ProOrder et du coup je n’arrive pas à comprendre les principes de base du stop suiveur que vous avez codé, pouvez-vous mes les expliquer rapidement ?
Un grand merci par avance,
Cordialement.
Hi there, I have been using this code for months now.. I adjusted some code and it worked fine.. recently it started having trouble it started giving me the following error:
The trading system was stopped because the historical data loaded was insufficient to calculate at least one indicator during the evaluation of the last candlestick. You can avoid this in the future by changing the number of preloaded bars with the instruction DEFPARAM (ex: DEFPARAM Preloadbars = 10000).
So I tried to search for errors.
Now I entered the original code which is posted here on prorealcode to see if it still works. I run it on the DAX 10 minutes, but this code also gives the same error.
Does anyone know why this code isn’t working anymore? Are there software updates or something?
Hope to hear from you!
Every 10 minutes it gives this error..
There’s no apparent reason, as far as I know.
You can increase line 6 up to 10000.
You can try shutting down your system, then restarting it. Maybe this will do.
I tried it all several times..:(.. I can’t get it to work anymore for 2 weeks now
I also was returned the same error message.
I opend a ticket with PRT assistance. I will let you know any answer as soon as I get it.
Lets hope they give some answers. I opened a ticket too but I got no response.
No news??
It’s too early, usually it takes a couple of weeks or more.
I’ll post any news as I get it.
ProRealTime reported no issues with the PreLoaded bars.
I tested it on DAX, 1-minute TF, and it opened trades regularly now.
There must have been a temporary issue while IG was working with some updates.
Great thanks a lot! Will run it on 10 minutes again!
But it has not opened positions since 13 of april.. thats what the backtest says…
On 1-minute TF it works, on a 10-minute TF it may be due to lack of signals.
I have it on 1 minute but still 13 april is the latest its doing
The error you reported has been fixed, now the strategy enter trades regularly in AutoTrading.
I have experienced that sometimes the backtest doesn’t open trades AFTER April 14th, 2021. I tried to close backtest, then switch to 50K units, then 200K, then back to 50K, on both 1-minute and 10-minute TF’s and sometimes it worked, sometimes it didn’t.
I reported this issue to ProrealTime. Please so do you.
Hi Roberto, you seem to be good in code programming. I have a question f you know how to do it. I work with renko bars. Is it possible to know when a renko bar is definitely finished and has been displayed on the graphic ? for example in TF 1mn. I ask this question because in 1 mn for example you can have 20 renko bars up or down and they all could be invalidate because the price (the 1mn candle) goes down again. How to do that ? You seem to give an answer frome line 54 to 61 but it is for time candles. Thank you for your help.
Done!! thanks Roberto, it is running again!
@YvesRobert
Please create anew topic in the forum https://www.prorealcode.com/forum/prorealtime-english-forum/prorealtime-support/
@robertogozzi. It’s done. Thank you
Hello Roberto, some questions about your strategy.
1 – Do the 2 lines SET TARGET pPROFIT TP and SET STOP pLOSS SL disappear and reappear again every minute or remain even if not onmarket ?
2 – What is the value of pipsize ? For example what it is for DAX and CAC40 ?
Thank you
1. The 2 lines SET TARGET pPROFIT TP and SET STOP pLOSS SL are always executed, each bar. But even if they were executed only once, they would be kept in memory until changed.
2. PipSize is a system value used not to have to deal with the value of pips among different instruments and markets. Usually it’s 1/10000th of the price for FOREX (but not when JPY is involved), so that, for instance, in Eur/Usr 1 pip means o.ooo1 in price. With DAX and CAC40, as with most indices, its value is 1, as they have a pip-to-price ratio of 1:1. In any case, to know its value, just create this one-line indicator:
RETURN PipSize AS “Value of a PIP”.