Announcement

Collapse
No announcement yet.

2008 Apr: RSI Bands, by François Bertrand

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 2008 Apr: RSI Bands, by François Bertrand

    File Name: RSI_Bands.efs

    Description:
    These studies are based on the April 2008 article, RSI Bands, by François Bertrand.

    Formula Parameters:
    Periods: 14
    Upper Band: 70
    Lower Band: 30
    Band Color: Blue
    Band Thickness: 2
    Enable Clamping: false

    Notes:
    The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.

    Download File:
    RSI_Bands.efs



    EFS Code:
    PHP Code:
    /*********************************
    Provided By:  
        eSignal (Copyright © eSignal), a division of Interactive Data 
        Corporation. 2007. All rights reserved. This sample eSignal 
        Formula Script (EFS) is for educational purposes only and may be 
        modified and saved under a new file name.  eSignal is not responsible
        for the functionality once modified.  eSignal reserves the right 
        to modify and overwrite this EFS file with each new release.
        
    Description:        RSI Bands
                        by François Bertrand

    Version:            1.0  2/5/2008

    Notes:
    * April 2008 Issue of Stocks and Commodities Magazine
    * Study requires version 8.0 or later.

    Formula Parameters:                 Defaults:
    Periods                             14
    Upper Band                          70
    Lower Band                          30
    Band Color                          Blue
    Band Thickness                      2
    Enable Clamping                     false
    **********************************/


    function preMain() {
        
    setPriceStudy(true);
        
    setStudyTitle("RSI Bands ");
        
    setCursorLabelName("RSIB70"0);
        
    setCursorLabelName("RSIB30"1);
        
    setShowTitleParameters(false);

        var 
    fp1 = new FunctionParameter("nPeriods"FunctionParameter.NUMBER);
            
    fp1.setName("Periods");
            
    fp1.setLowerLimit(0);
            
    fp1.setDefault(14);
        var 
    fp2 = new FunctionParameter("nUpper"FunctionParameter.NUMBER);
            
    fp2.setName("Upper Band");
            
    fp2.setLowerLimit(0);
            
    fp2.setDefault(70);
        var 
    fp3 = new FunctionParameter("nLower"FunctionParameter.NUMBER);
            
    fp3.setName("Lower Band");
            
    fp3.setLowerLimit(0);
            
    fp3.setDefault(30);
        var 
    fp4 = new FunctionParameter("cColor"FunctionParameter.COLOR);
            
    fp4.setName("Band Color");
            
    fp4.setDefault(Color.blue);
        var 
    fp5 = new FunctionParameter("nThick"FunctionParameter.NUMBER);
            
    fp5.setName("Band Thickness");
            
    fp5.setLowerLimit(1);
            
    fp5.setDefault(2);
        var 
    fp6 = new FunctionParameter("bClamp"FunctionParameter.BOOLEAN);
            
    fp6.setName("Enable Clamping");
            
    fp6.setDefault(false);
    }


    // Global Variables
    var bVersion  null;    // Version flag
    var bInit     false;   // Initialization flag

    var xUpperRSI null;
    var 
    xLowerRSI null;

    function 
    main(nPeriodsnUppernLowercColornThickbClamp) {
        var 
    nState getBarState();
        var 
    nIndex getCurrentBarIndex();
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;    
        
        
        if (
    bInit == false) {
            
    setStudyTitle("RSI Bands (" nPeriods ", " nUpper ", " nLower ")");
            
    setCursorLabelName("RSIB"+nUpper0);
            
    setCursorLabelName("RSIB"+nLower1);
            
    setDefaultBarFgColor(cColor0);
            
    setDefaultBarFgColor(cColor1);
            
    setDefaultBarThickness(nThick0);
            
    setDefaultBarThickness(nThick1);
            
            
    xUpperRSI efsInternal("RSI_Band"nPeriodsnUpperbClamp );
            
    xLowerRSI efsInternal("RSI_Band"nPeriodsnLowerbClamp );
            
            
    bInit true;
        }
        
        var 
    nUpperRSI xUpperRSI.getValue(0);
        var 
    nLowerRSI xLowerRSI.getValue(0);
        if (
    nUpperRSI == null || nLowerRSI == null) return;
        
        return new Array(
    nUpperRSInLowerRSI);    
    }


    var 
    result null;
    var 
    result_1 null;
    var 
    0;
    var 
    0;
    var 
    P_1 0;
    var 
    N_1 0;

    function 
    RSI_BandperiodTargetRSILevelclamp ) {
        var 
    diff null;
        var 
    HypotheticalCloseToMatchRSITarget 0;
        var 
    nState getBarState();

        if (
    nState == BARSTATE_NEWBAR) {
            
    result_1 result;
            
    P_1 P;
            
    N_1 N;
        }
        
        if (
    close(-period) == null) return;

        var 
    0;
        var 
    0;
        var 
    diff close(0) - close(-1);
        if( 
    diff diff;
        if( 
    diff = -diff;
        
    // Compute the hypothetical price close to reach the target RSI level
        // based on yesterday’s RSI and close
        // Depending on if we would need the price to increase or decrease,
        // we use a different formula
        
    if (result_1 != null && result_1 close(-1)) {
            
    HypotheticalCloseToMatchRSITarget close(-1)+P_1-P_1*period-((N_1*period)-N_1)*TargetRSILevel /(TargetRSILevel 100);
        } else {
            
    HypotheticalCloseToMatchRSITarget close(-1)-N_1-P_1+N_1*period+P_1*period+(100*P_1)/TargetRSILevel -(100*P_1*period)/TargetRSILevel;
        }
        
        if (
    clamp == true) {
            
    // Optional clamping code
            // Enable the clamping option in Edit Studies if parameters used cause too much volatility.
            // (generally caused by using a very short period) This will keep the RSI Bands
            // within roughly 10% of the price
            
    if ( (HypotheticalCloseToMatchRSITarget close(-1)) > 0.1*close(-1)) {
                
    HypotheticalCloseToMatchRSITarget close(-1)*1.1;
            } else if ( (
    HypotheticalCloseToMatchRSITarget close(-1)) < -0.1*close(-1)) {
                
    HypotheticalCloseToMatchRSITarget close(-1)*0.9;
            }
            
    // Resume standard RSI code to update the running P and N averages
        
    }
        
        
    = ( ( period -) * P_1 ) / period;
        
    = ( ( period -) * N_1 ) / period;

        if (
    getCurrentBarCount() >= period) {
            
    result HypotheticalCloseToMatchRSITarget;
            return 
    result;
        } else {
            return 
    null;
        }
    }


    function 
    verify() {
        var 
    false;
        if (
    getBuildNumber() < 779) {
            
    drawTextAbsolute(535"This study requires version 8.0 or later."
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"error");
            
    drawTextAbsolute(520"Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp"
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"upgrade");
            return 
    b;
        } else {
            
    true;
        }
        
        return 
    b;

    Jason K.
    Project Manager
    eSignal - an Interactive Data company

    EFS KnowledgeBase
    JavaScript for EFS Video Series
    EFS Beginner Tutorial Series
    EFS Glossary
    Custom EFS Development Policy

    New User Orientation
Working...
X