Automatic Trend Lines

ICE Data Services -

AutoTrendLines.efs  

EFSLibrary - Discussion Board  

File Name: AutoTrendLines.efs

Description:
The Trend lines Automatic indicator plots trend lines at significant high and low points on a chart, helping to determine market direction, breakouts, and market reversals.

Formula Parameters:

  • High Swing Strength: 4
  • Low Swing Strength: 4
  • Length of Rays: 0
  • Number Trendlines displayed: 100
  • Lookback period (# bars): 100
  • Thickness Resistance lines: 1
  • Thickness Support lines: 1
  • Color Resistance lines: Red
  • Color Support lines: Blue
  • Display Title Parameters: False

Notes:

Download File:
AutoTrendLines.efs



EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2008. 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:        
    The Trendlines Automatic indicator plots trendlines at significant high
    and low points on a chart, helping to determine market direction, breakouts,
    and market reversals.
 

Version:            1.0  08/08/2008


Notes:

* - -

Formula Parameters:                          Default:
    * High Swing Strength                       4 
    * Low Swing Strength                        4
    * Length of Rays                            0  
    * Number Trendlines displayed               100
    * Lookback period (# bars)                  100
    * Thickness Resistance lines                1
    * Thickness Support lines                   1
    * Color Resistance lines                    Red
    * Color Support lines                       Blue
    * Display Title Parameters                  False
**********************************/


var fpArray = new Array();
var LineIndexS = 0;
var LineIndexR = 0;


function preMain() {
    setPriceStudy(true);
    setStudyTitle("Auto Trend Lines");
    setShowCursorLabel(false);

    askForInput();
    var x=0;
    fpArray[x] = new FunctionParameter("SwHiStrength", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("High Swing Strength");
        setLowerLimit(1);        
        setDefault(4);
    }

    fpArray[x] = new FunctionParameter("SwLoStrength", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Low Swing Strength");
        setLowerLimit(1);        
        setDefault(4);
    }

    fpArray[x] = new FunctionParameter("LengthRaysLine", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Length of Rays");
        setLowerLimit(0);        
        setDefault(0);
    }

    fpArray[x] = new FunctionParameter("NumberTrendLine", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Number Trendlines displayed");
        setLowerLimit(1);        
        setDefault(100);
    }

    fpArray[x] = new FunctionParameter("BackHistoryViewBars", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Lookback period (# bars)");
        setLowerLimit(1);        
        setDefault(100);
    }

    fpArray[x] = new FunctionParameter("ResistanceThickness", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Thickness Resistance lines");
        setLowerLimit(1);        
        setDefault(1);
    }

    fpArray[x] = new FunctionParameter("SupportThickness", FunctionParameter.NUMBER);
    with(fpArray[x++]){
        setName("Thickness Support lines");
        setLowerLimit(1);        
        setDefault(1);
    }

    fpArray[x] = new FunctionParameter("ResistanceColor", FunctionParameter.COLOR);
    with(fpArray[x++]){
        setName("Color Resistance lines");
        setDefault(Color.red);
    }    

    fpArray[x] = new FunctionParameter("SupportColor", FunctionParameter.COLOR);
    with(fpArray[x++]){
        setName("Color Support lines");
        setDefault(Color.blue);
    }    

    fpArray[x] = new FunctionParameter("Parameters", FunctionParameter.BOOLEAN);
    with(fpArray[x++]){
        setName("Display Title Parameters");
        setDefault(false);
    }    

}

function main(SwHiStrength, SwLoStrength, ResistanceThickness, ResistanceColor, SupportThickness, 
              SupportColor, LengthRaysLine, NumberTrendLine, BackHistoryViewBars, Parameters) {

var nVal;
var nIndex = 0;
var IndexOld = 0;
var X, X1, X2, Y1, Y2, K;
var nBarState = getBarState();


    if(nBarState==BARSTATE_ALLBARS){
        setShowTitleParameters(Parameters);
    }

    if (LineIndexS > NumberTrendLine) {LineIndexS = 1;}
    if (LineIndexR > NumberTrendLine) {LineIndexR = 1;}


    if(nBarState==BARSTATE_NEWBAR) {
        LineIndexS++;
        LineIndexR++;
    }

    nIndex = (SwHiStrength + 1);
    nVal = CreateResistance(nIndex, SwHiStrength);


    if(nVal == true){
        IndexOld = getOldHiPoint(nIndex, SwHiStrength, BackHistoryViewBars); 
        if (IndexOld != null) {    
            X1 = -IndexOld;
            X2 = -nIndex;
            Y1 = high(X1);
            Y2 = high(X2);
            K = (Y2-Y1) / (X2-X1);
            X2 = X2 - Math.round(X1 / 2)  + LengthRaysLine;
            Y2 = Y1 + K * (X2-X1); 
            drawLineRelative( X1, Y1, X2, Y2 , PS_SOLID, ResistanceThickness, ResistanceColor, "Res"+LineIndexR ); 
        }
    }

    nVal = CreateSupport(nIndex, SwHiStrength, NumberTrendLine);

    if(nVal == true){
        IndexOld = getOldLoPoint(nIndex, SwHiStrength, BackHistoryViewBars); 
        if (IndexOld != null) {    
            X1 = -IndexOld;
            X2 = -nIndex;
            Y1 = low(X1);
            Y2 = low(X2);
            K = (Y2-Y1) / (X2-X1);
            X2 = X2 - Math.round(X1 / 2) + LengthRaysLine;
            Y2 = Y1 + K * (X2-X1); 
            drawLineRelative(X1, Y1, X2, Y2, PS_SOLID, SupportThickness, SupportColor, "Sup"+LineIndexS ); 
        }   
    }


    return null;
}

function CreateResistance(Index, SwHiStrength) {
var Price = high(-Index);
var ResistanceOK = true;
var tmp;


    for(var i =(Index + SwHiStrength); i>Index; i--){
        tmp = i-SwHiStrength-1;
        if(Price < high(-i)) { ResistanceOK = false; }
        if(Price < high(-tmp)) {ResistanceOK = false; }
    }


    if (ResistanceOK == true) {
        return true;  
    } else {
        return false;
    }
}

function CreateSupport(Index, SwHiStrength) {
var Price = low(-Index);
var ResistanceOK = true;
var tmp;


    for(var i =(Index + SwHiStrength); i>Index; i--){
        tmp = i-SwHiStrength-1;
        if(Price > low(-i)) { ResistanceOK = false; }
        if(Price >= low(-tmp)) {ResistanceOK = false; }
    }


    if (ResistanceOK == true) {
        return true;  
    } else {
        return false;
    }
}

function getOldHiPoint(Index, SwHiStrength, BackHistoryViewBars){
var i = Index + 1;
var Work = true;
var PriceBarNow = high(-Index);


    while(Work == true) {
        if (CreateResistance(i,  SwHiStrength) == true) {
            if(high(-i) > PriceBarNow) { Work = false; }
        }
        i++;
        if (i > BackHistoryViewBars) return;
    } 


    return i - 1;
}

function getOldLoPoint(Index, SwHiStrength, BackHistoryViewBars){
var i = Index + 1;
var Work = true;
var PriceBarNow = low(-Index);


    while(Work == true) {
        if (CreateSupport(i, SwHiStrength) == true) {
            if(low(-i) < PriceBarNow) { Work = false; }
        }
        i++;
        if (i > BackHistoryViewBars) return;
    } 


    return i - 1;
}