Announcement

Collapse
No announcement yet.

2006 Dec: Trading the Equity Curve

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 2006 Dec: Trading the Equity Curve

    File Name: EquityCurve_MA.efs

    Description:
    This study is based on the December 2006 Stock Trading System Lab article, Trading the Equity Curve, by Volker Knapp.

    Formula Parameters:
    KAMA Periods 10
    KAMA Fast Length 2
    KAMA Slow Length 30
    Commission per Trade: 8
    Slippage per Trade: 0.002 (0.2%)
    Lot Size: 100
    Bollinger Band Periods: 38
    Bollinger Band Standard Deviations: 3
    Fast SMA Length: 3
    Slow SMA Length: 10

    Notes:
    The related article is copyrighted material. If you are not a subscriber of Active Trader Magazine, please visit www.activetradermag.com.

    Download File:
    EquityCurve_MA.efs



    EFS Code:
    PHP Code:
    /***************************************
    Provided By : eSignal (c) Copyright 2006
    Description:  Trading the equity curve 
                  by Volker Knapp

    Version 1.0  11/17/2006

    Notes:
    * Dec 2006 Issue of Active Trader Magazine
    * Study requires version 8.0 or later.


    Formula Parameters:                     Default:
    KAMA Periods                            10
    KAMA Fast Length                        2
    KAMA Slow Length                        30
    Commission per Trade                    8
    Slippage per Trade                      0.002  (0.2%)
    Lot Size                                100
    Bollinger Band Periods                  38
    Bollinger Band Standard Deviations      3
    Fast SMA Length                         3
    Slow SMA Length                         10
    ***************************************/

    function preMain() {
        
    setPriceStudy(true);
        
    setStudyTitle("Equity Curve MA");
        
    setShowTitleParameters(false);
        
    setCursorLabelName("Upper BB"0);
        
    setCursorLabelName("Lower BB"1);
        
    setCursorLabelName("Equity Fast MA"2);
        
    setCursorLabelName("Equity Slow MA"3);
        
    setDefaultBarFgColor(Color.grey0);
        
    setDefaultBarFgColor(Color.grey1);
        
    setDefaultBarFgColor(Color.red2);
        
    setDefaultBarFgColor(Color.green3);
        
    setDefaultBarThickness(20);
        
    setDefaultBarThickness(21);

        
        
    // KAMA parameters
        
    var fp1 = new FunctionParameter"Period"FunctionParameter.NUMBER);
            
    fp1.setName"KAMA Periods" );
            
    fp1.setLowerLimit);
            
    fp1.setUpperLimit125 );
            
    fp1.setDefault10 );
        var 
    fp2 = new FunctionParameter"Fast"FunctionParameter.NUMBER);
            
    fp2.setName"KAMA Fast Length" );
            
    fp2.setLowerLimit);
            
    fp2.setUpperLimit125 );
            
    fp2.setDefault);
        var 
    fp3 = new FunctionParameter"Slow"FunctionParameter.NUMBER);
            
    fp3.setName"KAMA Slow Length" );
            
    fp3.setLowerLimit);
            
    fp3.setUpperLimit125 );
            
    fp3.setDefault30 );
        var 
    fp4 = new FunctionParameter"Commission"FunctionParameter.NUMBER);
            
    fp4.setName"Commission per Trade" );
            
    fp4.setLowerLimit);
            
    fp4.setDefault);
        var 
    fp5 = new FunctionParameter"Slippage"FunctionParameter.NUMBER);
            
    fp5.setName"Slippage per Trade" );
            
    fp5.setLowerLimit);
            
    fp5.setDefault0.002 );
        var 
    fp5b = new FunctionParameter"Lot"FunctionParameter.NUMBER);
            
    fp5b.setName"Lot Size" );
            
    fp5b.setLowerLimit);
            
    fp5b.setDefault100 );
        var 
    fp6 = new FunctionParameter"BBPeriods"FunctionParameter.NUMBER);
            
    fp6.setName"Bollinger Band Periods" );
            
    fp6.setLowerLimit);
            
    fp6.setDefault38 );
        var 
    fp7 = new FunctionParameter"BBStdv"FunctionParameter.NUMBER);
            
    fp7.setName"Bollinger Band Standard Deviations" );
            
    fp7.setLowerLimit);
            
    fp7.setDefault);
        var 
    fp8 = new FunctionParameter"SMA_fast"FunctionParameter.NUMBER);
            
    fp8.setName"Fast SMA Length " );
            
    fp8.setLowerLimit);
            
    fp8.setDefault);
        var 
    fp9 = new FunctionParameter"SMA_slow"FunctionParameter.NUMBER);
            
    fp9.setName"Slow SMA Length " );
            
    fp9.setLowerLimit);
            
    fp9.setDefault10 );
    }

    // Global Variables
    var bVersion  null;    // Version flag
    var bInit     false;   // Initialization flag

    var bBT true;          // Back Testing flag

    // Basis Strategy Variables
    var xUpper null;
    var 
    xLower null;
    var 
    xEquity null;     // Equity Series
    var nEquity 100000;
    var 
    nLot 100;
    var 
    nEntry null;
    var 
    nExit null;
    var 
    nCom 8*2;          // Commission per trade
    var nSlip 0.002;       // 0.2% Slippage per trade
    var vPosition 0;       // 1=long, 0=flat, -1=short

    // Strategy of Basis (B)
    var xSMA_fast null;
    var 
    xSMA_slow null;
    var 
    vPositionB 0// 1=long, 0=flat, -1=short

    // KAMA globals
    var xKamaH null;
    var 
    xKamaL null;
    var 
    nKama 0;      // Kama value
    var nKama_1 0;    // previous bar's Kama value
    var nFast 0;
    var 
    nSlow 0;


    function 
    main(PeriodFastSlowCommissionSlippageLot
                    
    BBPeriodsBBStdvSMA_fastSMA_slow) {
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;    
        
        var 
    nState getBarState();
        
        if(
    bInit == false) {
            
    xKamaH efsInternal("kama"PeriodFastSlowhigh());
            
    xKamaL efsInternal("kama"PeriodFastSlowlow()); 
            
    xUpper upperBB(BBPeriodsBBStdvxKamaH);
            
    xLower lowerBB(BBPeriodsBBStdvxKamaL);
            
            
    // Basis Strategy for Paper trading equity curve needs to go
            //   into the getBasisEquity series function.  Any existing strategy 
            //   may be used in place of the current strategy. 
            
    xEquity efsInternal("getBasisEquity"xUpperxLower);
            
    xSMA_fast sma(SMA_fastxEquity);
            
    xSMA_slow sma(SMA_slowxEquity);
            
            
    nCom Commission 2;
            
    nSlip Slippage;
            
    nLot Lot;
            
            
    bInit true;
        }

        if (
    nState == BARSTATE_NEWBAR) {
            if (
    getCurrentBarIndex() == 0bBT false;
        } 
        
        var 
    nU xUpper.getValue(-1);
        var 
    nL xLower.getValue(-1);
        var 
    nSMA_fast_1 xSMA_fast.getValue(-1);
        var 
    nSMA_slow_1 xSMA_slow.getValue(-1);
        if(
    nU == null || nL == null || 
            
    nSMA_fast_1 == null || nSMA_slow_1 == null) return;

        
        
    /***** Strategy of Basis (B) *****/
        
    if (nState == BARSTATE_NEWBAR) {
            if (
    nSMA_fast_1 nSMA_slow_1) {
                
    // Long Trade Signal
                
    if (vPositionB != && close(-1) > nU) {
                    
    drawShape(Shape.UPARROWAboveBar1Color.greenrawtime(0));
                    
    vPositionB 1;
                    if (
    bBT == true) {
                        
    Strategy.doLong("Long"Strategy.MARKETStrategy.THISBAR);
                    }
                
    // Short Trade Signal
                
    } else if (vPositionB != -&& close(-1) < nL) {  
                    
    drawShape(Shape.DOWNARROWBelowBar1Color.redrawtime(0));
                    
    vPositionB = -1;
                    if (
    bBT == true) {
                        
    Strategy.doShort("Short"Strategy.MARKETStrategy.THISBAR);
                    }
                }
            }
        }

        if(
    vPositionB == 1) {
            
    setBarFgColor(Color.darkgreen0);
            
    setBarFgColor(Color.darkgreen1);
        } else if(
    vPositionB == -1) {
            
    setBarFgColor(Color.red0);
            
    setBarFgColor(Color.red1);
        }

        return new Array((
    xUpper.getValue(0)).toFixed(2)*1
                         (
    xLower.getValue(0)).toFixed(2)*1
                         (
    xSMA_fast.getValue(0)).toFixed(2),
                         (
    xSMA_slow.getValue(0)).toFixed(2));
    }


    function 
    getBasisEquity(xUxL) {
        var 
    nState getBarState();
        var 
    nU xU.getValue(-1);
        var 
    nL xL.getValue(-1);
        
        if (
    nState == BARSTATE_NEWBAR) {
            
    // Long Trade Signal
            
    if (vPosition != && close(-1) > nU) {
                
    nExit open(0) + (nSlip open(0));
                if (
    vPosition == -1) {
                    
    nEquity += ((nEntry nExit) * nLot) - nCom;
                }
                
    vPosition 1;
                
    nEntry open(0)  + (nSlip open(0));
            
    // Short Trade Signal
            
    } else if (vPosition != -&& close(-1) < nL) {  
                
    nExit open(0) - (nSlip open(0));
                if (
    vPosition == 1) {
                    
    nEquity += ((nExit nEntry) * nLot) - nCom;
                }
                
    vPosition = -1;
                
    nEntry open(0) - (nSlip open(0));
            }
        }
        
        return 
    nEquity;
    }

    function 
    kama(PeriodFastSlowxSource) {
        
    /****************************
           kama series modified from KAMA.efs by          
           Divergence Software, Inc.                        
           [url]http://share.esignal.com/groupgo.jsp?groupid=114[/url] 
        ****************************/
        
        
    var 0;
        var 
    nNoise;
        var 
    nSignal;
        var 
    nSmooth;

        if (
    bInit == false) {
            
    nFast / ( Fast );
            
    nSlow / ( Slow );        
            
    bInit true;
        }

        if (
    getBarState() == BARSTATE_NEWBAR) {
            
    nKama_1 nKama;
        }
        
        if (
    xSource.getValue(-(Period+1)) == null) return close(0);
        
        
    nSignal Math.absxSource.getValue(0) - xSource.getValue(-Period) );
        
        
    nNoise 0;
        while( 
    x<Period ) {
            
    nNoise += Math.absxSource.getValue(-x)-xSource.getValue(-(x+1)) );
            
    x++;
        }
        
        if ( 
    nNoise==nNoise 1.0;    
        
    nSmooth Math.pow( ( nSignal/nNoise ) * ( nFast nSlow ) + nSlow );    
        
    nKama nKama_1 nSmooth * ( xSource.getValue(0) - nKama_1 );
        
        return 
    nKama;
    }


    function 
    verify() {
        var 
    false;
        if (
    getBuildNumber() < 779) {
            
    drawTextAbsolute(535"This study requires version 8.0 or later."
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"error");
            
    drawTextAbsolute(520"Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp"
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"upgrade");
            return 
    b;
        } else {
            
    true;
        }
        
        return 
    b;

    Jason K.
    Project Manager
    eSignal - an Interactive Data company

    EFS KnowledgeBase
    JavaScript for EFS Video Series
    EFS Beginner Tutorial Series
    EFS Glossary
    Custom EFS Development Policy

    New User Orientation
Working...
X