/*********************************Provided By: eSignal (Copyright ) eSignal), a division of Interactive Data Corporation. 2007. 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: Profit Locking and The Relative Price Channel by Leon WilsonVersion: 1.0 11/7/2007Notes:* January 2008 Issue of Stocks and Commodities Magazine* Study requires Daily, Weekly, or Monthly interval.* Study requires version 8.0 or later.* The study requires the Date of the trend to be entered through Edit Studies. The study does not programaticlly determine the start of the trend to be analyzed.Formula Parameters: Defaults:Day of Trend 19Month of Trend 10Year of Trend 2007Bearish Periods 21Multiplication Factor 3.2Initial Stop 10RSI Periods 34**********************************/function preMain() { setPriceStudy(true); setStudyTitle("Bear Range Trailing Stop "); setCursorLabelName("Stop", 0); setCursorLabelName("Bullish", 1); setDefaultBarFgColor(Color.blue, 0); setDefaultBarFgColor(Color.green, 1); setDefaultBarThickness(2, 0); setDefaultBarThickness(2, 1); setShowTitleParameters(false); var fp1 = new FunctionParameter("Dy", FunctionParameter.NUMBER); fp1.setName("Day of Trend"); fp1.setLowerLimit(1); fp1.setUpperLimit(31); fp1.setDefault(19); var fp2 = new FunctionParameter("Mn", FunctionParameter.NUMBER); fp2.setName("Month of Trend"); fp2.setLowerLimit(1); fp2.setUpperLimit(12); fp2.setDefault(10); var fp3 = new FunctionParameter("Yr", FunctionParameter.NUMBER); fp3.setName("Year of Trend"); fp3.setLowerLimit(1); fp3.setDefault(2007); var fp4 = new FunctionParameter("Value1", FunctionParameter.NUMBER); fp4.setName("Bearish Periods"); fp4.setLowerLimit(3); fp4.setUpperLimit(55); fp4.setDefault(21); var fp5 = new FunctionParameter("Value2", FunctionParameter.NUMBER); fp5.setName("Multiplication Factor"); fp5.setLowerLimit(1); fp5.setUpperLimit(10); fp5.setDefault(3.2); var fp6 = new FunctionParameter("Value3", FunctionParameter.NUMBER); fp6.setName("Initial Stop"); fp6.setLowerLimit(0); fp6.setUpperLimit(100000); fp6.setDefault(10); var fp7 = new FunctionParameter("Value4", FunctionParameter.NUMBER); fp7.setName("RSI Periods"); fp7.setLowerLimit(1); fp7.setDefault(34); }// Global Variablesvar bVersion = null; // Version flagvar bInit = false; // Initialization flagvar xIndex = null;var xRangeA = null;var xBearish = null;var Stop = null;var Stop_1 = null;var nDaysSince = -1;function main(Dy, Mn, Yr, Value1, Value2, Value3, Value4) { var nState = getBarState(); var nIndex = getCurrentBarIndex(); if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (!isDWM()) { drawTextPixel(5, 35, "Study requires a D, W, or M interval.", Color.red, Color.lightgrey, Text.RELATIVETOLEFT|Text.RELATIVETOBOTTOM, null, 12, "error0"); return; } if (bInit == false) { xIndex = rsi(Value4); xRangeA = sma(Value1, efsInternal("calcSum", close(), low(), Value1)); xBearish = efsInternal("calcBearish", Value1); setStudyTitle("Bear Range Trailing Stop - " + Mn +"/"+ Dy +"/"+ Yr); bInit = true; } if (xIndex.getValue(0) == null) return; var nHoldingDays = BarsSince(Dy, Mn, Yr); if (nIndex >= -1 && nHoldingDays == -1) {// Date not found drawTextPixel(5, 35, "Date not found in chart data for BarsSince("+Mn+"/"+Dy+"/"+Yr+")", Color.red, Color.lightgrey, Text.RELATIVETOLEFT|Text.RELATIVETOBOTTOM, null, 12, "error1"); drawTextPixel(5, 15, "Enter new date or extend chart history.", Color.red, Color.lightgrey, Text.RELATIVETOLEFT|Text.RELATIVETOBOTTOM, null, 12, "error2"); return; } else { removeText("error1"); removeText("error2"); } var Value5 = 75; // OverBought Region var OB = xIndex.getValue(0) - Value5; if (OB == null) return; var Bullish = close(0) - (close(0) * (OB/100)); var Bearish = xBearish.getValue(0); var RangeA = xRangeA.getValue(0); if (Bearish == null || RangeA == null) return; if (nState == BARSTATE_NEWBAR) { if (Stop != null) Stop_1 = Stop; } if (nHoldingDays >= 0) { Stop = close(0) - ((Bearish+RangeA) * Value2 ); if (Stop > Stop_1 && Stop > Value3) { Stop = Stop; } else if (Stop > Stop_1 && Stop < Value3) { Stop = Value3; } else if (Stop <= Stop_1) { Stop = Stop_1; } else { Stop = Stop*nHoldingDays; } } else { return; } return new Array(Stop_1, Bullish); }var xA = null;var xB = null;function calcSum(a, b, len) { if (xA == null) xA = sma(len, a); if (xB == null) xB = sma(len, b); var nA = a.getValue(0); var nB = b.getValue(0); if (nA == null || nB == null) return; return (nA-nB);}var xC = null;function calcBearish(len) { if (xC == null) xC = sma(len, efsInternal("calcBSrc")); var nC = xC.getValue(0); if (nC == null) return; return nC;}function calcBSrc() { if (low(-1) == null) return; return Math.abs(low(0) - low(-1));}function BarsSince(d, m, y) { var nRet = -1; if (nDaysSince < 0 && day(0) >= d && month(0) >= m && year(0) >= y) { nDaysSince = 0; } else if (nDaysSince >= 0 && getBarState() == BARSTATE_NEWBAR) { nDaysSince++; } if (nDaysSince >= 0) nRet = nDaysSince; return nRet;}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;} |