vvv23 Posted November 30, 2012 Report Share Posted November 30, 2012 (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 November 30, 2012 by vvv23 Quote Link to comment Share on other sites More sharing options...
san1111 Posted November 30, 2012 Report Share Posted November 30, 2012 Hi vv23, for last unclosed bar, every indi repaints. Regards Quote Link to comment Share on other sites More sharing options...
vvv23 Posted November 30, 2012 Author Report Share Posted November 30, 2012 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 Quote Link to comment Share on other sites More sharing options...
vvv23 Posted November 30, 2012 Author Report Share Posted November 30, 2012 anyone else? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.