2012 Sep: Developing A Multi-Level Strategy by Vladimir Vladimirovich Voznjuk

ICE Data Services -

MultiPairIndicator.efs  
EFSLibrary - Discussion Board  

File Name: MultiPairIndicator.efs

Description:
Pair Trading. Developing A Multi-Level Strategy by Vladimir Vladimirovich Voznjuk

Formula Parameters:

MultiPairIndicator.efs

  • Symbol 1: 6J #F
  • Symbol 2: 6E #F
  • One-way Pair: false
  • Lower Band: -0.01
  • Upper Band: 0.01
  • Signal Method: Levels
  • Buy Color: blue
  • Sell 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:
MultiPairIndicator.efs

MultiPairIndicator.efs

EFS Code:
MultiPairIndicator.efs

/*********************************
Provided By:  
eSignal (Copyright c eSignal), a division of Interactive Data 
Corporation. 2012. 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:     
    Pair Trading. Developing A Multi-Level Strategy by Vladimir Vladimirovich Voznjuk

Version:            1.00  16/07/2012

Formula Parameters:                         Default:
    Symbol 1                                  6J #F
    Symbol 2                                  6E #F 
    One-way Pair                              false
    Lower Band                                -0.01
    Upper Band                                0.01
    Signal Method                             Levels 
    Buy Color                                 blue
    Sell Color                                red 
    
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("MultiPair Indicator");      
    setIntervalsBackfill(true);  
    
    var x = 0;
    
    fpArray[x] = new FunctionParameter("gSymbol1", FunctionParameter.STRING);
    with(fpArray[x++])
    {
        
        setName("Symbol 1");        
        setDefault("6J #F");
    }     
    
    fpArray[x] = new FunctionParameter("gSymbol2", FunctionParameter.STRING);
    with(fpArray[x++])
    {
        setName("Symbol 2");        
        setDefault("6E #F");
    }     
    
    fpArray[x] = new FunctionParameter("gOneWay", FunctionParameter.BOOLEAN);
    with(fpArray[x++])
    {
        setName("One-way Pair");        
        setDefault(false);
    }    
    
    fpArray[x] = new FunctionParameter("gLower", FunctionParameter.NUMBER);
    with(fpArray[x++])
    {
        setName("Lower Band");        
        setDefault(-0.01);
    } 
    
    fpArray[x] = new FunctionParameter("gUpper", FunctionParameter.NUMBER);
    with(fpArray[x++])
    {
        setName("Upper Band");        
        setDefault(0.01);
    } 
    
    fpArray[x] = new FunctionParameter("gMethod", FunctionParameter.STRING);
    with(fpArray[x++])
    {
        setName("Signal Method");
        addOption("Levels");
        addOption("Zero line");         
        setDefault("Levels");
    } 
    
    fpArray[x] = new FunctionParameter("gBuyColor", FunctionParameter.COLOR);
    with(fpArray[x++])
    {
        setName("Buy Color");        
        setDefault(Color.blue);
    } 
    
    fpArray[x] = new FunctionParameter("gSellColor", FunctionParameter.COLOR);
    with(fpArray[x++])
    {
        setName("Sell Color");        
        setDefault(Color.red);
    } 
}

var bInit = false;
var bVersion = null;

var xSymbol2Open = null;
var xSymbol2Close = null;

var xSymbol1Open = null;
var xSymbol1Close = null;

var vInterval = null;

function main(gSymbol1, gSymbol2, gOneWay, gLower, gUpper, gMethod,gBuyColor,gSellColor)
{
    if (bVersion == null) bVersion = verify();
    if (bVersion == false) return; 
    
    if (!bInit)
    {
        vInterval = getInterval();
        xSymbol2Open = open(sym(gSymbol2+","+vInterval));
        xSymbol2Close = close(sym(gSymbol2+","+vInterval));
        
        xSymbol1Open = open(sym(gSymbol1+","+vInterval));
        xSymbol1Close = close(sym(gSymbol1+","+vInterval));
        
        addBand(gLower,PS_SOLID,1,gBuyColor,0);
        addBand(gUpper,PS_SOLID,1,gSellColor,1);
        addBand(0,PS_SOLID,1,Color.lime,2);
        
        bInit = true;
    }

    var vSymbol2Open_0 = xSymbol2Open.getValue(0);
    var vSymbol2Open_1 = xSymbol2Open.getValue(-1);
    
    var vSymbol2Close_0 = xSymbol2Close.getValue(0);
    var vSymbol2Close_1 = xSymbol2Close.getValue(-1);
    
    var vSymbol1Open_0 = xSymbol1Open.getValue(0);
    var vSymbol1Open_1 = xSymbol1Open.getValue(-1);
        
    var vSymbol1Close_0 = xSymbol1Close.getValue(0);
    var vSymbol1Close_1 = xSymbol1Close.getValue(-1);
    
    if (vSymbol2Open_1 == null || vSymbol2Close_1 == null || vSymbol1Open_1 == null || vSymbol1Close_1 == null) 
        return;
    
    var vRes_0 = 0;
    var vRes_1 = 0;
    
    if (gOneWay)
    {
        vRes_0 = (vSymbol2Close_0 - vSymbol2Open_0)+(vSymbol1Close_0 - vSymbol1Open_0);
        vRes_1 = (vSymbol2Close_1 - vSymbol2Open_1)+(vSymbol1Close_1 - vSymbol1Open_1);
    }
    else
    {
        vRes_0 = (vSymbol2Close_0 - vSymbol2Open_0)-(vSymbol1Close_0 - vSymbol1Open_0);
        vRes_1 = (vSymbol2Close_1 - vSymbol2Open_1)-(vSymbol1Close_1 - vSymbol1Open_1);
    }
    
    var nBarsCount = getCurrentBarCount();
    
    if (gMethod == "Levels")
    {   
        if (vRes_0>gUpper && vRes_1<gupper) {="" drawshaperelative(0,="" toprow2="" ,="" shape.downarrow,="" null,="" gsellcolor,="" shape.preset,="shape.preset," ldn="ldn" +nbarscount);="" }="" else="" removeshape(="removeshape(" if="" (vres_0="(vres_0"><glower="" &&="" vres_1="">gLower) 
        {
            drawShapeRelative(0, BottomRow2  , Shape.UPARROW, null, gBuyColor, Shape.PRESET,"LUp"+nBarsCount);
        } 
        else
        {
            removeShape("LUp"+nBarsCount);
        }
    }
    
    if (gMethod == "Zero line")
    {   
        if (vRes_1<0 && vRes_0>0) 
        {
            drawShapeRelative(0, BottomRow2  , Shape.UPARROW, null, gBuyColor, Shape.PRESET,"ZUp"+nBarsCount); 
        } 
        else
        {
            removeShape("ZUp"+nBarsCount);
        }

        if (vRes_1>0 && vRes_0<0) 
        {
            drawShapeRelative(0, TopRow2  , Shape.DOWNARROW, null, gSellColor, Shape.PRESET,"ZDn"+nBarsCount);           
        } 
        else
        {
            removeShape("ZDn"+nBarsCount);
        }
    }
    
    return vRes_0;
}

function verify() {
    var b = false;
    if (getBuildNumber() < 779) {
        drawTextAbsolute(5, 35, "This study requires version 8.0 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;
}