2009 Aug: Combining DMI And MA For A EUR/USD Trading System, by Rombout Kerstens

ICE Data Services -

MAandDMIStrategy.efs  

EFSLibrary - Discussion Board  

File Name: MAandDMIStrategy.efs

Description:
Combining DMI And Moving Average For A EUR/USD Trading System, by Rombout Kerstens

 

Formula Parameters:

  • MA Length : 30
  • DMI Length : 14

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

Download File:
MAandDMIStrategy.efs



EFS Code:

/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2009. 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:        
    Combining DMI And Moving Average For A EUR/USD Trading System, by Rombout Kerstens

Version:            1.0  06/08/2009

Formula Parameters:                     Default:
    MA Length                           30
    DMI Length                          14
    
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();
var bInit = false;
var bVersion = null;

function preMain() {
    setPriceStudy(false);
    setShowCursorLabel(true);
    setShowTitleParameters(false);
    setStudyTitle("MA and MDI Strategy");
    setColorPriceBars(true);    
    setPlotType(PLOTTYPE_LINE);
    setDefaultBarThickness(2, 0);
    setDefaultBarFgColor(Color.green, 0);
    setCursorLabelName("DMI Plus", 0);     
    setPlotType(PLOTTYPE_LINE);
    setDefaultBarThickness(2, 1);
    setDefaultBarFgColor(Color.red, 1);
    setCursorLabelName("DMI Minus", 1);         
    askForInput();
    var x=0;
    fpArray[x] = new FunctionParameter("Length_MA", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("MA Length");
        setLowerLimit(1);		
        setDefault(30);
    }
    fpArray[x] = new FunctionParameter("Length_DMI", FunctionParameter.NUMBER);
	with(fpArray[x++]){
	    setName("DMI Length");
        setLowerLimit(1);		
        setDefault(14);
    }
}

var xPDI = null;
var xNDI = null;
var xMA = null;
var xClose = null;

function main(Length_MA, Length_DMI) {
var nBarState = getBarState();
var bMDILong = false;
var bMDIShort = false;
var bMALong = false;
var bMAShort = false;
var nPDI = 0;
var nNDI = 0;
var nMA = 0;
var nPDI_1 = 0;
var nNDI_1 = 0;
var nMA_1 = 0;

    if (bVersion == null) bVersion = verify();
    if (bVersion == false) return;   
    if (getCurrentBarIndex() == 0) return;    
    setPriceBarColor(Color.black);
    if (nBarState == BARSTATE_ALLBARS) {
        if (Length_MA == null) Length_MA = 30;
        if (Length_DMI == null) Length_DMI = 14;
    }    
    if (bInit == false) { 
        xMA = sma(Length_MA);
        xPDI = pdi(Length_DMI, 1);
        xNDI = ndi(Length_DMI, 1);
        xClose = close();
        bInit = true; 
    }
    nPDI = xPDI.getValue(0);
    nNDI = xNDI.getValue(0);
    nMA = xMA.getValue(0);
    nPDI_1 = xPDI.getValue(-1);
    nNDI_1 = xNDI.getValue(-1);
    nMA_1 = xMA.getValue(-1);
    if (nMA_1 == null || nPDI_1 == null) return;
    if (nPDI > nNDI && nPDI_1 < nNDI_1) {
        bMDILong = true;
        bMDIShort = false;
    }    
    if (nPDI < nNDI && nPDI_1 > nNDI_1) {
        bMDILong = false;
        bMDIShort = true;
    }    
    if (xClose.getValue(0) > nMA && xClose.getValue(-1) < nMA_1) {
        bMALong = true;
        bMAShort = false;
    }    
    if (xClose.getValue(0) < nMA && xClose.getValue(-1) > nMA_1) {
        bMALong = false;
        bMAShort = true;
    }    
    if (bMDILong && bMALong && !Strategy.isLong()) {
        drawTextRelative(0, TopRow1, " LONG", Color.white, Color.green, Text.PRESET|Text.CENTER|Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5); 
        Strategy.doLong("Enyry Long", Strategy.CLOSE, Strategy.THISBAR);
    }    
    if (bMDIShort && bMAShort && Strategy.isLong()) {
        drawTextRelative(0, BottomRow1,  " EXIT", Color.white, Color.red, Text.PRESET|Text.CENTER|Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5); 
        Strategy.doSell("Exit Long", Strategy.CLOSE, Strategy.THISBAR);
    }    
	if(Strategy.isLong())
        setBarBgColor(Color.lime, 0, 0, 100);
    return new Array(nPDI, nNDI);
}

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;
}