2016 Jun: ATR Breakout Entries by Ken Calhoun

ICE Data Services -

ATR_Breakout.efs  

EFSLibrary - Discussion Board  

File Name: ATR_Breakout.efs

Description:
ATR Breakout Entries by Ken Calhoun

Formula Parameters:

ATR_Breakout.efs

  • ATR Length: 14
  • Highest ATR Lookback: 14
  • SMA Length: 100
  • Use Wide Range condition: true
  • Wide Range Lookback: 7
  • Trailing Stop: 2

Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.

Download File:
ATR_Breakout.efs


EFS Code:

/*********************************
Provided By:  
eSignal (Copyright c eSignal), a division of Interactive Data 
Corporation. 2016. All rights reserved. This sample eSignal 
Formula Script (EFS) is for educational purposes only and may be 
modified and saved under a new file name.  eSignal is not responsible
for the functionality once modified.  eSignal reserves the right 
to modify and overwrite this EFS file with each new release.

Description:        
    ATR Breakout Entries by Ken Calhoun

Version:            1.00  02/08/2016

Formula Parameters:                     Default:
ATR Length                              14
Highest ATR Lookback                    14
SMA Length                              100
Use Wide Range condition                true
Wide Range Lookback                     7
Trailing Stop                           2



Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.

**********************************/

var fpArray = new Array();

function preMain(){
    
    setPriceStudy(true);
    setCursorLabelName("SMA");
    var x=0;
    fpArray[x] = new FunctionParameter("ATRLength", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);
        setUpperLimit(1000);  
        setDefault(14);
        setName("ATR Length");
    }
    fpArray[x] = new FunctionParameter("ATRlb", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);
        setUpperLimit(1000);  
        setDefault(14);
        setName("Highest ATR Lookback");
    }
    fpArray[x] = new FunctionParameter("SMALength", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);
        setUpperLimit(1000);  
        setDefault(100);
        setName("SMA Length");
    }
    fpArray[x] = new FunctionParameter("isWR", FunctionParameter.BOOLEAN);
	with(fpArray[x++]){
        setDefault(true);
        setName("Use Wide Range condition");
    }
    fpArray[x] = new FunctionParameter("RangeLen", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);
        setUpperLimit(1000);  
        setDefault(7);
        setName("Wide Range Lookback");
    }
    fpArray[x] = new FunctionParameter("TrlStop", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(0.01);		
        setDefault(2);
        setName("Trailing Stop");
    }
}

var bInit = false;
var bVersion = null;
var xClose = null;
var xHigh = null;
var xLow = null;
var bIsLong = false;
var bEntryFound = false;
var vStopPrice = null;
var vHighOfDay = null;
var xSMA = null;
var xATR = null;
var xHighestATR = null;
var xRange = null;
var xWR = null;
var vHighestHigh = null;

function main(ATRLength,ATRlb,SMALength,isWR,RangeLen, TrlStop){
    
    if (bVersion == null) bVersion = verify();
    if (bVersion == false) return;

    
    if(getBarState() == BARSTATE_ALLBARS){
        xClose = null;
        xHigh = null;
        xLow = null;
        bIsLong = false;
        bEntryFound = false;
        vStopPrice = null;
        bVersion = null;
        vHighOfDay = null;
        xSMA = null;
        xATR = null;
        xHighestATR = null;
        xRange = null;
        xWR = null;
        vHighestHigh = null;
        bInit = false;
    }

    if (!bInit){
        bIsLong = false;
        bEntryFound = false;
        xClose = close();
        xHigh = high();
        xLow = low();
        xSMA = sma(SMALength);
        xATR = atr(ATRLength);
        xHighestATR = hhv(ATRlb, xATR);
        
        if (isWR){
            xRange = efsInternal("calcRange", inv("D"));
            xWR = upperDonchian(RangeLen-1,xRange);
        }
        bInit = true;
    }
    if(xSMA.getValue(-1) == null) return;
    
    var nATR = xATR.getValue(0);
    var nSMA = xSMA.getValue(0);
    var nPrevSMA = xSMA.getValue(-1);
    var nPrevHATR = xHighestATR.getValue(-1)
    var nClose = xClose.getValue(0);
    var nLow = xLow.getValue(0);
    var nHigh = xHigh.getValue(0);
    var nPrevHigh = xHigh.getValue(-1);


    if (bIsLong){
        if (nHigh > vHighestHigh && (nLow - TrlStop) > vStopPrice) {
            vStopPrice = (nLow - TrlStop);
            vHighestHigh = nHigh
        }
        else if (nLow <= vStopPrice){
            drawTextRelative(0, AboveBar1, "\u00EA", Color.red, null, Text.PRESET|Text.CENTER, "Wingdings", 10, "Exit"+rawtime(0));
            drawText("Suggested Long Exit at "+formatPriceNumber(vStopPrice),BottomRow1,Color.red,Text.LEFT,"Text Exit"+rawtime(0));
            bIsLong = false;
            bEntryFound = false;
        }
    }
    
    if (bEntryFound && !bIsLong && nHigh >= vHighOfDay) {
        drawTextRelative(0,BelowBar1, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, "Long"+rawtime(0));
        drawText("Suggested Long Entry at "+formatPriceNumber(vHighOfDay),TopRow1,Color.green,Text.LEFT,"Text"+rawtime(0));
        bIsLong = true;
        vStopPrice = (nLow - TrlStop);
        vHighestHigh = nHigh;
    }

    if(!bIsLong && nATR >= nPrevHATR && nHigh > nSMA && nPrevSMA > nPrevHigh){
        if (!isWR || isWR && IsWideCandle()) { 
            vHighOfDay = nHigh + 0.5;
            bEntryFound = true;
        }
    }

    return nSMA;
}

function IsWideCandle(){
    if (xWR.getValue(0) > xWR.getValue(-1))
        return true;
    else return false;
}

function calcRange(){
    return high() - low();
}

function verify(){
    var b = false;
    if (getBuildNumber() < 779){
        
        drawTextAbsolute(5, 35, "This study requires version 12.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;
}