2017 May: Up & Down Detecting Swings by Domenico D'Errico
File Name:
- BollingerBands.efs,
- Pivot_HighLow.efs,
- RSI_Cross.efs
- RSI_Cross_HLLH.efs
Description:
Up & Down Detecting Swings by Domenico D'Errico
Formula Parameters:
BollingerBands.efs
- Period (W): 4
- Length: 12
- StdDev: 2
Pivot_HighLow.efs
- Period: 4
RSI_Cross.efs
- Period (W): 4
- Length: 5
- Overbought Level: 60
- Oversold Level: 40
RSI_Cross_HLLH.efs
- Period (W): 4
- Length: 5
- Overbought Level: 60
- Oversold Level: 40
Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download File:
BollingerBands.efs
Pivot_HighLow.efs
RSI_Cross.efs
RSI_Cross_HLLH.efs
BollingerBands.efs, Pivot_HighLow.efs, RSI_Cross.efs, RSI_Cross_HLLH.efs

EFS Code:
BollingerBands.efs
/********************************* 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 responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Up & Down Detecting Swings by Domenico D'Errico Version: 1.00 03/14/2017 Formula Parameters: Default: Period (W) 4 Length 12 StdDev 2 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(){ setPriceStudy(true); setStudyTitle("BollingerBands"); setCursorLabelName("Upper", 0); setCursorLabelName("Lower",1); var x=0; fpArray[x] = new FunctionParameter("Period", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Period (W)"); setDefault(4); setLowerLimit(1); } fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Length"); setDefault(12); setLowerLimit(1); } fpArray[x] = new FunctionParameter("StdDev", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("StdDev"); setDefault(2); setLowerLimit(1); } } var bInit = false; var bVersion = null; var xHigh = null; var xLow = null; var xUpper = null; var xLower = null; var positionDate = null; var rawDay = 86400; function main(Period, Length, StdDev){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getCurrentBarCount() <= Length) return; if (getBarState() == BARSTATE_ALLBARS){ bInit = false; } if (!bInit){ xHigh = high(); xLow = low(); xUpper = upperBB(Length, StdDev); xLower = lowerBB(Length, StdDev); positionDate = null; bInit = true; } if (Strategy.isInTrade()){ if (rawtime(0) >= (positionDate + rawDay * (Period * 7))){ if (Strategy.isLong()){ Strategy.doSell("BB CROSS OVER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } else if (Strategy.isShort()){ Strategy.doCover("BB CROSS UNDER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } } } if (getCurrentBarIndex() != 0){ if (!Strategy.isInTrade()){ if (xLow.getValue(-1) < xLower.getValue(-1) && xLow.getValue(0) > xLower.getValue(0)){ Strategy.doLong("BB CROSS OVER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0,BelowBar2, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } else if (xHigh.getValue(-1) > xUpper.getValue(-1) && xHigh.getValue(0) < xUpper.getValue(0)){ Strategy.doShort("BB CROSS UNDER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0, AboveBar2, "\u00EA", Color.red, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } } } return [xUpper.getValue(0), xLower.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; }
Pivot_HighLow.efs
/********************************* 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 responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Up & Down Detecting Swings by Domenico D'Errico Version: 1.00 03/14/2017 Formula Parameters: Default: Period 4 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(){ setPriceStudy(true); setStudyTitle("Pivot H/L"); var x=0; fpArray[x] = new FunctionParameter("Period", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Period"); setDefault(4); setLowerLimit(1); } } var bInit = false; var bVersion = null; var xHigh = null; var xLow = null; var positionDate = null; var rawDay = 86400; function main(Period){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getBarState() == BARSTATE_ALLBARS){ bInit = false; } if (!bInit){ xHigh = high(); xLow = low(); positionDate = null; bInit = true; } if (Strategy.isInTrade()){ if (rawtime(0) >= (positionDate + (rawDay * Period * 7))){ if (Strategy.isLong()){ Strategy.doSell("PIVOT LOW Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } else if (Strategy.isShort()){ Strategy.doCover("PIVOT HIGH Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } } } if (getCurrentBarIndex() != 0){ if (!Strategy.isInTrade()){ if (IsPivotLow(xLow)){ Strategy.doLong("PIVOT LOW", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(-1,BelowBar1, "\u009F", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 11, positionDate); } else if (IsPivotHigh(xHigh)){ Strategy.doShort("PIVOT HIGH", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(-1, AboveBar1, "\u009F", Color.red, null, Text.PRESET|Text.CENTER, "Wingdings", 11, positionDate); } } } return; } function IsPivotLow(xLow){ var res = false; if (xLow != null){ if (xLow.getValue(-1) < xLow.getValue(0) && xLow.getValue(-1) < xLow.getValue(-2)) res = true; } return res; } function IsPivotHigh(xHigh){ var res = false; if (xHigh != null){ if (xHigh.getValue(-1) > xHigh.getValue(0) && xHigh.getValue(-1) > xHigh.getValue(-2)) res = true; } return res; } 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; }
RSI_Cross.efs
/********************************* 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 responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Up & Down Detecting Swings by Domenico D'Errico Version: 1.00 03/14/2017 Formula Parameters: Default: Period (W) 4 Length 5 Overbought Level 60 Oversold Level 40 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(){ setPriceStudy(false); setStudyTitle("RSI Cross"); setDefaultBarFgColor(Color.grey); setCursorLabelName("RSI"); var x=0; fpArray[x] = new FunctionParameter("Period", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Period (W)"); setDefault(4); setLowerLimit(1); } fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Length"); setDefault(5); setLowerLimit(1); } fpArray[x] = new FunctionParameter("UpLevel", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Overbought level"); setDefault(60); } fpArray[x] = new FunctionParameter("LwLevel", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Oversold Level"); setDefault(40); } } var bInit = false; var bVersion = null; var xRSI = null; var positionDate = null; var rawDay = 86400; function main(Period, Length, UpLevel, LwLevel){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getCurrentBarCount() <= Length) return; if (getBarState() == BARSTATE_ALLBARS){ bInit = false; } if (!bInit){ xRSI = rsi(Length); addBand(UpLevel, PS_DASH, 1, Color.grey, "Overbought"); addBand(LwLevel, PS_DASH, 1, Color.grey, "Oversold"); positionDate = null; bInit = true; } if (Strategy.isInTrade()){ if (rawtime(0) >= (positionDate + rawDay * (Period * 7))){ if (Strategy.isLong()){ Strategy.doSell("RSI CROSS OVER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } else if (Strategy.isShort()){ Strategy.doCover("RSI CROSS UNDER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } } } if (getCurrentBarIndex() != 0){ if (!Strategy.isInTrade()){ if (xRSI.getValue(-1) < LwLevel && xRSI.getValue(0) > LwLevel){ Strategy.doLong("RSI CROSS OVER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0, BottomRow1, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } else if (xRSI.getValue(-1) > UpLevel && xRSI.getValue(0) < UpLevel){ Strategy.doShort("RSI CROSS UNDER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0, TopRow1, "\u00EA", Color.red, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } } } if (xRSI.getValue(0) > UpLevel) setBarFgColor(Color.red); else if (xRSI.getValue(0) < LwLevel) setBarFgColor(Color.green); return xRSI.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; }
RSI_Cross_HLLH.efs
/********************************* 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 responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Up & Down Detecting Swings by Domenico D'Errico Version: 1.00 03/14/2017 Formula Parameters: Default: Period (W) 4 Length 5 Overbought Level 60 Oversold Level 40 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(){ setPriceStudy(false); setStudyTitle("RSI Cross HLLH"); setDefaultBarFgColor(Color.grey); setCursorLabelName("RSI"); var x=0; fpArray[x] = new FunctionParameter("Period", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Period (W)"); setDefault(4); setLowerLimit(1); } fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Length"); setDefault(5); setLowerLimit(1); } fpArray[x] = new FunctionParameter("UpLevel", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Overbought level"); setDefault(60); } fpArray[x] = new FunctionParameter("LwLevel", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Oversold Level"); setDefault(40); } } var bInit = false; var bVersion = null; var xRSI = null; var xHigh = null; var xLow = null; var positionDate = null; var rawDay = 86400; function main(Period, Length, UpLevel, LwLevel){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getCurrentBarCount() <= Length) return; if (getBarState() == BARSTATE_ALLBARS){ bInit = false; } if (!bInit){ xRSI = rsi(Length); xHigh = high(); xLow = low(); addBand(UpLevel, PS_DASH, 1, Color.grey, "Overbought"); addBand(LwLevel, PS_DASH, 1, Color.grey, "Oversold"); positionDate = null; bInit = true; } if (Strategy.isInTrade()){ if (rawtime(0) >= (positionDate + rawDay * (Period * 7))){ if (Strategy.isLong()){ Strategy.doSell("RSI CROSS OVER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } else if (Strategy.isShort()){ Strategy.doCover("RSI CROSS UNDER Exit", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); } } } if (getCurrentBarIndex() != 0){ if (!Strategy.isInTrade()){ if (xRSI.getValue(0) < LwLevel && xLow.getValue(0) > xLow.getValue(-1)){ Strategy.doLong("RSI CROSS OVER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0, BottomRow1, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } else if (xRSI.getValue(0) > UpLevel && xHigh.getValue(0) < xHigh.getValue(-1)){ Strategy.doShort("RSI CROSS UNDER", Strategy.MARKET, Strategy.NEXTBAR, Strategy.DEFAULT); positionDate = rawtime(0); drawTextRelative(0, TopRow1, "\u00EA", Color.red, null, Text.PRESET|Text.CENTER, "Wingdings", 10, positionDate); } } } if (xRSI.getValue(0) > UpLevel) setBarFgColor(Color.red); else if (xRSI.getValue(0) < LwLevel) setBarFgColor(Color.green); return xRSI.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; }