Download MetaTrader 5

RSI as an OHLC indicator ?

To add comments, please log in or register
Joao
58
Joao  

Hi all, I looking for an indicator that represents the RSI as a candle, with Open/High/Low and Close values.  Googled it but no luck.

I can code in MQL4. How can I store the OHLC values of an RSI throughout a period of time (H1, H4 etc) ?

Your help would be really appreciated. Any sample code on how to do it, would be great. Thanks.

Marco vd Heijden
Moderator
6147
Marco vd Heijden  

I suppose you could try to modify Heikin Ashi Indicator.

It already has the candlestick skeleton code if you just mess around and mod the formula but depending on your coding skills of course.

Alain Verleyen
Moderator
35041
Alain Verleyen  
Marco vd Heijden:

I suppose you could try to modify Heikin Ashi Indicator.

It already has the candlestick skeleton code if you just mess around and mod the formula but depending on your coding skills of course.

How is this request related to Heiken Ashi indicator ?
Joao
58
Joao  

Hi Marco, thanks for the suggestion. I just looked in to the Heikin Ashi indicator, but the OHLC is price based. They are already built-in the MT4 logic.

What I need to do is store ex. Open RSI[i], High RSI[i], Low RSI[i] and Close RSI[i] for every tick.

How can I do it ? 

whroeder1
17063
whroeder1  
Alain Verleyen: How is this request related to Heiken Ashi indicator ?

I thought it was obvious: "It already has the candlestick skeleton code"

Joao: What I need to do is store ex. Open RSI[i], High RSI[i], Low RSI[i] and Close RSI[i] for every tick. How can I do it ? 

HA already has buffers for OHLC. On a new bar set them. On each new tick change the high if higher, change the low if lower, store the current value in close. 

Alain Verleyen
Moderator
35041
Alain Verleyen  
Joao:

Hi Marco, thanks for the suggestion. I just looked in to the Heikin Ashi indicator, but the OHLC is price based. They are already built-in the MT4 logic.

What I need to do is store ex. Open RSI[i], High RSI[i], Low RSI[i] and Close RSI[i] for every tick.

How can I do it ? 

Store every tick ? Monitor it every tick but just save the OHLC.

Save them in a file.

Alain Verleyen
Moderator
35041
Alain Verleyen  
whroeder1:

I thought it was obvious: "It already has the candlestick skeleton code"

HA already has buffers for OHLC. On a new bar set them. On each new tick change the high if higher, change the low if lower, store the current value in close. 

HA is indicator in main window. RSI is between 0 and 100, it needs to be in a sub-window, HA indicator will not work as is to draw candlestick in a sub-window.

I was thinking the issue is how to get the values, not how to draw candlestick.

Joao
58
Joao  

Yes, that's exactly the problem. When the indicator processes old bars, there will only be one RSI value for each.

Only on the "NEW Bar" (i=0), when new ticks are processed, the OHLC values can be calculated. But as soon as you shut down MT4, the RSI OHLC will be lost again.

Joao
58
Joao  
Alexander Voronkov:

I believe that if you really want to, you can fly to space !)


That's exactly what I'm looking for. Where can I get that indicator ?

Marco vd Heijden
Moderator
6147
Marco vd Heijden  
Alain Verleyen:
How is this request related to Heiken Ashi indicator ?

Yes well we are programmers and we make things work there are always possibilities.

My idea was to drop the open and close and just use the regular price levels for those, and then create a conversion for high and low.

It is indeed a weird request but certainly do-able.

This Heiken Ashi indicator already has the candle sticks you can use modify it and use it's buffers i have done this many times its actually a very good template to start something new off.

nicholishen
1528
nicholishen  

No need to do anything with ticks. The key to RSI OHLC is using the bar OHLC. Since the RSI is using close prices, on the RSI calculation for the current bar (selected by index) you would change the close price to the high,low,etc.

   double Rsi(const int applied,const int i)
   {
      #define POS_BUFFER 1
      #define NEG_BUFFER 2
      double rsi=0;
      double prev_pos = iCustom(Symbol(),Period(),"RSI",m_rsi_period,POS_BUFFER,i+1);
      double prev_neg = iCustom(Symbol(),Period(),"RSI",m_rsi_period,NEG_BUFFER,i+1);
      double diff=0;
      if(applied==PRICE_CLOSE)
         diff=m_rates.rates[i].close - m_rates.rates[i+1].close;
      else 
      if(applied==PRICE_OPEN)
         diff=m_rates.rates[i].open - m_rates.rates[i+1].close;
      else 
      if(applied==PRICE_HIGH)
         diff=m_rates.rates[i].high - m_rates.rates[i+1].close;
      else 
      if(applied==PRICE_LOW)
         diff=m_rates.rates[i].low - m_rates.rates[i+1].close;  
         
      double curr_pos = (prev_pos*(m_rsi_period-1)+(diff>0.0?diff:0.0))/m_rsi_period;
      double curr_neg = (prev_neg*(m_rsi_period-1)+(diff<0.0?-diff:0.0))/m_rsi_period;
      if(curr_neg!=0.0)
         rsi=100.0-100.0/(1+curr_pos/curr_neg);
      else
      {
         if(curr_pos!=0.0)
            rsi=100.0;
         else
            rsi=50.0;
      }
      return rsi;
   }

Anyway... I got a little bit carried away with it.. here's the indicator.

Files:
RsiBar.mqh 4 kb
RSIBars.mq4 2 kb
123
To add comments, please log in or register