Announcement

Collapse
No announcement yet.

2015 Dec: Trading The Loonie by Markos Katsanos

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

  • 2015 Dec: Trading The Loonie by Markos Katsanos

    File Name: BBDivergenceIndicator.efs, BBDivergenceStrategy.efs

    Description:
    Trading The Loonie by Markos Katsanos

    Formula Parameters:

    BBDivergenceIndicator.efs

    Length BB Divergence: 20
    Secondary Symbol: CL #F

    BBDivergenceStrategy.efs

    Length BB Divergence: 20
    Secondary Symbol: CL #F
    Long Trend Color: green
    Short Trend Color: red

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

    Download File:
    BBDivergenceIndicator.efs
    BBDivergenceStrategy.efs



    EFS Code:

    BBDivergenceIndicator.efs
    PHP Code:
    /*********************************
    Provided By:  
        Interactive Data Corporation (Copyright © 2015) 
        All rights reserved. This sample eSignal Formula Script (EFS)
        is for educational purposes only. Interactive Data Corporation
        reserves the right to modify and overwrite this EFS file with 
        each new release. 

    Description:        
        Trading The Loonie by Markos Katsanos

    Formula Parameters:                     Default:
    Length BB Divergence                    20
    Secondary Symbol                        CL #F 

    Version:            1.00  10/08/2015

    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(){

        
    setStudyTitle("BBDivergenceStrategy");
        
    setIntervalsBackfill(true);
        var 
    0;
        
    fpArray[x] = new FunctionParameter("fpLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Length BB Divergence");
            
    setLowerLimit(1); 
            
    setDefault(20);
        }
        
    fpArray[x] = new FunctionParameter("fpSecondarySymbol"FunctionParameter.STRING);
        
    with(fpArray[x++]){
            
    setName("Secondary Symbol");    
            
    setDefault('CL #F');
        }
    }
     
    var 
    bInit false;
    var 
    bVersion null;
    var 
    xClose null;
    var 
    xSecClose null;
    var 
    xBol null;
    var 
    xSecBol null;
    var 
    xDiverg null;

    function 
    main(fpLengthfpSecondarySymbol){

        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;
        if (!
    bInit){

            
    xClose close();
            
    xSecClose close(sym(fpSecondarySymbol));
            
    xBol efsInternal('Calc_Bol'fpLengthxClose);
            
    xSecBol efsInternal('Calc_Bol'fpLengthxSecClose);
            
    xDiverg efsInternal('Calc_Div'xBolxSecBol);
            
    bInit true
        }

        var 
    nDiverg xDiverg.getValue(0);

        if (
    nDiverg == null)
            return;
            
        return 
    nDiverg;
    }

    var 
    xBolSMA null;
    var 
    xSTDDev null;
    var 
    bInitInt false;

    function 
    Calc_Bol(nLengthxSource){
        
        if (!
    bInitInt){
            
    xBolSMA sma(nLengthxSource);
            
    xSTDDev stdDev(nLengthxSource);
            
    bInitInt true;
        }
        
        var 
    nSource xSource.getValue(0);
        var 
    nBolSMA xBolSMA.getValue(0);
        var 
    nSTDDev xSTDDev.getValue(0);
        
        if (
    nSource == null || nBolSMA == null || nSTDDev == null)
            return;

        var 
    nBol + ((nSource nBolSMA nSTDDev) / (nSTDDev .0001));
        return 
    nBol;
    }

    function 
    Calc_Div(xBol1xBol2){
          
        var 
    nBol1 xBol1.getValue(0);
        var 
    nBol2 xBol2.getValue(0);
        if (
    nBol1 == null || nBol2 == null)
            return;
        
    nDiverg = (nBol2 nBol1) / nBol1 100 ;
        return 
    nDiverg;
    }

    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;

    BBDivergenceStrategy.efs
    PHP Code:
    /*********************************
    Provided By:  
        Interactive Data Corporation (Copyright В© 2015) 
        All rights reserved. This sample eSignal Formula Script (EFS)
        is for educational purposes only. Interactive Data Corporation
        reserves the right to modify and overwrite this EFS file with 
        each new release. 

    Description:        
        Trading The Loonie by Markos Katsanos

    Formula Parameters:                     Default:
    Length BB Divergence                    20
    Secondary Symbol                        CL #F 
    Long Trend Color                        green
    Short Trend Color                       red

    Version:            1.00  10/08/2015

    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(){

        
    setStudyTitle("BBDivergenceStrategy");
        
    setPriceStudy(true);
        
    setIntervalsBackfill(true);
        var 
    0;

        
    fpArray[x] = new FunctionParameter("fpLength"FunctionParameter.NUMBER);
        
    with(fpArray[x++]){
            
    setName("Length BB Divergence");
            
    setLowerLimit(1); 
            
    setDefault(20);
        }

        
    fpArray[x] = new FunctionParameter("fpSecondarySymbol"FunctionParameter.STRING);
        
    with(fpArray[x++]){
            
    setName("Secondary Symbol");    
            
    setDefault('CL #F');
        }

        
    fpArray[x] = new FunctionParameter("fpLongColor"FunctionParameter.COLOR);
        
    with(fpArray[x++]){
            
    setName("Long Color");    
            
    setDefault(Color.green);
        }
        
        
    fpArray[x] = new FunctionParameter("fpShortColor"FunctionParameter.COLOR);
        
    with(fpArray[x++]){
            
    setName("Short Color");    
            
    setDefault(Color.red);
        }
    }
     
    var 
    bInit false;
    var 
    bVersion null;
    var 
    xClose null;
    var 
    xSecClose null;
    var 
    xLow null;
    var 
    xHigh null;
    var 
    xOpen null;
    var 
    xBol null;
    var 
    xSecBol null;
    var 
    xDiverg null;
    var 
    xHHV null;
    var 
    xHighHHV null;
    var 
    xLLV null;
    var 
    xLowLLV null;
    var 
    xSecLLV null;
    var 
    xROC null;
    var 
    xSecROC null;
    var 
    xCorrelEntry null;
    var 
    xCorrelExit null;
    var 
    xSecSMA null;
    var 
    xMACD null;
    var 
    xSignal null;
    var 
    xStoch null;
    var 
    nTagID 0;
    var 
    nDefLotSize null;

    function 
    main(fpLengthfpSecondarySymbolfpLongColorfpShortColor){

        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;

        if (!
    bInit){

            
    xClose close();
            
    xSecClose close(sym(fpSecondarySymbol));
            
    xLow low();
            
    xHigh high();
            
    xOpen open();
            
    xBol efsInternal('Calc_Bol'fpLengthxClose);
            
    xSecBol efsInternal('Calc_Bol'fpLengthxSecClose);
            
    xDiverg efsInternal('Calc_Div'xBolxSecBol);
            
    xHHV hhv(3xDiverg);
            
    xHighHHV hhv(15xHigh);
            
    xLLV llv(3xDiverg);
            
    xLowLLV llv(15xLow);
            
    xSecLLV llv(4xSecClose);
            
    xROC roc(2);
            
    xSecROC roc(3xSecClose);
            
    xCorrelEntry efsInternal("Calc_Correlation"20xClosexSecClose);
            
    xCorrelExit efsInternal("Calc_Correlation"60xClosexSecClose);
            
    xSecSMA sma(40xSecClose);
            
    xMACD macd(12269);
            
    xSignal macdSignal(12269);
            
    xStoch stochD(3013);

            
    bInit true
        }

        if (
    isLastBarOnChart()) return; 

        var 
    nDiverg xDiverg.getValue(0);
        var 
    nPrevDiverg xDiverg.getValue(-1);
        var 
    nClose xClose.getValue(0);
        var 
    nSecClose xSecClose.getValue(0);
        var 
    nHHV xHHV.getValue(0);
        var 
    nHighHHV xHighHHV.getValue(-1);
        var 
    nLLV xLLV.getValue(0);
        var 
    nLowLLV xLowLLV.getValue(-1);
        var 
    nSecLLV xSecLLV.getValue(0);
        var 
    nROC xROC.getValue(0);
        var 
    nSecROC xSecROC.getValue(0);
        var 
    nSecSMA xSecSMA.getValue(0);
        var 
    nPrev2SecSMA xSecSMA.getValue(-2);
        var 
    nCorrelEntry xCorrelEntry.getValue(0);
        var 
    nCorrelExit xCorrelExit.getValue(0);
        var 
    nStoch xStoch.getValue(0);
           
        if (
    nDiverg == null || nPrevDiverg == null || nHHV == null || nHighHHV == null ||
            
    nLLV == null || nLowLLV == null || nSecLLV == null || nROC == null ||  nSecROC == null ||
            
    nSecSMA == null || nPrev2SecSMA == null || nCorrelEntry == null || nCorrelExit == null || 
            
    nStoch == null)
            return;

        
    nDefLotSize Strategy.getDefaultLotSize();

        var 
    nPrice xOpen.getValue(1);

        if (!
    Strategy.isLong()){
            if ((
    nHHV 20) && (nDiverg nPrevDiverg) && (nROC 0) && (nSecSMA nPrev2SecSMA) && (nCorrelEntry > -.4)){

                
    Strategy.doLong("Entry Long"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
                
    drawShapeRelative(1BelowBar1Shape.UPTRIANGLEnullfpLongColorText.PRESETnTagID++);
                
    drawTextRelative(1BelowBar2"Entry Long"fpLongColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
                
    drawTextRelative(1BelowBar3nDefLotSize " @ " formatPriceNumber(nPrice), fpLongColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
            }
        }

        if (
    Strategy.isLong()){
            if ((
    crossAbove(xSignalxMACD) && (nStoch 85)) ||  
                (
    nLLV < -20 && nSecROC < -3) ||
                (
    nClose nLowLLV && nCorrelExit < -.4)){

                
    Strategy.doSell("Exit Long"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
                
    drawShapeRelative(1AboveBar1Shape.SQUAREnullfpShortColorText.PRESETnTagID++);
                
    drawTextRelative(1AboveBar2"Exit Long"fpShortColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
                
    drawTextRelative(1AboveBar3nDefLotSize " @ " formatPriceNumber(nPrice), fpShortColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
            }
        }

        if (!
    Strategy.isShort()){
            if ((
    nLLV < -20) && (nDiverg nPrevDiverg) && (nROC 0) && (nSecSMA nPrev2SecSMA) && (nCorrelEntry > -.4)){

               
    Strategy.doShort("Entry Short"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
               
    drawShapeRelative(1AboveBar1Shape.DOWNTRIANGLEnullfpShortColorText.PRESETnTagID++);
               
    drawTextRelative(1AboveBar2"Entry Short"fpShortColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
               
    drawTextRelative(1AboveBar3nDefLotSize " @ " formatPriceNumber(nPrice), fpShortColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++); 
            }
        }

        if (
    Strategy.isShort()){
            if ((
    crossAbove(xMACDxSignal) && (nStoch 25) && nSecClose > = (100) * nSecLLV ) ||
                (
    nHHV 20 && nSecROC 4.5) ||
                (
    nClose nHighHHV && nCorrelExit < -.4)){
                    
                
    Strategy.doCover("Exit Short"Strategy.MARKETStrategy.NEXTBARStrategy.DEFAULT);
                
    drawShapeRelative(1BelowBar1Shape.SQUAREnullfpLongColorText.PRESETnTagID++);
                
    drawTextRelative(1BelowBar2"Exit Short"fpLongColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
                
    drawTextRelative(1BelowBar3nDefLotSize " @ " formatPriceNumber(nPrice), fpLongColornullText.PRESET|Text.CENTER|Text.BOLDnullnullnTagID++);
            }
        }
    }

    function 
    crossAbove(xSource1xSource2){
            
        var 
    bReturnValue false;

        var 
    nSource1 xSource1.getValue(0);
        var 
    nSource2 xSource2.getValue(0);

        if (
    nSource1 nSource2) {

            var 
    = -1;

            while (!
    bReturnValue){

                var 
    nPrevSource1 xSource1.getValue(i);
                var 
    nPrevSource2 xSource2.getValue(i);

                if (
    nPrevSource1 == null || nPrevSource2 == null)
                    break;

                if (
    nPrevSource1 != nPrevSource2){
                    if (
    nPrevSource2 nPrevSource1)
                         
    bReturnValue true
                    break;
                }
                
    i--;
            }
        }

        return 
    bReturnValue;


    var 
    xBolSMA null;
    var 
    xSTDDev null;
    var 
    bInitInt false;

    function 
    Calc_Bol(nLengthxSource){
        
        if (!
    bInitInt){
            
    xBolSMA sma(nLengthxSource);
            
    xSTDDev stdDev(nLengthxSource);

            
    bInitInt true;
        }
        
        var 
    nSource xSource.getValue(0);
        var 
    nBolSMA xBolSMA.getValue(0);
        var 
    nSTDDev xSTDDev.getValue(0);
        
        if (
    nSource == null || nBolSMA == null || nSTDDev == null)
            return;
        
        var 
    nBol + ((nSource nBolSMA nSTDDev) / (nSTDDev .0001));

        return 
    nBol;
    }

    function 
    Calc_Div(xBol1xBol2){
          
        var 
    nBol1 xBol1.getValue(0);
        var 
    nBol2 xBol2.getValue(0);

        if (
    nBol1 == null || nBol2 == null)
            return;

        
    nDiverg = (nBol2 nBol1) / nBol1 100 ;

        return 
    nDiverg;
    }

    var 
    xCorSMA1 null;
    var 
    xCorSMA2 null;

    function 
    Calc_Correlation(nLengthxSource1xSource2){

        if (
    getBarState() == BARSTATE_ALLBARS){
            
    xCorSMA1 sma(nLengthxSource1);
            
    xCorSMA2 sma(nLengthxSource2);
        }

        var 
    nSX xCorSMA1.getValue(0);
        var 
    nSY xCorSMA2.getValue(0);

        if (
    nSX == null || nSY == null)
            return;

        var 
    nCor1 null;
        var 
    nCor2 null;
        var 
    nCor3 null;

        for (var 
    0nLengthi++){
            var 
    nX xSource1.getValue(-i);
            var 
    nY xSource2.getValue(-i);
            
    nCor1 += (nX nSX) * (nY nSY);
            
    nCor2 += (nX nSX) * (nX nSX);
            
    nCor3 += (nY nSY) * (nY nSY);
        }

        var 
    nCorrelationRes nCor1 Math.sqrt(nCor2) / Math.sqrt(nCor3);

        return 
    nCorrelationRes;
    }

    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