2017 July Trading the Nikkei by Markos Katsanos

ICE Data Services -


Regression_Divergence.efs  EFSLibrary - Discussion Board
  

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:
/*********************************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 responsiblefor 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 KatsanosVersion:            1.00  05/12/2017Formula Parameters:                     Default:Security 1                              FXYSecurity 2                              SPYDiv Length                              50RLength                                 50ROC Length                              3Stoc Length                             25MA&LR Length                            25OB                                      90Correlation                             0.8DivCrit                                 75Lag                                     3Stop Loss (%)                           1.5Exit Days                               11Notes:The related article is copyrighted material. If you are not a subscriberof 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(S1, S2, DLength, RLength, ROCLength, SLength, MLLength, OB, Corr, DivCrit, Lag, StLoss, Exit){    if (bVersion == null) bVersion = 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));        xHigh= high();        xLow =low();                xStochactic = efsInternal("CustStochastic", xClose, xHigh, xLow, SLength);        xSMA = sma(MLLength, xClose);        xLR = efsInternal("LRSlopeM", MLLength, xClose);        xRoCMain = efsInternal("ROCM", xClose, ROCLength);        xRoC1 = efsInternal("ROCM", xCloseSeries1, ROCLength);        xRoC2 = efsInternal("ROCM", xCloseSeries2, ROCLength);        xCR1 = efsInternal("CorrelationMK", xRoCMain, xRoC1, RLength);        xCR2 = efsInternal("CorrelationMK", xRoCMain, xRoC2, RLength);                xRegr = efsInternal("Regression", xCR1, xRoCMain, xRoC1, RLength);        xIM = efsInternal("CalcIM", xRegr, DLength);                DivShort = 100 - DivCrit;        OS = 100 - OB;                addBand(DivCrit, PS_DASH, 1, Color.grey, 1);        addBand(DivShort, PS_DASH, 1, Color.grey, 2);                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.CLOSE, Strategy.THISBAR, Strategy.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.CLOSE, Strategy.THISBAR, Strategy.DEFAULT);                nEntryBarN = getCurrentBarCount();            }        }        else {            var nBarsSinceEntry = getCurrentBarCount() - nEntryBarN;                    if (nBarsSinceEntry > 3){                if (Strategy.isLong() && xStochactic.getValue(0) > OS && xClose.getValue(0) < xClose.getValue(-nBarsSinceEntry) * (1 - StLoss/100))                    Strategy.doSell("STOP", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT);                else if (Strategy.isShort() && xStochactic.getValue(0) < OB && xClose.getValue(0) > xClose.getValue(-nBarsSinceEntry) * (1 + StLoss/100))                    Strategy.doCover("INITIAL STOP", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT);            }                    if (nBarsSinceEntry > 7 && Strategy.isInTrade()){                if (Strategy.isLong() && xClose.getValue(0) < hhv(nBarsSinceEntry, xClose, 0) * (1 - StLoss/100))                    Strategy.doSell("TRAIL", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT);                                else if (Strategy.isShort() && xClose.getValue(0) > llv(nBarsSinceEntry, xClose, 0) * (1 + StLoss/100))                    Strategy.doCover("TRAIL COVER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT);            }                    if (nBarsSinceEntry >= Exit && Strategy.isInTrade()){                if (Strategy.isLong()) Strategy.doSell("TIME", Strategy.CLOSE, Strategy.THISBAR, Strategy.ALL);                else if (Strategy.isShort()) Strategy.doCover("TIMEX", Strategy.CLOSE, Strategy.THISBAR, Strategy.ALL);            }                    if (!Strategy.isInTrade()) nEntryBarN = 0;        }    }    if (Strategy.isLong()) setBarBgColor(Color.#003c00);    else if (Strategy.isShort()) setBarBgColor(Color.#aa2e2e);    return xIM.getValue(0);}var xSTDDev1 = null;var xSTDDev2 = null;var xAvgRoC1 = null;var xAvgRoC2 = null;var xInit = false;function Regression(xCR1, xRoC1, xRoC2, Length){    if (!xInit){        xSTDDev1 = stdDev(Length, xRoC1);        xSTDDev2 = stdDev(Length, xRoC2);        xAvgRoC1 = sma(Length, xRoC1);        xAvgRoC2 = sma(Length, xRoC2);                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(xClose, xHigh, xLow, Length){    var nStoc = null;        nStoc = (sma(3, efsInternal("SeriesSub", xClose, llv(Length, xLow))) * 100) /            (sma(3, efsInternal("SeriesSub", hhv(Length, xHigh), llv(Length, xLow))));        return nStoc;}function CalcIM(xRegr, Length){    var IM = sma(2, efsInternal("SeriesSub", xRegr, llv(Length, xRegr))) * 100 /                (sma(2, efsInternal("SeriesSub", hhv(Length, xRegr), llv(Length, xRegr))) + 0.01);    return IM;}function SeriesSub(xSeries1, xSeries2){    return xSeries1.getValue(0) - xSeries2.getValue(0);}function LRSlopeM(Length, xClose){    var SL = 0;    var SumBars = Length * (Length - 1) * 0.5;    var SumSqrBars = (Length - 1) * Length * (2 * Length - 1) / 6;    var Sum1 = 0;    var SumY = 0;    var i = 0;    for (i = 0; i < Length; i++) {        Sum1 += i * 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(xSeries, Length){    if (xSeries.getValue(-Length) != null)        return (xSeries.getValue(0) / xSeries.getValue(-Length) - 1) * 100;}function CorrelationMK(xSeries1, xSeries2, Length){    var nQ1 = Sum(efsInternal("SeriesMP", xSeries1, xSeries2), Length) -                 (Sum(xSeries1, Length) * Sum(xSeries2, Length) / Length);    var nQ2 = Sum(efsInternal("SeriesMP", xSeries2, xSeries2), Length) -                 (Sum(xSeries2, Length) * Sum(xSeries2, Length) / Length);    var nQ3 = Sum(efsInternal("SeriesMP", xSeries1, xSeries1), Length) -                 (Sum(xSeries1, Length) * Sum(xSeries1, Length) / Length);        if (nQ2 * nQ3 > 0) var nQ2Q3 = Math.sqrt(nQ2 * nQ3);    if (nQ2Q3 != 0){        var nR = nQ1 / nQ2Q3;        if (nR <= 1 && nR >= -1) return nR;    }}function Sum(xSeries, Length){    if (xSeries.getValue(-Length) != null){        var sum = 0;        for (var i = 0; i < Length; i++){            sum += xSeries.getValue(-i);        }        return sum;    }}function SeriesMP(xSeries1, xSeries2){    if (xSeries1.getValue(0) != null && xSeries2.getValue(0) != null)        return xSeries1.getValue(0) * xSeries2.getValue(0);}function verify(){    var b = false;    if (getBuildNumber() < 3742){        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;}