Colby_StochEmaFilter.efs
File Name: Colby_StochEmaFilter.efs
Description:
This study is based on the December 2006 article, Stochastics With Long Term EMA Filter, by Robert Colby.
Formula Parameters:
- Stoch Upper Band: 70
- Stoch Lower Band: 30
- EMA Periods: 271
- StochK Periods: 7
- StochK Smoothing: 3
Notes:
This study requires at least 271 bars of data. As a non-price study, the formula uses the EMA study as part of the conditions for the trade signal but cannot plot the EMA on the price chart simultaneously with the StochK. If desired, add the EMA study to the price pane with the EMA from Basic Studies menu (use Length 271 with Close as the Source). When the Close is above the 271-period EMA the top half of the study pane's background will be colored green. When the Close is below the 271-period EMA, the bottom half of the study pane's background will be colored red. In addition to the background of the study pane, the price bars will be will also be colored to match the background coloring scheme. The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download File:
Colby_StochEmaFilter.efs
EFS Code:
/*************************************** Provided By : eSignal (c) Copyright 2006 Description: Stochastics With Long Term EMA Filter by Robert Colby Version 1.0 10/09/2006 Notes: * Dec 2006 Issue of Stocks and Commodities Magazine * Study requires at least 271 bars of data. * As a non-price study, the formula uses the EMA study as part of the conditions for the trade signal but cannot plot the EMA on the price chart simultaneously with the StochK. If desired, add the EMA study to the price pane with the EMA from Basic Studies menu (use Length 271 with Close as the Source). * When the Close is above the 271-period EMA the top half of the study pane's background will be colored green. When the Close is below the 271-period EMA, the bottom half of the study pane's background will be colored red. In addition to the background of the study pane, the price bars will be will also be colored to match the background coloring scheme. Formula Parameters: Default: Stoch Upper Band 70 Stoch Lower Band 30 EMA Periods 271 StochK Periods 7 StochK Smoothing 3 *****************************************************************/ function preMain() { setStudyTitle("Stochastics with EMA Filter "); setCursorLabelName("EMA", 0); setCursorLabelName("StochK", 1); setDefaultBarFgColor(Color.navy, 1); setDefaultBarThickness(2, 1); setShowTitleParameters(false); setColorPriceBars(true); setDefaultPriceBarColor(Color.grey); var fp1 = new FunctionParameter("nUpperBand", FunctionParameter.NUMBER); fp1.setName("Stoch Upper Band"); fp1.setLowerLimit(0); fp1.setDefault(70); var fp2 = new FunctionParameter("nLowerBand", FunctionParameter.NUMBER); fp2.setName("Stoch Lower Band"); fp2.setLowerLimit(0); fp2.setDefault(30); var fp3 = new FunctionParameter("nMAlen", FunctionParameter.NUMBER); fp3.setName("EMA Periods"); fp3.setLowerLimit(1); fp3.setDefault(271); var fp4 = new FunctionParameter("nKlen", FunctionParameter.NUMBER); fp4.setName("StochK Periods"); fp4.setLowerLimit(1); fp4.setDefault(7); var fp5 = new FunctionParameter("nKsma", FunctionParameter.NUMBER); fp5.setName("StochK Smoothing"); fp5.setLowerLimit(1); fp5.setDefault(3); } // Global Variables var bVersion = null; // Version flag var bInit = false; // Initialization flag var xMA = null; // EMA series var xStochK = null; // StochK series // Strategy Variables var vPosition = 0; // position status (1=long, 0=flat, -1=short) var bRealTime = false; // back testing flag function main(nUpperBand, nLowerBand, nMAlen, nKlen, nKsma) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; var nState = getBarState(); var nIndex = getCurrentBarIndex(); var c = close(0); var c_1 = close(-1); //Initialization if (bInit == false) { addBand(nUpperBand, PS_SOLID, 1, Color.blue, "upper"); addBand(nLowerBand, PS_SOLID, 1, Color.blue, "lower"); xMA = ema(nMAlen); xStochK = stochK(nKlen, nKsma, 1); bInit = true; } var nEMA = xMA.getValue(0); var nEMA_1 = xMA.getValue(-1); var nK = xStochK.getValue(0); var nK_1 = xStochK.getValue(-1); if (nEMA_1 == null || nK_1 == null) return; // null check if (nIndex == 0) bRealTime = true; //Coloring scheme for close vs. EMA if (c >= nEMA) { setBarBgColor(Color.green, 0, 100, 50); setPriceBarColor(Color.green); } else { setBarBgColor(Color.red, 0, 50, 0); setPriceBarColor(Color.red); } // Exit Signals if (nState == BARSTATE_NEWBAR && vPosition != 0) { if (vPosition == 1) { // long if (c_1 < nEMA_1 || nK_1 > nUpperBand) { drawTextRelative(0, 50, "X", Color.white, Color.maroon, Text.CENTER|Text.FRAME|Text.BOLD|Text.BOTTOM, null, 10); drawShape(Shape.SQUARE, TopRow1, Color.khaki); vPosition = 0; if (bRealTime == false) { // back test Strategy.doSell("Long Exit", Strategy.MARKET, Strategy.THISBAR); } } } else if (vPosition == -1) { // short if (c_1 > nEMA_1 || nK_1 < nLowerBand) { drawTextRelative(0, 50, "X", Color.white, Color.maroon, Text.CENTER|Text.FRAME|Text.BOLD|Text.TOP, null, 10); drawShape(Shape.SQUARE, BottomRow1, Color.khaki); vPosition = 0; if (bRealTime == false) { // back test Strategy.doCover("Short Exit", Strategy.MARKET, Strategy.THISBAR); } } } } // Entry Signals if (nState == BARSTATE_NEWBAR) { if (vPosition != 1) { // long if (nK_1 < nLowerBand && c_1 > nEMA_1) { drawTextRelative(0, 50, "Long", Color.white, Color.blue, Text.RIGHT|Text.FRAME|Text.BOLD|Text.TOP, null, 10); vPosition = 1; if (bRealTime == false) { // back test Strategy.doLong("Long Entry", Strategy.MARKET, Strategy.THISBAR); } } } if (vPosition != -1) { // short if (nK_1 > nUpperBand && c_1 < nEMA_1) { drawTextRelative(0, 50, "Short", Color.white, Color.blue, Text.RIGHT|Text.FRAME|Text.BOLD|Text.BOTTOM, null, 10); vPosition = -1; if (bRealTime == false) { // back test Strategy.doShort("Short Entry", Strategy.MARKET, Strategy.THISBAR); } } } } // Position status if (vPosition == 1) { drawShape(Shape.SQUARE, TopRow1, Color.khaki); } else if (vPosition == -1) { drawShape(Shape.SQUARE, BottomRow1, Color.khaki); } return new Array(nEMA.toFixed(4), nK); } function verify() { var b = false; if (getBuildNumber() < 779) { drawTextAbsolute(5, 35, "This study requires version 8.0 or later.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "upgrade"); return b; } else { b = true; } return b; }