Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Stochastic RSI indicator

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Stochastic RSI indicator

    How difficult would it be for someone to code the mt4 indicator for Ninjatrader? The Stochastic RSI I have for use in Ninjatrader is not as smooth as this one nor does it pick the turning points as well. I'm really interested in the plot of the %D line.

    Thanks in advance,
    Thomas

    //+------------------------------------------------------------------+
    //| Basic StochRSI.mq4 |
    //| |
    //| |
    //+------------------------------------------------------------------+
    #property copyright ""
    #property link ""
    #property indicator_separate_window
    #property indicator_level3 20
    #property indicator_level5 80
    #property indicator_buffers 2
    #property indicator_color1 White
    #property indicator_color2 Red
    //---- input parameters
    /* Applied price constants:
    -------------------------------
    PRICE_CLOSE 0 Close price.
    PRICE_OPEN 1 Open price.
    PRICE_HIGH 2 High price.
    PRICE_LOW 3 Low price.
    PRICE_MEDIAN 4 Median price, (high+low)/2.
    PRICE_TYPICAL 5 Typical price, (high+low+close)/3.
    PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4.
    --------------------------------- */
    extern int RPrice=0;
    extern int RPeriod=14;
    extern int KPeriod=8;
    extern int DPeriod=5;
    extern int Slowing=3;
    //---- buffers
    double MainBuffer[];
    double SignalBuffer[];
    double HighesBuffer[];
    double LowesBuffer[];
    double rsi[];
    //----
    int draw_begin1=0;
    int draw_begin2=0;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    string short_name;
    //---- 3 additional buffers are used for counting.
    IndicatorBuffers(5);
    SetIndexBuffer(2, HighesBuffer);
    SetIndexBuffer(3, LowesBuffer);
    SetIndexBuffer(4, rsi);
    //---- indicator lines
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0, MainBuffer);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1, SignalBuffer);
    //---- name for DataWindow and indicator subwindow label
    short_name="StochRSI("+RPeriod+","+KPeriod+","+DPe riod+","+Slowing+")";
    IndicatorShortName(short_name);
    SetIndexLabel(0,short_name);
    SetIndexLabel(1,"Signal");
    //----
    draw_begin1=KPeriod+Slowing;
    draw_begin2=draw_begin1+DPeriod;
    SetIndexDrawBegin(0,draw_begin1);
    SetIndexDrawBegin(1,draw_begin2);
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Stochastics formula applied to RSI |
    //+------------------------------------------------------------------+
    int start()
    {
    int i,k;
    int counted_bars=IndicatorCounted();
    //---- check Slowing
    if (Slowing<=0) Slowing=1;
    //----
    if(Bars<=draw_begin2) return(0);
    //---- initial zero
    if(counted_bars<1)
    {
    for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0;
    for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0;
    }
    //---- initial RSI
    i=Bars-RPeriod;
    if(counted_bars>RPeriod) i=Bars-counted_bars-1;
    while(i>=0){rsi[i]=iRSI(NULL,0,RPeriod,RPrice,i); i--; }
    //---- minimums & maximums counting
    i=Bars-KPeriod;
    if(counted_bars>KPeriod) i=Bars-counted_bars-1;
    while(i>=0)
    {
    double min=1000000, max=-1000000;
    k=i+KPeriod-1;
    while(k>=i)
    {
    min=MathMin(min,rsi[k]);
    max=MathMax(max,rsi[k]);
    k--;
    }
    LowesBuffer[i]=min;
    HighesBuffer[i]=max;
    i--;
    }
    //---- %K line of RSI
    i=Bars-draw_begin1;
    if(counted_bars>draw_begin1) i=Bars-counted_bars-1;
    while(i>=0)
    {
    double sumlow=0.0;
    double sumhigh=0.0;
    for(k=(i+Slowing-1);k>=i;k--)
    {
    sumlow+=rsi[k]-LowesBuffer[k];
    sumhigh+=HighesBuffer[k]-LowesBuffer[k];
    }
    if(sumhigh==0.0) MainBuffer[i]=100.0;
    else MainBuffer[i]=sumlow/sumhigh*100;
    i--;
    }
    //---- last counted bar will be recounted
    if(counted_bars>0) counted_bars--;
    int limit=Bars-counted_bars;
    //---- signal line is simple movimg average
    for(i=0; i<limit; i++)
    SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i);
    //----
    return(0);
    }
    //+------------------------------------------------------------------+

    #2
    As a last resort you could also try contacting one of the 3rd party NinjaScript Consultants here: http://www.ninjatrader.com/webnew/pa...injaScript.htm
    Josh P.NinjaTrader Customer Service

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by love2code2trade, Yesterday, 01:45 PM
    4 responses
    28 views
    0 likes
    Last Post love2code2trade  
    Started by funk10101, Today, 09:43 PM
    0 responses
    7 views
    0 likes
    Last Post funk10101  
    Started by pkefal, 04-11-2024, 07:39 AM
    11 responses
    37 views
    0 likes
    Last Post jeronymite  
    Started by bill2023, Yesterday, 08:51 AM
    8 responses
    44 views
    0 likes
    Last Post bill2023  
    Started by yertle, Today, 08:38 AM
    6 responses
    26 views
    0 likes
    Last Post ryjoga
    by ryjoga
     
    Working...
    X