Announcement

Collapse
No announcement yet.

2017 Jul: Trading The Nikkei by Markos Katsanos

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

  • 2017 Jul: Trading The Nikkei by Markos Katsanos

    File Name: Regression_Divergence.efs

    Description:
    Trading The Nikkei by Markos Katsanos

    Formula Parameters:

    Regression_Divergence.efs

    Security 1: FXY
    Security 2: SPY
    Div Length: 50
    RLength: 50
    ROC Length: 3
    Stoc Length: 25
    MA&LR Length: 25
    OB: 90
    Correlation: 0.8
    DivCrit: 75
    Lag: 3
    Stop Loss (%): 1.5
    Exit Days: 11


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

    Download File:
    Regression_Divergence.efs

    Regression_Divergence.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:        
        Trading The Nikkei by Markos Katsanos

    Version:            1.00  05/12/2017

    Formula Parameters:                     Default:
    Security 1                              FXY
    Security 2                              SPY
    Div Length                              50
    RLength                                 50
    ROC Length                              3
    Stoc Length                             25
    MA&LR Length                            25
    OB                                      90
    Correlation                             0.8
    DivCrit                                 75
    Lag                                     3
    Stop Loss (%)                           1.5
    Exit Days                               11


    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(false);
        
    setStudyTitle("RegressionDivergence");
        
    setIntervalsBackfill(true);

        var 
    x=0;
        
    fpArray[x] = new FunctionParameter("S1"FunctionParameter.STRING);
            
    with (fpArray[x++]){
            
    setName("Security 1");
            
    addOption(" ");
            
    addOption("FXY");
            
    setDefault("FXY");
            }

        
    fpArray[x] = new FunctionParameter("S2"FunctionParameter.STRING);
            
    with (fpArray[x++]){
            
    setName("Security 2");
            
    addOption(" ");
            
    addOption("SPY");
            
    setDefault("SPY");
            }

        
    fpArray[x] = new FunctionParameter("DLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Div Length");
            
    setDefault(50);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("RLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("RLength");
            
    setDefault(50);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("ROCLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("RoC Length");
            
    setDefault(3);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("SLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Stoc Length");
            
    setDefault(25);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("MLLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("MA&LR Length");
            
    setDefault(25);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("OB"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("OB");
            
    setDefault(90);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("Corr"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Correlation");
            
    setDefault(0.8);
            
    setLowerLimit(0.1);
            }

        
    fpArray[x] = new FunctionParameter("DivCrit"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("DivCrit");
            
    setDefault(75);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("Lag"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Lag");
            
    setDefault(3);
            
    setLowerLimit(1);
            }

        
    fpArray[x] = new FunctionParameter("StLoss"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Stop Loss (%)");
            
    setDefault(1.5);
            
    setLowerLimit(0.1);
            }

        
    fpArray[x] = new FunctionParameter("Exit"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Exit Days");
            
    setDefault(11);
            
    setLowerLimit(1);
            }
    }

    var 
    bInit false;
    var 
    bVersion null;

    var 
    xCloseSeries1 null;
    var 
    xCloseSeries2 null;
    var 
    xStochactic null;
    var 
    xSMA null;
    var 
    xLR null;

    var 
    xRoCMain null;
    var 
    xRoC1 null;
    var 
    xRoC2 null;
    var 
    xCR1 null;
    var 
    xCR2 null;

    var 
    xRegr null;
    var 
    xIM null;

    var 
    xClose null;
    var 
    xHigh null;
    var 
    xLow null;

    var 
    DivShort 0;
    var 
    OS 0;

    var 
    nEntryBarN 0;


    function 
    main(S1S2DLengthRLengthROCLengthSLengthMLLengthOBCorrDivCritLagStLoss, Exit){
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;

     
    //   if (getCurrentBarCount() <= (RLength + DLength + ROCLength)) return;

        
    if (getBarState() == BARSTATE_ALLBARS){
            
    DivShort 0;
            
    OS 0;
            
    nEntryBarN 0;

            
    bInit false;
        }

        if (!
    bInit){
            
    xClose close();
            
    xCloseSeries1 close(sym(S1));
            
    xCloseSeries2 close(sym(S2));
            
    xHighhigh();
            
    xLow =low();

            
    xStochactic efsInternal("CustStochastic"xClosexHighxLowSLength);
            
    xSMA sma(MLLengthxClose);
            
    xLR efsInternal("LRSlopeM"MLLengthxClose);
            
    xRoCMain efsInternal("ROCM"xCloseROCLength);
            
    xRoC1 efsInternal("ROCM"xCloseSeries1ROCLength);
            
    xRoC2 efsInternal("ROCM"xCloseSeries2ROCLength);
            
    xCR1 efsInternal("CorrelationMK"xRoCMainxRoC1RLength);
            
    xCR2 efsInternal("CorrelationMK"xRoCMainxRoC2RLength);

            
    xRegr efsInternal("Regression"xCR1xRoCMainxRoC1RLength);
            
    xIM efsInternal("CalcIM"xRegrDLength);

            
    DivShort 100 DivCrit;
            
    OS 100 OB;

            
    addBand(DivCritPS_DASH1Color.grey1);
            
    addBand(DivShortPS_DASH1Color.grey2);

            
    bInit true;
        }

        if (
    getCurrentBarIndex != 0){
            if (!
    Strategy.isInTrade()){
                if (
    xIM.getValue(-Lag) > DivCrit && xIM.getValue(0) < xIM.getValue(-Lag)
                                                && 
    xIM.getValue(0) > DivShort
                                                
    && xCR2.getValue(0) < Corr
                                                
    && (xLR.getValue(0) >= xLR.getValue(-1) || xClose.getValue(0) > xSMA.getValue(0))){
                    
    Strategy.doLong("DIVJPY"Strategy.CLOSEStrategy.THISBARStrategy.DEFAULT);
                    
    nEntryBarN getCurrentBarCount();
                }
                else if (
    xIM.getValue(-Lag) < DivShort && xIM.getValue(0) > xIM.getValue(-Lag)
                                                        && 
    xIM.getValue(0) < DivCrit
                                                        
    && xCR2.getValue(0) < Corr
                                                        
    && (xLR.getValue(0) <= xLR.getValue(-1) || xClose.getValue(0) < xSMA.getValue(0))){
                    
    Strategy.doShort("NDIVJPY"Strategy.CLOSEStrategy.THISBARStrategy.DEFAULT);
                    
    nEntryBarN getCurrentBarCount();
                }
            }
            else {
                var 
    nBarsSinceEntry getCurrentBarCount() - nEntryBarN;

                if (
    nBarsSinceEntry 3){
                    if (
    Strategy.isLong() && xStochactic.getValue(0) > OS && xClose.getValue(0) < xClose.getValue(-nBarsSinceEntry) * (StLoss/100))
                        
    Strategy.doSell("STOP"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);

                    else if (
    Strategy.isShort() && xStochactic.getValue(0) < OB && xClose.getValue(0) > xClose.getValue(-nBarsSinceEntry) * (StLoss/100))
                        
    Strategy.doCover("INITIAL STOP"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
                }

                if (
    nBarsSinceEntry && Strategy.isInTrade()){
                    if (
    Strategy.isLong() && xClose.getValue(0) < hhv(nBarsSinceEntryxClose0) * (StLoss/100))
                        
    Strategy.doSell("TRAIL"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);

                    else if (
    Strategy.isShort() && xClose.getValue(0) > llv(nBarsSinceEntryxClose0) * (StLoss/100))
                        
    Strategy.doCover("TRAIL COVER"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
                }

                if (
    nBarsSinceEntry >= Exit && Strategy.isInTrade()){
                    if (
    Strategy.isLong()) Strategy.doSell("TIME"Strategy.CLOSEStrategy.THISBARStrategy.ALL);
                    else if (
    Strategy.isShort()) Strategy.doCover("TIMEX"Strategy.CLOSEStrategy.THISBARStrategy.ALL);
                }

                if (!
    Strategy.isInTrade()) nEntryBarN 0;
            }
        }

        if (
    Strategy.isLong()) setBarBgColor(Color.RGB(0,60,0));
        else if (
    Strategy.isShort()) setBarBgColor(Color.RGB(170,46,46));

        return 
    xIM.getValue(0);
    }

    var 
    xSTDDev1 null;
    var 
    xSTDDev2 null;
    var 
    xAvgRoC1 null;
    var 
    xAvgRoC2 null;

    var 
    xInit false;

    function 
    Regression(xCR1xRoC1xRoC2Length){
        if (!
    xInit){
            
    xSTDDev1 stdDev(LengthxRoC1);
            
    xSTDDev2 stdDev(LengthxRoC2);
            
    xAvgRoC1 sma(LengthxRoC1);
            
    xAvgRoC2 sma(LengthxRoC2);

            
    xInit true;
        }

        var 
    b2 xCR1.getValue(0) * xSTDDev1.getValue(0) / (xSTDDev2.getValue(0) + 0.001);
        var 
    a2 xAvgRoC1.getValue(0) - b2 xAvgRoC2.getValue(0);

        return (
    b2 xRoC2.getValue(0) + a2) - xRoC1.getValue(0);
    }

    function 
    CustStochastic(xClosexHighxLowLength){
        var 
    nStoc null;

        
    nStoc = (sma(3efsInternal("SeriesSub"xClosellv(LengthxLow))) * 100) /
                (
    sma(3efsInternal("SeriesSub"hhv(LengthxHigh), llv(LengthxLow))));

        return 
    nStoc;
    }

    function 
    CalcIM(xRegrLength){
        var 
    IM sma(2efsInternal("SeriesSub"xRegrllv(LengthxRegr))) * 100 /
                    (
    sma(2efsInternal("SeriesSub"hhv(LengthxRegr), llv(LengthxRegr))) + 0.01);
        return 
    IM;
    }

    function 
    SeriesSub(xSeries1xSeries2){
        return 
    xSeries1.getValue(0) - xSeries2.getValue(0);
    }

    function 
    LRSlopeM(LengthxClose){
        var 
    SL 0;
        var 
    SumBars Length * (Length 1) * 0.5;
        var 
    SumSqrBars = (Length 1) * Length * (Length 1) / 6;
        var 
    Sum1 0;
        var 
    SumY 0;
        var 
    0;

        for (
    0Lengthi++) {
            
    Sum1 += xClose.getValue(-i);
            
    SumY += xClose.getValue(-i);
        }
        var 
    Sum2 SumBars SumY;
        var 
    Num1 Length Sum1 Sum2;
        var 
    Num2 SumBars SumBars Length SumSqrBars;
        
    SL Num1 Num2;
        return 
    SL 100;
    }

    function 
    ROCM(xSeriesLength){
        if (
    xSeries.getValue(-Length) != null)
            return (
    xSeries.getValue(0) / xSeries.getValue(-Length) - 1) * 100;
    }

    function 
    CorrelationMK(xSeries1xSeries2Length){
        var 
    nQ1 Sum(efsInternal("SeriesMP"xSeries1xSeries2), Length) -
                    (
    Sum(xSeries1Length) * Sum(xSeries2Length) / Length);
        var 
    nQ2 Sum(efsInternal("SeriesMP"xSeries2xSeries2), Length) -
                    (
    Sum(xSeries2Length) * Sum(xSeries2Length) / Length);
        var 
    nQ3 Sum(efsInternal("SeriesMP"xSeries1xSeries1), Length) -
                    (
    Sum(xSeries1Length) * Sum(xSeries1Length) / Length);

        if (
    nQ2 nQ3 0) var nQ2Q3 Math.sqrt(nQ2 nQ3);
        if (
    nQ2Q3 != 0){
            var 
    nR nQ1 nQ2Q3;
            if (
    nR <= && nR >= -1) return nR;
        }
    }

    function 
    Sum(xSeriesLength){
        if (
    xSeries.getValue(-Length) != null){
            var 
    sum 0;
            for (var 
    0Lengthi++){
                
    sum += xSeries.getValue(-i);
            }
            return 
    sum;
        }
    }

    function 
    SeriesMP(xSeries1xSeries2){
        if (
    xSeries1.getValue(0) != null && xSeries2.getValue(0) != null)
            return 
    xSeries1.getValue(0) * xSeries2.getValue(0);
    }

    function 
    verify(){
        var 
    false;
        if (
    getBuildNumber() < 3742){
            
    drawTextAbsolute(535"This study requires version 12.1 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