File Name: HighestHighTrend.efs
Description:
This study is based on the January 2007 Trading System Lab article, Exiting After Profitable Closes, by Volker Knapp.
Formula Parameters:
Number of days for Trend Entry: 20
Number of days for Counter Trend Entry: 10
Number of days for Trend Exit: 20
Number of days for Counter Trend Exit: 8
Fixed Stop Percent: 0.10
Notes:
This system is a long only system compatible for Back Testing and real time analysis. The related article is copyrighted material. If you are not a subscriber of Active Trader Magazine, please visit www.activetradermag.com.
Download File:
HighestHighTrend.efs
EFS Code:
Description:
This study is based on the January 2007 Trading System Lab article, Exiting After Profitable Closes, by Volker Knapp.
Formula Parameters:
Number of days for Trend Entry: 20
Number of days for Counter Trend Entry: 10
Number of days for Trend Exit: 20
Number of days for Counter Trend Exit: 8
Fixed Stop Percent: 0.10
Notes:
This system is a long only system compatible for Back Testing and real time analysis. The related article is copyrighted material. If you are not a subscriber of Active Trader Magazine, please visit www.activetradermag.com.
Download File:
HighestHighTrend.efs
EFS Code:
PHP Code:
/***************************************
Provided By : eSignal (c) Copyright 2006
Description: Exiting after profitable closes
by Volker Knapp
Version 1.0 11/13/2006
Notes:
* Jan 2007 Issue of Active Trader Magazine
* Study requires version 8.0 or later.
* Long only system, compatible for Back Testing
and real time.
* Parameters optimized for Daily interval.
Formula Parameters: Default:
Number of days for Trend Entry 20
Number of days for Counter Trend Entry 10
Number of days for Trend Exit 20
Number of days for Counter Trend Exit 8
Fixed Stop Percent 0.10
*****************************************************************/
function preMain() {
setPriceStudy(true);
setStudyTitle("Highest High Trend System ");
setShowTitleParameters(false);
setCursorLabelName("HH", 0);
setCursorLabelName("LL", 1);
setCursorLabelName("Stop", 2);
setDefaultBarThickness(2, 0);
setDefaultBarThickness(2, 1);
setDefaultBarThickness(2, 2);
setDefaultBarFgColor(Color.blue, 0);
setDefaultBarFgColor(Color.blue, 1);
setDefaultBarFgColor(Color.red, 2);
setPlotType(PLOTTYPE_FLATLINES, 2);
var fp1 = new FunctionParameter("nTdays", FunctionParameter.NUMBER);
fp1.setName("Number of days for Trend Entry");
fp1.setLowerLimit(1);
fp1.setDefault(20);
var fp2 = new FunctionParameter("nCTdays", FunctionParameter.NUMBER);
fp2.setName("Number of days for Counter Trend Entry");
fp2.setLowerLimit(1);
fp2.setDefault(10);
var fp3 = new FunctionParameter("nTexit", FunctionParameter.NUMBER);
fp3.setName("Number of days for Trend Exit");
fp3.setLowerLimit(1);
fp3.setDefault(20);
var fp4 = new FunctionParameter("nCTexit", FunctionParameter.NUMBER);
fp4.setName("Number of days for Counter Trend Exit");
fp4.setLowerLimit(1);
fp4.setDefault(8);
var fp5 = new FunctionParameter("nStopPrct", FunctionParameter.NUMBER);
fp5.setName("Fixed Stop Percent");
fp5.setLowerLimit(0);
fp5.setUpperLimit(1);
fp5.setDefault(0.10);
}
// Global Variables
var bVersion = null; // Version flag
var bInit = false; // Initialization flag
var nCount = 0;
var xHH_Trend = null;
var xLL_CTrend = null;
var vPosition = 0; // 0 = flat, 1 = Trend long, 2 = Counter Trend Long
var nEntry = null; // entry price
var nStop = null; // stop price
var bExitTrade = false;
var bBT = true; // back test flag
function main(nTdays, nCTdays, nTexit, nCTexit, nStopPrct) {
if (bVersion == null) bVersion = verify();
if (bVersion == false) return;
var nState = getBarState();
//Initialization
if (bInit == false) {
xHH_Trend = upperDonchian(nTdays, high());
xLL_CTrend = lowerDonchian(nCTdays, low());
bInit = true;
}
var nH_0 = high(0);
var nL_0 = low(0);
var nC_1 = close(-1);
var nOpen = open(0);
var nHH = xHH_Trend.getValue(0);
var nLL = xLL_CTrend.getValue(0);
var nHH_1 = xHH_Trend.getValue(-1);
var nLL_1 = xLL_CTrend.getValue(-1);
if (nHH_1 == null || nLL_1 == null) return;
// Record Keeping
if (nState == BARSTATE_NEWBAR) {
bExitTrade = false;
if (vPosition == 0) {
nCount = 0;
nEntry = null;
nStop = null;
}
if (getCurrentBarIndex() == 0) bBT = false;
}
// Exit Conditions
if (vPosition != 0 && nState == BARSTATE_NEWBAR) {
var sText = "";
/*var sText = "Unprofitable Close";
if (nCount >= 1 && nC_1 < nEntry) {
// not a profitable close
// exit position
vPosition = 0;
bExitTrade = true;
}*/
nCount++;
// Trend Exit
if (vPosition == 1 && nCount >= nTexit) {
sText = "Counter Trend Exit";
bExitTrade = true;
}
// Counter Trend Exit
if (vPosition == 2 && nCount >= nCTexit) {
sText = "Counter Trend Exit";
bExitTrade = true;
}
if (bExitTrade == true) {
vPosition = 0;
drawShape(Shape.DIAMOND, AboveBar1, Color.red, "xtop"+rawtime(0));
drawShape(Shape.DIAMOND, BelowBar1, Color.red, "xbot"+rawtime(0));
Alert.playSound("train.wav");
if (bBT) {
Strategy.doSell(sText, Strategy.MARKET, Strategy.THISBAR);
}
}
}
// Fixed %Stop Exit
if (bExitTrade == false && vPosition != 0) {
if (nL_0 <= nStop) {
vPosition = 0;
bExitTrade = true;
drawShape(Shape.DIAMOND, AboveBar1, Color.red, "xtop"+rawtime(0));
drawShape(Shape.DIAMOND, BelowBar1, Color.red, "xbot"+rawtime(0));
Alert.playSound("train.wav");
if (bBT) {
Strategy.doSell("Stop Exit", Strategy.STOP, Strategy.THISBAR,
Strategy.DEFAULT, Math.min(nOpen, nStop));
}
}
}
// Entry Conditions
if (vPosition == 0 && bExitTrade == false) {
// Trend Entry
if (nH_0 > nHH_1) {
vPosition = 1;
nEntry = Math.max(nOpen, nHH_1);
nStop = nEntry * (1 - nStopPrct); // fixed stop
drawShape(Shape.UPARROW, AboveBar1, Color.green, rawtime(0));
Alert.playSound("ding.wav");
if (bBT) {
Strategy.doLong("Trend Signal", Strategy.STOP,
Strategy.THISBAR, Strategy.DEFAULT, nEntry);
}
} else if (nL_0 < nLL_1) { // Counter Trend Entry
vPosition = 2;
nEntry = Math.min(nOpen, nLL_1);
nStop = nEntry * (1 - nStopPrct); // fixed stop
drawShape(Shape.UPARROW, AboveBar1, Color.green, rawtime(0));
Alert.playSound("ding.wav");
if (bBT) {
Strategy.doLong("Counter Trend Signal", Strategy.LIMIT,
Strategy.THISBAR, Strategy.DEFAULT, nEntry);
}
}
}
return new Array(nHH, nLL, nStop);
}
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;
}