2009 May: Fixed Percentage Stop Method, by Sylvain Vervoort

ICE Data Services -


FixedPctTrailingStop.efs  EFSLibrary - Discussion Board
  

File Name: FixedPctTrailingStop.efs, FixedPctTrailingStop_Strategy.efs


Description:
Fixed-Percentage Trailing Stop


Formula Parameters:

FixedPctTrailingStop.efs
Trailing Loss : 14
Long or Short : Long
Show Line Trailing Stop : True
Show Labels : True
Show Arrows : True
Display Cursor Labels : True

FixedPctTrailingStop_Strategy.efs
Trailing Loss : 14
Long or Short : Long
Show Line Trailing Stop : True
Show Labels : True
Show Arrows : True
Display Cursor Labels : True


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

Download File:
FixedPctTrailingStop.efs
FixedPctTrailingStop_Strategy.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:            Fixed-Percentage Trailing Stop Version:            1.0  03/16/2009Formula Parameters:                     Default:    Trailing Loss                       14    Long or Short                       Long    Show Line Trailing Stop             True    Show Labels                         True    Show Arrows                         True    Display Cursor Labels               TrueNotes:    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(true);    setStudyTitle("Fixed-Percentage Trailing Stop");    setCursorLabelName("Trailing Stop", 0);    setShowTitleParameters(false);    setDefaultBarFgColor(Color.red, 0);    setPlotType(PLOTTYPE_LINE, 0);     setDefaultBarThickness(2, 0);    askForInput();    var x=0;    fpArray[x] = new FunctionParameter("nTrailingLoss", FunctionParameter.NUMBER);    with(fpArray[x++]){        setName("Trailing Loss");        setLowerLimit(0);                setUpperLimit(100);                setDefault(14);    }    fpArray[x] = new FunctionParameter("sStrategy", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Long or Short");        addOption("Long");        addOption("Short");                setDefault("Long");    }    fpArray[x] = new FunctionParameter("bShowTS", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Line Trailing Stop");        addOption("true");        addOption("false");                setDefault("true");    }    fpArray[x] = new FunctionParameter("bShowL", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Labels");        addOption("true");        addOption("false");                setDefault("true");    }    fpArray[x] = new FunctionParameter("bShowArrows", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Arrows");        addOption("true");        addOption("false");                setDefault("true");    }        fpArray[x] = new FunctionParameter("ViewValue", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Display Cursor Labels");        setDefault(true);    }        }var bInit = false;var bVersion = null;var nRef = 0;var xS_R = null;function main(sStrategy, nTrailingLoss, bShowTS, bShowL, bShowArrows, ViewValue){var nClose = close(0);var nClose1 = close(-1);var nX_R = 0;var nX_R1 = 0;    if (bVersion == null) bVersion = verify();    if (bVersion == false) return;       if(bInit==false){        setShowCursorLabel(ViewValue);        xS_R = efsInternal("TrailingStop", nTrailingLoss);        bInit=true;    }    nX_R = xS_R.getValue(0);    nX_R1 = xS_R.getValue(-1);    if (nX_R1 == null) return;    if (nClose1 < nX_R1 && nClose > nX_R) {        if (bShowArrows) drawShape( Shape.UPARROW, BelowBar2, Color.green);        if (sStrategy == "Long") {            if (bShowL) drawTextRelative(-3, low(0),  " LONG", Color.white, Color.green, Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);         } else {            if (bShowL) drawTextRelative(-3, high(0),  " EXIT", Color.white, Color.green, Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);         }    }    if (nClose1 > nX_R1 && nClose < nX_R) {        if (bShowArrows) drawShape( Shape.DOWNARROW, AboveBar2, Color.red);        if (sStrategy == "Long") {            if (bShowL) drawTextRelative(-3, high(0),  " EXIT", Color.white, Color.red, Text.FRAME | Text.TOP, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);         } else {            if (bShowL) drawTextRelative(-3, high(0),  "SHORT", Color.white, Color.red, Text.FRAME , "Arial Black", 10, "b"+(getCurrentBarCount()), -5);         }        }    if (bShowTS == false) return;    return xS_R.getValue(0);}function TrailingStop(nTrailingLoss){var Close = close(0);var loss = Close * nTrailingLoss / 100;var nRes = 0;var nRef = ref(-1);    if (nRef == null) nRef = Close;    if (Close > nRef && close(-1) > nRef) {        nRes = Math.max(nRef, Close - loss)    } else {        if (Close < nRef && close(-1) < nRef) {            nRes = Math.min(nRef, Close + loss)        } else {            if (Close > nRef) {                nRes = Close - loss;            } else {                nRes = Close + loss;            }        }    }    return nRes;}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;}
/*********************************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:            Fixed-Percentage Trailing Stop StrategyVersion:            1.0  03/16/2009Formula Parameters:                     Default:    Trailing Loss                       14    Long or Short                       Long    Show Line Trailing Stop             True    Show Labels                         True    Show Arrows                         True    Display Cursor Labels               TrueNotes:    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(true);    setStudyTitle("Fixed-Percentage Trailing Stop");    setCursorLabelName("Trailing Stop", 0);    setShowTitleParameters(false);    setDefaultBarFgColor(Color.red, 0);    setPlotType(PLOTTYPE_LINE, 0);     setDefaultBarThickness(2, 0);    askForInput();    var x=0;    fpArray[x] = new FunctionParameter("nTrailingLoss", FunctionParameter.NUMBER);    with(fpArray[x++]){        setName("Trailing Loss");        setLowerLimit(0);                setUpperLimit(100);                setDefault(14);    }    fpArray[x] = new FunctionParameter("sStrategy", FunctionParameter.STRING);    with(fpArray[x++]){        setName("Long or Short");        addOption("Long");        addOption("Short");                setDefault("Long");    }    fpArray[x] = new FunctionParameter("bShowTS", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Line Trailing Stop");        addOption("true");        addOption("false");                setDefault("true");    }    fpArray[x] = new FunctionParameter("bShowL", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Labels");        addOption("true");        addOption("false");                setDefault("true");    }    fpArray[x] = new FunctionParameter("bShowArrows", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Show Arrows");        addOption("true");        addOption("false");                setDefault("true");    }        fpArray[x] = new FunctionParameter("ViewValue", FunctionParameter.BOOLEAN);    with(fpArray[x++]){        setName("Display Cursor Labels");        setDefault(true);    }        }var bInit = false;var bVersion = null;var nRef = 0;var xS_R = null;function main(sStrategy, nTrailingLoss, bShowTS, bShowL, bShowArrows, ViewValue){var nClose = close(0);var nClose1 = close(-1);var nX_R = 0;var nX_R1 = 0;    if (bVersion == null) bVersion = verify();    if (bVersion == false) return;       if(bInit==false){        setShowCursorLabel(ViewValue);        xS_R = efsInternal("TrailingStop", nTrailingLoss);        bInit=true;    }    if (getCurrentBarIndex() == 0) return;    nX_R = xS_R.getValue(0);    nX_R1 = xS_R.getValue(-1);    if (nX_R1 == null) return;    if (nClose1 < nX_R1 && nClose > nX_R) {        if (bShowArrows) drawShape( Shape.UPARROW, BelowBar2, Color.green);        if (sStrategy == "Long") {            if (bShowL) drawTextRelative(-3, low(0),  " LONG", Color.white, Color.green, Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);             Strategy.doLong("Long", Strategy.MARKET, Strategy.THISBAR);        } else {            if (bShowL) drawTextRelative(-3, high(0),  " EXIT", Color.white, Color.green, Text.FRAME, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);             if (Strategy.isShort()) Strategy.doCover("Exit Short", Strategy.MARKET, Strategy.THISBAR);        }    }    if (nClose1 > nX_R1 && nClose < nX_R) {        if (bShowArrows) drawShape( Shape.DOWNARROW, AboveBar2, Color.red);        if (sStrategy == "Long") {            if (bShowL) drawTextRelative(-3, high(0),  " EXIT", Color.white, Color.red, Text.FRAME | Text.TOP, "Arial Black", 10, "b"+(getCurrentBarCount()), -5);             if (Strategy.isLong()) Strategy.doSell("Exit Long", Strategy.MARKET, Strategy.THISBAR);        } else {            if (bShowL) drawTextRelative(-3, high(0),  "SHORT", Color.white, Color.red, Text.FRAME , "Arial Black", 10, "b"+(getCurrentBarCount()), -5);             Strategy.doShort("Short", Strategy.MARKET, Strategy.THISBAR);        }        }    if (bShowTS == false) return;    return xS_R.getValue(0);}function TrailingStop(nTrailingLoss){var Close = close(0);var loss = Close * nTrailingLoss / 100;var nRes = 0;var nRef = ref(-1);    if (nRef == null) nRef = Close;    if (Close > nRef && close(-1) > nRef) {        nRes = Math.max(nRef, Close - loss)    } else {        if (Close < nRef && close(-1) < nRef) {            nRes = Math.min(nRef, Close + loss)        } else {            if (Close > nRef) {                nRes = Close - loss;            } else {                nRes = Close + loss;            }        }    }    return nRes;}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;}