I was wondering if anyone here would translate this E-Signal coding into a Tradestation ELD Cloby Indicator. In E-Signal it has shaded area above and below the 0 line but not on the Trade Station eld found on TradeStation forums.
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 b e will also be colored to match the
background coloring sc heme.
Formula Parameters: Default:
Stoch Upper Band 70
Stoch Lower Band 30
EMA Periods 271
StochK Periods 7
StochK Smoothing 3
************************* ************************* ***************/
function preMain() {
setStudyTitle("Stochastic s with EMA Filter ");
setCursorLabelName("EMA", 0);
setCursorLabelName("Stoch K", 1);
setDefaultBarFgColor(Colo r.navy, 1);
setDefaultBarThickness(2, 1);
setShowTitleParameters(fa lse);
setColorPriceBars(true);
setDefaultPriceBarColor(C olor.grey);
var fp1 = new FunctionParameter("nUpper Band", FunctionParameter.NUMBER) ;
fp1.setName("Stoch Upper Band");
fp1.setLowerLimit(0);
fp1.setDefault(70);
var fp2 = new FunctionParameter("nLower Band", 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.aqua, 0, 100, 50);
setPriceBarColor(Color.aq ua);
} else {
setBarBgColor(Color.red, 0, 50, 0);
setPriceBarColor(Color.re d);
}
// 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|Te xt.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);
}
&n bsp; }
} el se if (vPosition == -1) { // short
if (c_1 > nEMA_1 || nK_1 < nLowerBand) {
drawTextRelative(0, 50, "X", Color.white, Color.maroon,
Text.CENTER|Text.FRAME|Te xt.BOLD|Text.TOP, null, 10);
drawShape(Shape.SQUARE, BottomRow1, Color.khaki);
vPosition = 0;
if (bRealTime == false) { // back test
&n bsp; Strat egy.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.F RAME|Text.BOLD|Text.TOP, null, 10);
&n bsp; 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) {
drawTextRe lative(0, 50, "Short", Color.white, Color.blue,
Text.RIGHT|Text.FRAME|Tex t.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|Tex t.RELATIVETOLEFT|Text.BOL D|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|Tex t.RELATIVETOLEFT|Text.BOL D|Text.LEFT,
&nb sp; null, 13, "upgrade");
&nb sp; return b;
} else {
b = true;
}
return b;
}