Jump to content

⤴️-Paid Ad- Check advertising disclaimer here. Add your banner here.🔥

why would Stochastic RSi on Open prices repaint current 0 bar.??..


Recommended Posts

Posted (edited)

HI

 

why would RSi on Open prices repaint current 0 bar... I ve been on this for a coupel of weeks now and it's just getting me gray hairs..

 

Here is the code for RSI . why would it repaint current bar???? :)

 

I use it in the stochastic RSi that has the code below it as well. the stochastic RSI repaints as well..

 

I am especially interested in knowing why would the stoch rsi repaints since it is based on the RSI. the Stoch rsi is the second code below. thanks

 

there are 2 codes here. the first RSi the second Stoch RSI. thanks

 

Why? Anybody?


//---- input parameters
extern int RSIPeriod=14;
//---- buffers
double RSIBuffer[];
double PosBuffer[];
double NegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
  string short_name;
//---- 2 additional buffers are used for counting.
  IndicatorBuffers(3);
  SetIndexBuffer(1,PosBuffer);
  SetIndexBuffer(2,NegBuffer);
//---- indicator line
  SetIndexStyle(0,DRAW_LINE);
  SetIndexBuffer(0,RSIBuffer);
//---- name for DataWindow and indicator subwindow label
  short_name="RSI("+RSIPeriod+")";
  IndicatorShortName(short_name);
  SetIndexLabel(0,short_name);
//----
  SetIndexDrawBegin(0,RSIPeriod);
//----
  return(0);
 }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
 {
  int    i,counted_bars=IndicatorCounted();
  double rel,negative,positive;
//----
  if(Bars<=RSIPeriod) return(0);
//---- initial zero
  if(counted_bars<1)
     for(i=1;i<=RSIPeriod;i++) RSIBuffer[bars-i]=0.0;
//----
  i=Bars-RSIPeriod-1;
  if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
  while(i>=0)
    {
     double sumn=0.0,sump=0.0;
     if(i==Bars-RSIPeriod-1)
       {
        int k=Bars-2;
        //---- initial accumulation
        while(k>=i)
          {
           rel=Open[k]-Open[k+1];
           if(rel>0) sump+=rel;
           else      sumn-=rel;
           k--;
          }
        positive=sump/RSIPeriod;
        negative=sumn/RSIPeriod;
       }
     else
       {
        //---- smoothed moving average
        rel=Open[i]-Open[i+1];
        if(rel>0) sump=rel;
        else      sumn=-rel;
        positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
        negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
       }
     PosBuffer[i]=positive;
     NegBuffer[i]=negative;
     if(negative==0.0) RSIBuffer[i]=0.0;
     else RSIBuffer[i]=100.0-100.0/(1+positive/negative);
     i--;
    }


//---- input parameters
extern int RSI_Periods=14;
extern int Percent_K=14;
extern int Percent_D=9;
extern int NumOfBars=0;

//---- buffers
double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexBuffer(0,Buffer1);
SetIndexLabel(0,"StochRSI");
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(1,Buffer2);
SetIndexLabel(1,"Signal");

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here

//----
return(0);
}

 

 

[/code]

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

double Current_RSI,Lowest_RSI,Highest_RSI,sum_K;

//---- TODO: add your code here

if(NumOfBars==0)NumOfBars=Bars;

for(int i=NumOfBars-MathMax(RSI_Periods,Percent_K)-1;i>=0;i--){

Current_RSI=iRSI(NULL,0,RSI_Periods,PRICE_OPEN,i);

Highest_RSI=Current_RSI;

Lowest_RSI=Current_RSI;

 

for(int x=0;x<=Percent_K;x++){

Lowest_RSI=MathMin(Lowest_RSI,iRSI(NULL,0,RSI_Periods,PRICE_OPEN,i+x));

Highest_RSI=MathMax(Highest_RSI,iRSI(NULL,0,RSI_Periods,PRICE_OPEN,i+x));

}

 

sum_K=0;

for(x=0;x<=Percent_D;x++) sum_K=sum_K+Buffer1[i+x];

 

Buffer1=((Current_RSI-Lowest_RSI)/(Highest_RSI-Lowest_RSI))*100;

Buffer2=sum_K/Percent_D;

}

//----

return(0);

}

//+------------------------------------------------------------------+

[/code]

Edited by vvv23
Posted
Hi vv23,

 

for last unclosed bar, every indi repaints.

 

Regards

 

THANKS FOR YOUR RESPONSE.but if you look i am using Open_Price not Price_Close, so it should not repaint at all since there is only 1 open price per bar

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


⤴️-Paid Ad- Check advertising disclaimer here. Add your banner here.🔥

×
×
  • Create New...