Indicator Script

Stochastic RSI [SRSI]

Summary:
This indicator script measures the size of the underlying symbol's recent gains to the size of its recent losses and produces a number.

Range:
0 To 100

Developer:
J. Welles Wilder

Interpretation:
1. Overbought: When the underlying symbol is moving upwards, but the indicator script is approaching its upper bound, the underlying symbol is likely to reverse direction and move downwards.
2. Oversold: When the underlying symbol is moving downwards, but the indicator script is approaching its lower bound, the underlying symbol is likely to reverse direction and move upwards.
3. Positive Divergence: When the underlying symbol is moving downwards, but the indicator script is moving upwards, the underlying symbol is likely to reverse direction and move upwards.
4. Negative Divergence: When the underlying symbol is moving upwards, but the indicator script is moving downwards, the underlying symbol is likely to reverse direction and move downwards.

#region Namespacesusing System;
#endregionnamespace ScriptCode {
///<summary>/// Indicator scripts are used for calculating a series of numerical values.
////// This script can be used in several ways:
/// (1) It can be used on a chart.
/// (2) It can be used from another script.
/// (3) It can be used as a script column in a watchlist.
///</summary>publicpartialclass MyIndicator : IndicatorScriptBase // NEVER CHANGE THE CLASS NAME {
#region Variables// Use for the underlying indicator on which to calculate the indicator script.private Indicator _indicator;
// Use for the number of periods to include in the indicator script calculation.privateint _periods;
// Use for the RSI indicator.private Indicator _RSI;
#endregion#region OnInitialize///<summary>/// This function accepts the user parameters for the script and is called when a new indicator instance is created.
/// One of the parameters accepted by it must be that of a symbol or another script that is
/// based on a symbol (drawing, indicator, pattern or signal). This symbol will be used as the underlying symbol for the indicator.
////// The parameter values can be specified from the user interface (UI) or from another script, depending on usage.
///</summary>/// --------------------------------------------------------------------------------------------------
/// PLEASE USE THE SCRIPT WIZARD (CTRL+W) TO ADD, EDIT AND REMOVE THE SCRIPT PARAMETERS
/// --------------------------------------------------------------------------------------------------
/// YOU MUST SET A PARAM TAG FOR EACH PARAMETER ACCEPTED BY THIS FUNCTION.
/// ALL PARAM TAGS SHOULD BE SET IN THE 'OnInitialize' REGION, RIGHT ABOVE THE 'OnInitialize' FUNCTION.
/// THE ORDER OF THE TAGS MUST MATCH THE ORDER OF THE ACTUAL PARAMETERS.
/// REQUIRED ATTRIBUTES:
/// (1) name: The exact parameter name.
/// (2) type: The type of data to collect from the user:
/// Set to "Integer" when the data type is 'int'
/// Set to "IntegerArray" when the data type is 'int[]'
/// Set to "DateTime" when the data type is 'long'
/// Set to "DateTimeArray" when the data type is 'long[]'
/// Set to "Boolean" when the data type is 'bool'
/// Set to "BooleanArray" when the data type is 'bool[]'
/// Set to "Double" when the data type is 'double'
/// Set to "DoubleArray" when the data type is 'double[]'
/// Set to "String" when the data type is 'string'
/// Set to "StringArray" when the data type is 'string[]'
/// Set to "Indicator" when the data type is 'Indicator'
/// Set to "Pattern" when the data type is 'Pattern'
/// Set to "Signal" when the data type is 'Signal'
/// Set to "Drawing" when the data type is 'Drawing'
/// Set to "Symbol" when the data type is 'int' representing a symbol index.
/// OPTIONAL ATTRIBUTES:
/// (3) default: The default parameter value is only valid when the type is Integer, Boolean, Double or String.
/// (4) min: The minimum parameter value is only valid when the type is Integer or Double.
/// (5) max: The maximum parameter value is only valid when the type is Integer or Double.
/// EXAMPLE: <param name="" type="" default="" min="" max="">Enter the parameter description here.</param>/// --------------------------------------------------------------------------------------------------
///<param name="indicator" type="Indicator">Use for the underlying indicator on which to calculate the indicator script.</param>///<param name="periods" type="Integer" default="14" min="1">Use for the number of periods to include in the indicator script calculation.</param>publicvoid OnInitialize(Indicator indicator, int periods) {
// Set the indicator. _indicator = indicator;
// Set the number of periods. _periods = periods;
// Get the RSI indicator. _RSI = IndicatorRSI(indicator, periods);
}
#endregion#region OnBarUpdate///<summary>/// This function is used for calculating the indicator value for the latest bar (see the Indicator functions).
///</summary>///<returns>The indicator value for the latest bar.</returns>publicoverridedouble OnBarUpdate() {
double high =0;
double low =double.MaxValue;
// Iterate over the values.for (int i =0; i < _periods; i++) {
// Check whether a new high exists.if (_RSI[i] > high)
// Set the new high. high = _RSI[i];
// Check whether a new low exists.if (_RSI[i] < low)
// Set the new low. low = _RSI[i];
}
// Check whether the high and low are valid.if (high != low)
// Return the SRSI.return (_RSI[0] - low) / (high - low);
elsereturn0;
}
#endregion#region OnChartSetup///<summary>/// This function is used for setting up the indicator on the chart and registering its pens (see the IndicatorRegisterPen function).
///</summary>publicoverridevoid OnChartSetup() {
// Register a pen. IndicatorRegisterPen(0, "Pen", newbyte[] { 150, 150, 150, 200}, IQ_DashStyle.SOLID, 2);
// Set the indicator in a new chart panel. IndicatorChartSetNewPanel(true);
// Set the plot style. IndicatorChartSetPlotStyle(IQ_PlotStyle.LINE);
// Set the indicator range. IndicatorChartSetRange(0, 1);
// Set the overbought range. IndicatorChartSetColorZone(0.8, 0.8, newbyte[] { 175, 25, 25, 200}, newbyte[] { 175, 25, 25, 200}, newbyte[] { 175, 25, 25, 200}, IQ_DashStyle.SOLID, 2);
// Set the oversold range. IndicatorChartSetColorZone(0.2, 0.2, newbyte[] { 25, 200, 25, 200}, newbyte[] { 25, 200, 25, 200}, newbyte[] { 25, 200, 25, 200}, IQ_DashStyle.SOLID, 2);
}
#endregion#region OnSelectPen///<summary>/// This function is used for selecting a registered indicator pen with which to color the latest indicator value.
/// Call the IndicatorRegisterPen function from the OnChartSetup function in order to register an indicator pen.
///</summary>///<returns>The indicator pen index to use for coloring the latest indicator value.</returns>publicoverridebyte OnSelectPen() {
// Color the indicator value with the zero pen.return0;
}
#endregion
}
}

Product

Support

Company

RISK DISCLOSURE: Equities, Futures and Forex trading contains substantial risk and is not for every investor. An investor could potentially lose all or more than his initial investment. Risk capital is money that can be lost without jeopardizing ones financial security or lifestyle. Only risk capital should be used for trading and only those with sufficient risk capital should consider trading. Past performance is not an indication of future performance.