BeanTICK_Strategy.efs
EFSLibrary - Discussion Board
File Name: BeanTICK_Strategy.efs
Description:
This study is based on the May 2006 article, Using The TICK To Identify The Intraday Trend, by David Bean.
Formula Parameters:
- Local Start Time of Entry Bar: 945
- R Multiplier: 5
- Contract's Point Value: 50
- Local End Time of Trading Session: 1615
Notes:
- Study must be used on a 15 minute or lower interval only.
- Study is configured for futures contracts only.
- If used in any time zone other than US Eastern Standard time, the Start Time and End Time parameters need to be modified to local time.
- Study parameters are set for Emini S&P futures contract (ES #F=2) and Eastern Standard time.
- Study is compatible for real time use and Back Testing with the Strategy Analyzer.
- Study requires a time template that includes the bars based on the specified Start Time and End Time parameters.
This formula also requires eSignal version 7.9.1 or later. The related article is copyrighted material. If you are not a subscriber of Active Trader Magazine, please visit www.activetradermag.com.
Download File:
BeanTICK_Strategy.efs(version 2.0 updated 5/19/2006)
EFS Code:
/*************************************** Provided By : eSignal (c) Copyright 2006 Description: Using The TICK To Identify The Intraday Trend by David Bean Version 2.0 05/17/2006 Version 1.0 Notes: * May 2006 Issue of Active Trader Magazine * Study requires version 7.9.1 or higher. * Study must be used on a 15 minute or lower interval only. * Study is configured for futures contracts only. * If used in any time zone other than US Eastern Standard time, the Start Time and End Time parameters need to be modified to local time. * Study parameters are set for Emini S&P futures contract (ES #F=2) and Eastern Standard time. * Study is compatible for real time use and Back Testing with the Strategy Analyzer. * Study requires a time template that includes the bars based on the specified Start Time and End Time parameters. Version 2.0 Notes: * Logic corrected for real time processing on intervals less than 15 min for stop and limit entries. * Display enhancements to show the 830 (15 min interval) $Tick high and low as well as a blue line showing the entry price level when a trade is taken. Formula Parameters: Defaults: Local Start Time of Entry Bar 945 R Multiplier 5 Contract's Point Value 50 Local End Time of Trading Session 1615 ***************************************/ function preMain() { setPriceStudy(true); setStudyTitle("Bean TICK Strategy "); setCursorLabelName("Position", 0); setCursorLabelName("Stop", 1); setDefaultBarThickness(1, 0); setDefaultBarThickness(2, 1); setDefaultBarFgColor(Color.grey, 0); setDefaultBarFgColor(Color.red, 1); setPlotType(PLOTTYPE_DOT, 0); setPlotType(PLOTTYPE_FLATLINES, 1); setColorPriceBars(true); setDefaultPriceBarColor(Color.grey); setShowTitleParameters(false); setDefaultFont("Arial", 12 , Color.blue, Text.BOLD|Text.FRAME|Text.RIGHT) var fp1 = new FunctionParameter("nStart", FunctionParameter.NUMBER); fp1.setName("Local Start Time of Entry Bar"); fp1.setDefault(945); var fp2 = new FunctionParameter("nR", FunctionParameter.NUMBER); fp2.setName("R Multiplier"); fp2.setLowerLimit(1); fp2.setDefault(5); var fp3 = new FunctionParameter("nPoints", FunctionParameter.NUMBER); fp3.setName("Contract's Point Value"); fp3.setLowerLimit(0); fp3.setDefault(50); var fp5 = new FunctionParameter("nEnd", FunctionParameter.NUMBER); fp5.setName("Local End Time of Trading Session"); fp5.setDefault(1615); } var bVersion = null; var bInit = false; var xAvgRange = null; var sPosition = "Flat"; var nStop = null; var bBT = true; // allow back testing var bNewDay = false; var bEntryBar = false; function main(nStart, nR, nPoints, nEnd) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getInterval() > 15) { drawTextAbsolute(5, 35, "This study requires a chart interval of 15 minutes or lower.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); return; } var nState = getBarState(); var nTime = (hour(0)*100) + minute(0); if (bInit == false) { xAvgRange = efsInternal("calcAR", inv(15)); bInit = true; } if (day(0) != day(-1)) { bNewDay = true; } if (bNewDay == true) { if (nTime >= nStart) { bEntryBar = true; bNewDay = false; } } if (isLastBarOnChart() == true) bBT = false; // Exit if (sPosition != "Flat") { var nBarTime = (hour(0)*100) + minute(0); var nO = open(0); var nH = high(0); var nL = low(0); var nStopLimit = nStop; if (sPosition == "Long" && nL <= nStop) { // Exit 1 if (nO < nStop) nStopLimit = nO; if (bBT == true) Strategy.doSell("Long Stop", Strategy.STOP, Strategy.THISBAR, Strategy.ALL, nStopLimit); doPriceBarColors(); sPosition = "Flat"; Alert.playSound("train.wav"); drawShape(Shape.DIAMOND, BelowBar1, Color.khaki, "exit"+rawtime(0)); } else if (sPosition == "Short" && nH >= nStop) { // Exit 1 if (nO > nStop) nStopLimit = nO; if (bBT == true) Strategy.doCover("Short Stop", Strategy.STOP, Strategy.THISBAR, Strategy.ALL, nStopLimit); doPriceBarColors(); sPosition = "Flat"; Alert.playSound("train.wav"); drawShape(Shape.DIAMOND, AboveBar1, Color.khaki, "exit"+rawtime(0)); } else if (nBarTime >= (nEnd-getInterval()) ) { // Exit 2 if (bBT == true) { if (sPosition == "Long") Strategy.doSell("End of Day", Strategy.CLOSE, Strategy.THISBAR); if (sPosition == "Short") Strategy.doCover("End of Day", Strategy.CLOSE, Strategy.THISBAR); } doPriceBarColors(); sPosition = "Flat"; Alert.playSound("train.wav"); drawShape(Shape.DIAMOND, AboveBar1, Color.khaki); } else if (day(0) != day(-1) ) { // Exit 2 (lack of bars due to low volume) if (bBT == true) { if (sPosition == "Long") Strategy.doSell("End of Day", Strategy.MARKET, Strategy.THISBAR); if (sPosition == "Short") Strategy.doCover("End of Day", Strategy.MARKET, Strategy.THISBAR); } doPriceBarColors(); sPosition = "Flat"; Alert.playSound("train.wav"); drawShape(Shape.DIAMOND, AboveBar1, Color.khaki); } } else { if (nState == BARSTATE_NEWBAR) nStop = null; } if (nTime >= nStart+15) bEntryBar = false; // Entry if (bEntryBar == true && sPosition == "Flat") { var sTagH = "tickH" + day(0)+month(0)+year(0); var sTagL = "tickL" + day(0)+month(0)+year(0); var nEntryPrice = close(0); var nTickHigh_1 = high( -1, sym("$TICK,15")); var nTickLow_1 = low( -1, sym("$TICK,15")); var nTickClose_1 = close( -1, sym("$TICK,15")); var nOpen_1 = open( -1, inv(15)); var nHigh_1 = high( -1, inv(15)); var nLow_1 = low( -1, inv(15)); var nClose_1 = close( -1, inv(15)); var nAvgRange_1 = xAvgRange.getValue(-1); var nDailyOpen = open( 0, inv("D")); var nDailyLow_1 = low( -1, inv("D")); var nDailyClose_1 = close( -1, inv("D")); var sRule = 0; if (nTickHigh_1 == null || nTickLow_1 == null || nAvgRange_1 == null) return; // draw $Tick high and low values drawText("$Tick H: " + nTickHigh_1, AboveBar4, null, null, sTagH); drawText("$Tick L: " + nTickLow_1, BelowBar4, null, null, sTagL); // Long Entry if (nTickLow_1 > -350) { if (nTickHigh_1 > 750) { // Rule 1 sPosition = "Long"; sRule = 1; } else if (nTickClose_1 > 500) { // Rule 2 sPosition = "Long"; sRule = 2; } else if (nClose_1 > (nOpen_1 + nAvgRange_1) ) { // Rule 3 sPosition = "Long"; sRule = 3; } if (sPosition == "Long") { if (bBT == true) Strategy.doLong("Rule " + sRule, Strategy.MARKET, Strategy.THISBAR); nEntryPrice = open(0); drawShape(Shape.UPARROW, BelowBar2, Color.green, rawtime(0)); drawText(sRule, BelowBar3, Color.green, Text.CENTER|Text.BOLD, rawtime(0)); drawLineRelative(0, nEntryPrice, -2, nEntryPrice, PS_SOLID, 2, Color.blue, rawtime(0)); Alert.playSound("pop.wav"); } } // Short Entry if (sPosition == "Flat" && nTickHigh_1 < 750) { if (nDailyOpen > (nDailyLow_1 - (2*nAvgRange_1)) && nTickLow_1 < -350 && low(0) <= nDailyOpen && high(0) >= nDailyOpen) { // Rule 1 sPosition = "Short"; sRule = 1; } else if (nDailyOpen > (nDailyLow_1 - (2*nAvgRange_1)) && nTickClose_1 < -100 && low(0) <= nDailyOpen && high(0) >= nDailyOpen) { // Rule 2 sPosition = "Short"; sRule = 2; } else if (nClose_1 > nDailyClose_1 && nTickLow_1 < -350 && low(0) <= nDailyClose_1 && high(0) >= nDailyClose_1) { // Rule 3 sPosition = "Short"; sRule = 3; } else if (nClose_1 > nDailyClose_1 && nTickClose_1 < -100 && low(0) <= nDailyClose_1 && high(0) >= nDailyClose_1) { // Rule 4 sPosition = "Short"; sRule = 4; } else if (nClose_1 < (nOpen_1 - nAvgRange_1) ) { // Rule 5 sPosition = "Short"; sRule = 5; } if (sPosition == "Short") { if (bBT == true) { if (sRule == 1 || sRule == 2) { Strategy.doShort("Rule " + sRule, Strategy.LIMIT, Strategy.THISBAR, Strategy.DEFAULT, nDailyOpen); nEntryPrice = nDailyOpen; } else if (sRule == 3 || sRule == 4) { Strategy.doShort("Rule " + sRule, Strategy.STOP, Strategy.THISBAR, Strategy.DEFAULT, nDailyClose_1); nEntryPrice = nDailyClose_1; } else if (sRule == 5) { Strategy.doShort("Rule " + sRule, Strategy.MARKET, Strategy.THISBAR); nEntryPrice = open(0); } } drawShape(Shape.DOWNARROW, AboveBar2, Color.red, rawtime(0)); drawText(sRule, AboveBar3, Color.red, Text.CENTER|Text.BOLD, rawtime(0)); drawLineRelative(0, nEntryPrice, -2, nEntryPrice, PS_SOLID, 2, Color.blue, rawtime(0)); Alert.playSound("ding.wav"); } } // Set Stop if (sPosition != "Flat") { bEntryBar = false; nStop = (nR * nPoints * xAvgRange.getValue(0)) / nPoints; if (sPosition == "Long") { nStop = open(0) - nStop; } else if (sPosition == "Short") { if (sRule == 1 || sRule == 2) nStop = nDailyOpen + nStop; else if (sRule == 3 || sRule == 4) nStop = nDailyClose_1 + nStop; else if (sRule == 5) nStop = open(0) + nStop; } } } // Color Price Bars doPriceBarColors(); return new Array(sPosition, nStop); } function doPriceBarColors() { if (Strategy.isLong() || sPosition == "Long") setPriceBarColor(Color.green); else if (Strategy.isShort() || sPosition == "Short") setPriceBarColor(Color.red); return; } var xRange = null; function calcAR(nInv) { if (xRange == null) xRange = efsInternal("calcRange"); return sma(27, xRange); } function calcRange() { return high(-1) - low(-1); } function verify() { var b = false; if (getBuildNumber() < 730) { drawTextAbsolute(5, 35, "This study requires version 7.9.1 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; }