2004 Aug: AdvanceIssuesMom.efs

ICE Data Services -

AdvanceIssuesMom.efs  

EFSLibrary - Discussion Board  

File Name: AdvanceIssuesMom.efs


Description:
This formula is based on Boosting Profitability by Lawrence Chan and Louis Lin. This article appeared in the August 2004 issue of Stock & Commodities.

 

Formula Parameters:

  • Momentum Length - 20
  • Symbol 1 - $BANK - Nasdaq Banking
  • Symbol 2 - $NBI - Nasdaq Biotech
  • Symbol 3 - $IXCO - Nasdaq Computer
  • Symbol 4 - $IXF - Nasdaq Financial
  • Symbol 5 - $IXTC - Nasdaq Telecommunications
  • Symbol 6 - NA
  • Symbol 7 - NA

Notes:
eSignal Advanced charts has a symbol limit of 7. Therefore the maximum limit for the basket of symbols to include in the Advance Issues Momentum study is 7. The default basket of symbols is currently set to $BANK (Nasdaq Banking), $NBI (Nasdaq Biotech), $IXCO (Nasdaq Computer), $IXF (Nasdaq Financial) and $IXTC (Nasdaq Telecommunications). Due to the restricted number of symbols there is also a small modification to the trading signals that requires the AIM number to be less than or equal to half of the total number of symbols to enter a long position. The article uses a ratio equal to two thirds, which was a bit too restrictive for a smaller number of symbols. The study is compatible with the Strategy Analyzer for back testing as well as real time usage. The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.

Download File:
AdvanceIssuesMom.efs


EFS Code:

/*****************************************************************
Provided By : eSignal. (c) Copyright 2004
Study:        Advance Issues Momentum by Lawrence Chan and Louis Lin
Version:      1.0

6/7/2004

Notes:
Due to the EFS symbol limit of 7, this study was modified to use the
following index symbols as the default.  Up to 7 symbols may be entered
through Edit Studies.

Formula Parameters:                 Default:
Momentum Length                     20
Symbol 1                            $BANK   - Nasdaq Banking
Symbol 2                            $NBI    - Nasdaq Biotech
Symbol 3                            $IXCO   - Nasdaq Computer
Symbol 4                            $IXF    - Nasdaq Financial
Symbol 5                            $IXTC   - Nasdaq Telecommunications
Symbol 6                            NA
Symbol 7                            NA
*****************************************************************/


function preMain() {
    setStudyTitle("Advance Issues Momentum ");
    setShowTitleParameters(false);
    setCursorLabelName("AIM", 0);
    setDefaultBarFgColor(Color.black, 0);
    setDefaultBarThickness(2, 0);
    
    var fp0 = new FunctionParameter("nMomLen", FunctionParameter.NUMBER);
    fp0.setName("Momentum Length");
    fp0.setLowerLimit(1);
    fp0.setDefault(20);
    
    var fp1 = new FunctionParameter("sSym1", FunctionParameter.STRING);
    fp1.setName("Symbol 1");
    fp1.setDefault("$BANK");

    var fp2 = new FunctionParameter("sSym2", FunctionParameter.STRING);
    fp2.setName("Symbol 2");
    fp2.setDefault("$NBI");

    var fp3 = new FunctionParameter("sSym3", FunctionParameter.STRING);
    fp3.setName("Symbol 3");
    fp3.setDefault("$IXCO");

    var fp4 = new FunctionParameter("sSym4", FunctionParameter.STRING);
    fp4.setName("Symbol 4");
    fp4.setDefault("$IXF");

    var fp5 = new FunctionParameter("sSym5", FunctionParameter.STRING);
    fp5.setName("Symbol 5");
    fp5.setDefault("$IXTC");

    var fp6 = new FunctionParameter("sSym6", FunctionParameter.STRING);
    fp6.setName("Symbol 6");
    fp6.setDefault("");

    var fp7 = new FunctionParameter("sSym7", FunctionParameter.STRING);
    fp7.setName("Symbol 7");
    fp7.setDefault("");
}


var bEdit = true;
var aSym = new Array(8);
var aPrice0 = new Array(8);
var aPriceN = new Array(8);
var aAIM = new Array(4);
var vAIM = 0;
var nCount = 0;
var vColor = null;

function main(nMomLen, sSym1, sSym2, sSym3, sSym4, sSym5, sSym6, sSym7) {
    var nState = getBarState();
    var nIndex = getCurrentBarIndex();
    var i;    
    
    if (bEdit == true) {
        aSym[0] = getSymbol();
        for (i = 1; i < 8; ++i) {
            aSym[i] = eval("sSym"+i);
            if (aSym[i] != null && aSym[i] != "") nCount++
        }
        setStudyMax(nCount +1);
        setStudyMin(-1);
        bEdit = false;
    }
    
    if (nState == BARSTATE_NEWBAR) {
        aAIM.pop();
        aAIM.unshift(vAIM);
        for (i = 1; i < 8; ++i) {
            if (aSym[i] != null && aSym[i] != "") {
                aPriceN[i] = close(-nMomLen, aSym[i]);
            }
        }
    }
    
    for (i = 1; i < 8; ++i) {
        if (aSym[i] != null && aSym[i] != "") {
            aPrice0[i] = close(0, aSym[i]);
        }
    }
    
    // n-days momentum
    vAIM = 0;
    for (i = 1; i < 8; ++i) {
        if (aPriceN[i] != null && aPrice0[i] != null) {
            if ( (aPrice0[i] - aPriceN[i]) > 0 ) vAIM++;
        }
    }
    aAIM[0] = vAIM;
    
    // Back Testing code
    var bBT = false;
    var bLong = false;
    var bShort = false;
    if (nIndex < 0 && aAIM[3] != null) { // allow back testing
        bBT = true;
    }

    // Trading Signals
    if (aAIM[3] != null) {
        if (aAIM[3] >= aAIM[2] && aAIM[2] >= aAIM[1] && aAIM[1] < aAIM[0]) {
            if (aAIM[0] <= (0.5 * nCount) ) {
                bLong = true;
                vColor = Color.green;
            }
        } else if (aAIM[3] <= aAIM[2] && aAIM[2] <= aAIM[1] && aAIM[1] > aAIM[0]) {
            if (aAIM[0] >= (0.5 * nCount) ) {
                bShort = true;
                vColor = Color.red;
            }
        }
    }
    
    // Back Testing Code
    if (bBT == true) {
        if (Strategy.isLong() == false && bLong == true) { // long entry
            Strategy.doLong("Buy", Strategy.MARKET, Strategy.NEXTBAR);
        } else if (Strategy.isShort() == false && bShort == true) { // short entry
            Strategy.doShort("Short", Strategy.MARKET, Strategy.NEXTBAR);
        }
    }
    
    if (vColor != null) setBarBgColor(vColor);
    return vAIM;
}