Momentum-Range Differential Acceleration Momentum-Range Coefficient Acceleration

Momentum-Range Differential Acceleration Momentum-Range Coefficient Acceleration

Introduction

This is a pair of trading systems that both work on the same premise. The only difference between them is that once system uses a differential (system#1) whilst the other system uses a coefficient (system#2) to measure rapid changes in price action. Although the example submitted here is optimised for EUR_USD M15 (Long only), the system is market agnostic and can be adapted for a selection of markets / asset classes. For quickness of illustration purposes I have included only the long version here which should be enough to demonstrate the premise; Due to the differences between bull and bear price action any short adaptationist should be forked with separate optimizations for the short side.

Trading System premise

There exists a good probability of continuation of price action when the following pattern is found:
1. Short term average range / momentum is accelerating by a certain amount faster than long term average range / momentum (AKA increasing differential)
2. Short term moving average (AKA trend) is moving in the same direction as price action

Indicator

For more information about the underlining entry system indicator see my indicator here:
https://www.prorealcode.com/prorealtime-indicators/range-coefficient/
This can be used to predict an increase in volatility.

Variables

Thorough and regular optimization is required. Current optimization here is for EUR_USD M15

Note

This is not a complete “black box” trading system. There is no risk management or exception handling code. This back test is purely to demonstrate risk:reward and hit rate of the above premise. Open to all suggestions. For any questions please discuss in a forum topic.

System 1/ (differential system)

System 2/ (coefficient system)

 

Share this

Risk disclosure:

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 : How to import ITF files into ProRealTime platform?

PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials

  1. Nicolas • 04/18/2017 #

    I’d like to fork this one! anyone else? 🙂
    You should open now a new thread Maz!

    • Maz • 04/18/2017 #

      https://www.prorealcode.com/topic/momentum-range-differential-acceleration-system/

  2. Francesco78 • 04/18/2017 #

    Thank you. 
    Any chance to do 200,000 bars backtest with the same variables?

  3. Oskar Bergvall • 04/18/2017 #

    I get good results on USD/SEK also. Will try it if I can.
    One problem though, on my demoaccount on IG I get when trying to autotrade: “Replace variables with specific values: To prepare this strategy for automatic tradin, remove all variables from the “ProBacktest” section of the programming window and replace these variables with specific numeric values in the code of the trading system.”

    • Maz • 04/18/2017 #

      Yep it requires you to move optimized variables into hard coded constants. Remove the variable optimizer and put them in the code instead

    • Oskar Bergvall • 04/18/2017 #

      Maz: Yes but I don’t understand how. The values seems fixed already. Sorry I’m new in programming. 

    • Maz • 04/18/2017 #

      Just remove the variable optimizer

    • Oskar Bergvall • 04/18/2017 #

      Which one is it? I tried to comment it out but same error. 

  4. victormork • 04/18/2017 #

    I’m not getting any trades from system one. Any suggestions of what I might do wrong?

  5. victormork • 04/18/2017 #

    The first one works on DAX, but on currency pairs I get no trades 🙁 and yes I’m using EUR/USD 15min

  6. victormork • 04/18/2017 #

    When I tried this system on demo it was stopped due to division of zero. Anyone who got the same result or ideas on how to prevent this?

    • Maz • 04/18/2017 #

      Just wrap the indicator code in a 
      if barIndex >= max(mcLongPeriod, rcLongPeriod) then...endif

  7. victormork • 04/18/2017 #

    @GraHal shall we move this to the forum thread advised above?

  8. Maz • 04/18/2017 #

    Thanks guys. Please see forum post for more details. I encourage you guys to play / pull it apart / build on top / suggest improvements. 

  9. Pierluigi Cavagnoli • 04/18/2017 #

    It works well even short on EUR/USD 15 min. I did this way: maLong / maShort instead of maShort / maLong  see the code.
    Could it be a case of over-optimization?
    What do you think about this ?
     
    mShort = momentum[7]
    mLong = momentum[100]
    mc = max(0, (abs(mLong) / abs(mShort)) -1)
    // ----------------------------------- //

    // Range Coefficient ================= \\
    r = abs(range)
    arLong = average[max(1, 100)](r)
    arShort = average[max(1, 4)](r)
    rc = max(0, (arLong / arShort) -1)
     

  10. Wilko • 04/18/2017 #

     Nice method of making linked AND-statements more readable!

  11. Wilko • 04/18/2017 #

    And not only readable…. makes it much easier to iterate different entry/exit-conditions, deleting and adding conditions during development of algo.

  12. IGOSNELL • 04/18/2017 #

    Hi
    Interesting strategy, when I used $ M-R Dif EURUSD M15 Long if does not enter any positions, any clue why?
    The coef one does work thought on the EURUSD
     
    Regards
    Ian

  13. ilvillans • 04/18/2017 #

    HI,

    I modified the system, from good results but from this error:
    Replace the variables with a specific value: to prepare this system for automatic trading, remove all variables from the “ProBacktesta my system” section of the programming window and replace these variables with a specific numeric value in the trading system code
    Someone more experienced could rewrite it without giving errors

    Thanks
    Alessandro

    // ====================================== \\
    // :: M-R Dif.coef.long
    // Long Name : Momentum and Range Coefficient Accelleration Long only
    // Version : v1.11
    // Author : Maz @ prorealcode.com
    // Date : 07-04-2017
    // Contact : prtmaz at gmail dot com
    // ————————————– //

    // ====================================== \\
    // :: Optimizations —
    // ————————————– //
    once optimization = 43 // 1 = EUR/USD M15
    // Set to 0 for re-optimization and walk-forward

    if optimization = 43 then
    // Static Optimization for EUR/USD M15
    // May 2015 – April 2017
    wintarget = 43 // Clip target to maximum of x points
    minTradeTime = 43 // stay in trade for at least x bars
    // try also 27
    mcShortPeriod = 5 // Short period momentum
    rcShortPeriod = 16 // Short period average range
    mcLongPeriod = 24 // Long period momentum
    rcLongPeriod = 85 // Long period average range

    //mcThreshold = 0.1 // 0.5 // Momentum coefficient threshold
    //rcThreshold = 0.9 // 1 // Range coefficient threshold

    maShortPeriod = 4 // Short term moving average
    maLongPeriod = 17 // Long term moving average
    // ( try also 150 / or 53 for 70% hit rate / or 51

    elsif optimization = 43 then
    // Insert your optimizations here
    // wintarget = 43 // Clip target to maximum of x points
    // minTradeTime = 43 // stay in trade for at least x bars
    // …

    endif

    // ====================================== \\
    // :: Indicators —
    // ————————————– //

    // Momentum Coefficient ============= \\
    mShort = momentum[mcShortPeriod]
    mLong = momentum[mcLongPeriod]
    mc = max(0, (abs(mShort) / abs(mLong)) -1)
    // ———————————– //

    // Range Coefficient ================= \\
    r = abs(range)
    arLong = average[max(1, rcLongPeriod)](r)
    arShort = average[max(1, rcShortPeriod)](r)
    rc = max(0, (arShort / arLong) -1)
    //rc = max(0, arShort – arLong)
    // ———————————– //

    // General Indicators ================= \\
    upBar = close > open
    maShort = exponentialAverage[maShortPeriod](Close)
    maLong = exponentialAverage[maLongPeriod](Close)
    // ———————————– //

    // ====================================== \\
    // :: Entry Logic
    // ————————————– //

    // long entry rules (buy condition)
    bc1 = not longOnMarket
    bc1 = bc1 and (mc >= mcThreshold)
    bc1 = bc1 and (rc >= rcThreshold)
    bc1 = bc1 and upBar
    bc1 = bc1 and maShort > maShort[1]

    // long exit rules (exit long conditions)
    le1 = longOnMarket
    le1 = le1 and ( barIndex >= barIndexAtBuy + minTradeTime )
    le1 = le1 and (maLong < maLong[4])

    // short entry rule
    // — na —

    // short exit rules
    // — na —

    // ====================================== \\
    // :: Execution Handlers
    // ————————————– //
    if bc1 then
    buy 2 shares at market
    set target pprofit wintarget
    barIndexAtBuy = barIndex
    endif

    if le1 and longOnMarket then
    sell at market
    endif

avatar
Register or

Likes

avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar

+8 more likes

Related users ' posts
gabri
8 years ago
Marcel Thank you for this one. I played around with this indicator with Bollinger Bands around it i...
Nicolas Restart your platform in order to be sure to use the last version, there was a version rollb...
bertrandpinoy bonjour voud pouvez m envoyer le code modifier par vous?
Nicolas Désolé , je ne comprends pas votre question.
Nicolas Rien, il faut l'appliquer sur la charte. Soit le mettre sur le graphique du prix, à l'aide d...
signorini Merci pour votre réponse. Je l'applique sur la charte, j'utilise la petite clé pour effacer ...
signorini Je vous remercie, Nicolas. C'est fixé. Très bon week-end.
Nicolas si il n'y a pas de stoploss définit dans le code, alors c'est normal :)
bertrandpinoy bonjour merci pour la réponse. Oui b sur ... est il possible que le SL soit coder sous une a...
Nicolas ok mais pourquoi poser la question ici ? Pour des questions non spécifique à cette article, ...
Abz  hi , you need to add the indicator from the "price" menu in chart
Francesco Thank you Abz!
phanz Hi Nicolas, this is an interesting strategy. For long position, I assume entry when prices ...
julien1978 The ADR value that is plotted intraday does not match the value of the regular ATR indicator...
Fab666 I've tried to get a fix for this also but no luck, it doesn't print the correct data as far ...
Seabiscuit Hi! With the new PRT update, this indicator does not work anymore
Nicolas
8 years ago
supertiti bonjour à tous J'utilise cet indicateur depuis plusieurs mois, une fois règlé "K" à sa conv...
Nicolas
8 years ago
T3 Velocity
T3 Velocity
16
Indicators
tatankayotanka As you can do to set a marker directly in the price property page and then view it such as m...
Nicolas It may be a good idea to discuss this in the forum instead. Please open a new topic in probu...
Wester Hi, is this more or less the same as the TTM Squeeze indicator (john carter)
rpreviteri Hi Nicolas, thanks a  loto for sharing your knowliedge, Wasn't the original momentum pinball...
air Thank you!  
elanoa Buonasera sig. Nicolas......sarebbe possibile far in modo che quando l'indicatore raggiunga ...
Pelle Nævestad Thanks Nicolas, this is a keeper!
Chicane23 Hi, when uploaded the WAE isnt showing histogram; only line. Is there a way to modify?
Nicolas Change the way the lines are displayed in the indicator settings window : histogram, lines, ...
Dimi.A Perfect for counter-trend scalping. I like this!
viktorthuns Hi Nicolas! Great work you've done with all your indicators. Just wondering about the code a...
Nicolas the value is not a boolean but an average of an addition of booleans. As stated in the descr...
Doctrading Hello,  The strategy should be improved, no doubt. But it was just one of my ideas, which h...
ALEALE Yes Nicolas is very difficult, macro economic data can destroy any work!!  
styrke depends which.. I personally think that it's much more easier to trade on XBTUSD, try to co...
David Thanks for the explanation Nicolas.
freecat1899 Hello, I wanted to create a percent ADR based on this indicator, so I wrote this code that I...
revstrat At first glance, I see this mistake. You shouldn't average the highs and the lows. You shoul...
Doctrading I forgot to write at the beginning :  a = 50 b = 50 These are intermediate levels Sorry
DerPat Thank you. This one could be an aid in my current research on stochastics.
Pelayo it is possible that in line 12 we should put seuilinf=-b, thaks for all
GraHal Ooops got that excited I sent that last one twice! ha (and can't delete it, sorry) I got it...
Eric n = 3  dont forget to allow 3 contract in proorder
UkCoopDownUnder Tried EURUSD GMT and GMT -1, as far back as I can go, Nov 2018 on 15mn Tf, 22% loss
lglmrc Can't make it work, says: "Define p variable"
Ezio Hi Xel and thanks, do you know if there is a way in PRC of reading/counting intraday ticks?...
inadis ive just discovered this, i must say very nice thanks.
phili711 Bonjour Si la moyenne 100 est au dessus de la moyenne 20 le trend est baissier zlors pourqu...
Nicolas La comparaison se fait entre la valeur de la moyenne actuelle et telle qu'elle était il y a ...
Thomas007 we should definitely open a new thread for intraday trading - can we post the link once it's...
Nicolas
9 years ago
trabucaire Hello, what does it mean the 20 and 40 number on this code ? Thank you !
robertogozzi I modified it to make parameters customizable and to Draw a Grey candlestick when a range is...

Top