/*********************************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 responsiblefor the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release.Description: Mean-Reversion Swing Trading by Ken CalhounVersion: 1.00 11/09/2016Formula Parameters: Default:Slope 1Trigger 0.5Notes:The related article is copyrighted material. If you are not a subscriberof Stocks & Commodities, please visit www.traders.com.**********************************/var fpArray = new Array();function preMain(){ setPriceStudy(true); setStudyTitle("MR Swing"); var x = 0; fpArray[x] = new FunctionParameter("Slope", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(0.01); setUpperLimit(100); setDefault(1); setName("Slope"); } fpArray[x] = new FunctionParameter("Trigger", FunctionParameter.NUMBER); with(fpArray[x++]){ setLowerLimit(0.000001); setDefault(0.5); setName("Trigger"); }}var bInit = false;var bVersion = null;var xDHigh = null;var xHigh = null;var xDLow = null;var xLow = null;var xDDateTime = null;var bInSwing = false;var bSwFinished = false;var nSwBarsBack = 0;var nMeanRev = 0;var nMeanHigh = 0;var nSwHigh = 0;var bMRFound = false;var dMeanRevD = null;var bFindBO = false;function main(Slope, Trigger){ if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (getBarState() == BARSTATE_ALLBARS){ bInSwing = false; bSwFinished = false; nSwBarsBack = 0; nMeanRev = 0; nMeanHigh = 0; nSwHigh = 0; bMRFound = false; dMeanRevD = null; bFindBO = false; bInit = false; } if (!bInit){ xDHigh = high(inv("D")); xDLow = low(inv("D")); xDDateTime = rawtime(inv("D")); xLow = low(); xHigh = high(); } nDHigh = xDHigh.getValue(0); var slopeFinished = false; var i = 0; var swingLen = 0; while (!slopeFinished){ if (xDHigh.getValue(i) > xDHigh.getValue(i-1)){ swingLen++; i--; } else slopeFinished = true; } if (bInSwing && swingLen == 0){ nSwBarsBack = 0; bSwFinished = true; bInSwing = false; } if (bSwFinished && nMeanRev != 0){ nSwBarsBack++; if (xDLow.getValue(-1) < nMeanRev && day(0) != day(-1)){ drawLineRelative(-1, nMeanRev, -nSwBarsBack, nSwHigh, PS_SOLID, 3, Color.red, ("Mean rev. " + (rawtime(-nSwBarsBack)))); dMeanRevD = xDDateTime.getValue(-1); nMeanHigh = nSwHigh; nSwBarsBack = 0; bSwFinished = false; bMRFound = false; } } if (!bSwFinished && !bInSwing && !bMRFound && nMeanRev != 0 && xDDateTime.getValue(-1) == dMeanRevD){ if (xHigh.getValue(0) >= nMeanRev + Trigger){ drawTextRelative(0, BelowBar1, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, "Entry"+rawtime(0)); drawTextRelative(0, BelowBar2, "MR", Color.green, null, Text.PRESET|Text.CENTER|Text.BOLD, "Arial", 8, "Entry text"+rawtime(0)); bMRFound = true; bFindBO = true; nMeanRev = 0; } } if (bFindBO && xHigh.getValue(0) >= nMeanHigh){ drawTextRelative(0, AboveBar1, "\u00E9", Color.green, null, Text.PRESET|Text.CENTER, "Wingdings", 10, "2nd Entry"+rawtime(0)); drawTextRelative(0, AboveBar2, "BO", Color.green, null, Text.PRESET|Text.CENTER|Text.BOLD, "Arial", 8, "2nd Entry text"+rawtime(0)); bFindBO = false; } if (swingLen >=4){ var nSStart = getFirstBarIndexOfDay(xDDateTime.getValue(-(swingLen))); if(nSStart != null){ if (((nDHigh - xDHigh.getValue(-(swingLen)))/(xDLow.getValue(0) - xDLow.getValue(-(swingLen)))) > Slope){ nSwHigh = nDHigh; var nSwLow = xDLow.getValue(-(swingLen)); nMeanRev = (nSwHigh + nSwLow)/2; drawLineRelative(0, nDHigh, (nSStart - getCurrentBarIndex()), xDLow.getValue(-(swingLen)), PS_SOLID, 3, Color.green, "Uptrend" + xDDateTime.getValue(-(swingLen))); bInSwing = true; bSwFinished = false; nSwBarsBack = 0; } else{ bInSwing = false; bSwFinished = true; } } } }function verify(){ var b = false; if (getBuildNumber() < 779){ drawTextAbsolute(5, 35, "This study requires version 10.6 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;} |