Generic RSI2 with modified filter

Generic RSI2 with modified filter

I have spent some time on the infamous RSI2 strategy. This is a well-recognized mean reversion strategy that has been posted previously on ProRealCode in various forms.

The rules are extremely simple to understand: Buy when 2-period RSI is below a certain threshold and sell when it has come back up again. The backside to the RSI2 strategy is you are exposed to negative asymmetry between max and average wins/losses, meaning every once in a while the market comes back and takes a big bite out of your profits, potentially big enough to wipe your account. In order to decrease that risk, it is often proposed to only employ the strategy when close remains above the 200 day moving average.

I propose to exchange the 200d MA for two rather simple conditions. Only employ when the slope of 22 day moving average is positive and a longer 22-period RSI remains above 50. I find these filters are an improvement on the original MA200-rule, although there is still a significant downside risk involved in this strategy.

I have only tested on IG CFDs, and it works quite well on most equity indices of developed markets. However, spreads on IGs 24h index CFDs at midnight (which is when daily strategies are executed on ProRealTime platform) will eat up much or most of the edge. Therefore I believe this strategy is best left until such time that ProRealTime allows access to two different timeframes from within the same ProOrder-strategy. I understand they are hard at work on this. In the meantime I provide the code as a potential source of inspiration.


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?

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

  1. Nicolas • 28 days ago #

    At least Wilko has post something in the library! 😉 Thanks for this one, another great source of inspiration for our fellow coders around here, on this new fork of the classic RSI2 strategy.

  2. Wilko • 28 days ago #

    I have to admit it was a difficult birth…. 😉

    • Nicolas • 28 days ago #

      I have to say that I have difficulty believing you, I see magnificent equity curves from you on Twitter 😀

  3. larouedegann • 28 days ago #

    t-y for your code Wilko

    And the short entry ?


  4. CKW • 28 days ago #

    Thanks Wilko,

    I tried it on shorter time frame like 15m, 1h, 4h.. vs Daily. Result seems better than Daily. Do I miss something here? e.g. Wallstreet 2 spread

  5. Francesco78 • 28 days ago #

    works wonderfully with the russel

  6. Francesco78 • 28 days ago #

    sorry for my ignorance on this indicator, but would it make sense to try to build one wich allow  short positions too?

  7. Wilko • 27 days ago #

    Thank you all for your comments! I treat shorting very separately from the long side, at least in long-term growth assets like equities. When shorting, one is in that case going against the long term trend, meaning you are skewing probabilities against yourself from the outset. This needs to be taken into account. Also, in my experience, assets behave completely different on the up- and downside. Therefore I generally tend to try to treat short different from long. But gereally speaking, if you can get it to perform on the short side, then please do!

    If it works on 1hr timeframe, all the better! I did not get it to work, but I will test as suggested on the DOW.

    Again, thanks for all your comments, and happy trading!

  8. gabri • 15 days ago #


     great code!! I never worked with RSI2 and I found it very interesting. I made some change to the code and I got good results on the stock market. I used a SMA200 slope and a weekly RSI14 (approximated by a EMA130 in the code) to get better trend information.

    ShortRSI = RSI[2](close)
    LongRSI = close>exponentialaverage[130](close)//RSI[22](close) //1 month RSI
    MA = Average[200,0](close) //1 month moving average of close
    Slope = MA/MA[1]-1 //Slope of 1 month moving average
    //MaxPos = 1 //Set to tolerated maximum position
    LongEntry = 1//CountOfLongShares < MaxPos //Buy until MaxPos reached
    LongEntry = LongEntry AND ShortRSI < 15 //Buy when RSI2 below 15
    LongEntry = LongEntry AND LongRSI  //Filter for 1month RSI above 50
    LongEntry = LongEntry AND Slope > 0 //Filter for positive slope of MA22
    LongExit = LongOnMarket
    LongExit = LongExit AND ShortRSI > 60 //Exit position when RSI2 above 60
    // Conditions to enter long positions
    IF LongEntry THEN
    BUY 10000 cash AT MARKET
    // Conditions to exit long positions
    IF LongExit THEN



  9. Wilko • 12 days ago #

    I’m happy my code snippet inspired some new thoughts! Thanks for the feedback!

Register or


avatar avatar avatar avatar avatar avatar avatar avatar avatar
Related users ' posts
Maz I like this
atlante je me demande si prorealtime pourrait etre programee sur fonction lorsquún point cgange de c...
Kenneth Kvistad What does buy 1 «perpoint» means? I also see there is some inside candlestick trades that i...
Francesco78 Kenneth, it means that the tick value is 1 euro
Kenneth Kvistad Francesco, can you try to make this strategy with short and long proffit tragets just like i...
gabri GraHaL, I cannot see any link attached. I mostly manual trade but for stocks with strong fi...
GraHal Yes sorry, I set up a link to a screen shot on my google drive and then I got locked into th...
gabri Here's the thread
Nicolas Please send it to me with the contact form, thanks.
Magnus Park Hi! Thanks for sharing! Have the code been swapped to the new one? or is it the first one st...
corne Hi there - is there maybe somewhere a new version available to look at?
diegofe_2000 Gracias Nicolas , muy buen indicador , excelente para hacer sistemas, muy buenos resultados,...
2 months ago
CSR strategy DAX 1 D
CSR strategy DAX 1 D
ALE Hello GuysI'm trying to fix a problem that I missed during the probacktest, I update you as ...
Nicolas The code has been updated in the attachment of the post with the last version which contain ...
ALE Thanks as always Nicolas
2 months ago
Francesco78 very nice, thanks!
finplus Thanks for the job. Which variables do you suggest for timeframe 1 hour? 
Maz Depends massively on your market and the volatility. I suggest using the variable optimizer ...
3 months ago
HerveS_67 Bonjour, A quoi correspondent les données S, M, L ? Hello, What do the data S, M, L?
gabri Excellent job like always!! are you working also on the Barycenter indicator?
Nicolas No but I think you can find a lot of different version of the "center of gravity - COG" indi...
Francesco78 Hi Juan Salas and thank you very much for your undeserved compliments. I'm not sure if I un...
Juan Salas Hi Francesco, Yes, this is pretty much the question. The system ask me a number of contract...
Francesco78 ok sounds good, you can put min size = 1 and go for the seasonable breakout too, also you ca...
Francesco78 Thank you Nicolas! Exactly what I was looking for :)  
rafa How can we have this on overbought? Thanks in advanced
Nicolas All conditions under parenthesis for the c1 to c4 conditions should be inverted. 
Andy 22 DRAWSEGMENT(BarBullNew, highest[(BarBullnew-BarBullOld)](close), BarBullNew+10, highest[(...
gabri Ok, I believe your version of PRT doesn't support the command drawsegment. You should check ...
Andy ok thanks!
Nicolas Another fine piece of code gabri! Excellent work again. Thanks a lot for your precious contr...
gabri Thanks Nicolas!!
bolsatrilera bravo, molto intelligente.
owes29 Do a Youtube search for "Revolutionary Indicators Reveal Tops & Bottoms" it explains a v...
owes29 Hi is there anyway to develop this for the pro scanner on daily or hourly scans. so it woul...
Nicolas Of course, please add a query in the proscreener forum.
Derek Nice strategy. Have you tried adding a stop loss since there are a few sharp drawdowns? I ...
Piston_Broke Non so .... da qui la mia domanda iniziale :-)
Piston_Broke Hi Derek. I have tried many different ways to apply SL's to this and similar versions of th...
gregus bonjour a tous quelqu un pourait il recodé en prt il sagit  du dynamique zone ma, je n arri...
Nicolas Merci de faire une requête spécifique sur le forum.