/*****************************************************************Provided By : eSignal. (c) Copyright 2004Study: Advance Issues Momentum by Lawrence Chan and Louis LinVersion: 1.06/7/2004Notes:Due to the EFS symbol limit of 7, this study was modified to use thefollowing index symbols as the default. Up to 7 symbols may be enteredthrough Edit Studies.Formula Parameters: Default:Momentum Length 20Symbol 1 $BANK - Nasdaq BankingSymbol 2 $NBI - Nasdaq BiotechSymbol 3 $IXCO - Nasdaq ComputerSymbol 4 $IXF - Nasdaq FinancialSymbol 5 $IXTC - Nasdaq TelecommunicationsSymbol 6 NASymbol 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;} |