Announcement

Collapse
No announcement yet.

2017 Dec: Mean-Reversion Swing Trading by Ken Calhoun

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 2017 Dec: Mean-Reversion Swing Trading by Ken Calhoun

    File Name: Mean_Reversion_Swing.efs

    Description:
    Mean-Reversion Swing Trading by Ken Calhoun

    Formula Parameters:

    Mean_Reversion_Swing.efs
    Slope: 1
    Trigger: 0.5

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

    Download File:
    Mean_Reversion_Swing.efs

    Mean_Reversion_Swing.efs


    EFS Code:
    PHP 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:        
        Mean-Reversion Swing Trading by Ken Calhoun

    Version:            1.00  11/09/2016

    Formula Parameters:                     Default:
    Slope                                   1
    Trigger                                 0.5



    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);
        
    setStudyTitle("MR Swing");

        var 
    0;
        
    fpArray[x] = new FunctionParameter("Slope"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setLowerLimit(0.01);
            
    setUpperLimit(100);  
            
    setDefault(1);
            
    setName("Slope");
        }
        
    fpArray[x] = new FunctionParameter("Trigger"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setLowerLimit(0.000001);
            
    setDefault(0.5);
            
    setName("Trigger");
        }
    }

    var 
    bInit false;
    var 
    bVersion null;
    var 
    xDHigh null;
    var 
    xHigh null;
    var 
    xDLow null;
    var 
    xLow null;
    var 
    xDDateTime null;
    var 
    bInSwing false;
    var 
    bSwFinished false;
    var 
    nSwBarsBack 0;
    var 
    nMeanRev 0;
    var 
    nMeanHigh 0;
    var 
    nSwHigh 0;
    var 
    bMRFound false;
    var 
    dMeanRevD null;
    var 
    bFindBO false;

    function 
    main(SlopeTrigger){
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;

        if (
    getBarState() == BARSTATE_ALLBARS){
            
    bInSwing false;
            
    bSwFinished false;
            
    nSwBarsBack 0;
            
    nMeanRev 0;
            
    nMeanHigh 0;
            
    nSwHigh 0;
            
    bMRFound false;
            
    dMeanRevD null;
            
    bFindBO false;
            
    bInit false;
        }

        if (!
    bInit){
            
    xDHigh high(inv("D"));
            
    xDLow low(inv("D"));
            
    xDDateTime rawtime(inv("D"));
            
    xLow low();
            
    xHigh high();
        }

        
    nDHigh xDHigh.getValue(0);
        var 
    slopeFinished false;
        var 
    0;
        var 
    swingLen 0;

        while (!
    slopeFinished){
            if (
    xDHigh.getValue(i) > xDHigh.getValue(i-1)){
                
    swingLen++;
                
    i--;
            }
            else 
    slopeFinished true;
        }

        if (
    bInSwing && swingLen == 0){
            
    nSwBarsBack 0;
            
    bSwFinished true;
            
    bInSwing false;
        }

        if (
    bSwFinished && nMeanRev != 0){
            
    nSwBarsBack++;
            if (
    xDLow.getValue(-1) < nMeanRev && day(0) != day(-1)){
                
    drawLineRelative(-1nMeanRev, -nSwBarsBacknSwHighPS_SOLID3Color.red,
                                (
    "Mean rev. " + (rawtime(-nSwBarsBack))));
                
    dMeanRevD xDDateTime.getValue(-1);
                
    nMeanHigh nSwHigh;
                
    nSwBarsBack 0;
                
    bSwFinished false;
                
    bMRFound false;
            }
        }

        if (!
    bSwFinished && !bInSwing && !bMRFound  && nMeanRev != && xDDateTime.getValue(-1) == dMeanRevD){
            if (
    xHigh.getValue(0) >= nMeanRev Trigger){
                
    drawTextRelative(0BelowBar1"\u00E9"Color.greennull,
                                
    Text.PRESET|Text.CENTER"Wingdings"10"Entry"+rawtime(0));
                
    drawTextRelative(0BelowBar2"MR"Color.greennull,
                                
    Text.PRESET|Text.CENTER|Text.BOLD"Arial"8"Entry text"+rawtime(0));
                
    bMRFound true;
                
    bFindBO true;
                
    nMeanRev 0;
            }
        }

        if (
    bFindBO &&  xHigh.getValue(0) >= nMeanHigh){
            
    drawTextRelative(0AboveBar1"\u00E9"Color.greennull,
                                
    Text.PRESET|Text.CENTER"Wingdings"10"2nd Entry"+rawtime(0));
            
    drawTextRelative(0AboveBar2"BO"Color.greennull,
                                
    Text.PRESET|Text.CENTER|Text.BOLD"Arial"8"2nd Entry text"+rawtime(0));
            
    bFindBO false;
        }

        if (
    swingLen >=4){
            var 
    nSStart getFirstBarIndexOfDay(xDDateTime.getValue(-(swingLen)));

            if(
    nSStart != null){
                if (((
    nDHigh xDHigh.getValue(-(swingLen)))/(xDLow.getValue(0) - xDLow.getValue(-(swingLen)))) > Slope){
                    
    nSwHigh nDHigh;
                    var 
    nSwLow xDLow.getValue(-(swingLen));
                    
    nMeanRev = (nSwHigh nSwLow)/2;
                    
    drawLineRelative(0nDHigh, (nSStart getCurrentBarIndex()), xDLow.getValue(-(swingLen)),
                                    
    PS_SOLID3Color.green"Uptrend" xDDateTime.getValue(-(swingLen)));
                    
    bInSwing true;
                    
    bSwFinished false;
                    
    nSwBarsBack 0;
                }
                else{
                    
    bInSwing false;
                    
    bSwFinished true;
                }
            }
        }    
    }

    function 
    verify(){
        var 
    false;
        if (
    getBuildNumber() < 779){

            
    drawTextAbsolute(535"This study requires version 10.6 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;

Working...
X