SD-ADX.efs, NormalizedStdev.efs,StochOf_NormStdev.efs, VolatilityModifiedFVE2.efs
EFSLibrary - Discussion Board
File Name:
- SD-ADX.efs
- NormalizedStdev.efs
- StochOf_NormStdev.efs
- VolatilityModifiedFVE2.efs
Description:
These indicators are based on the January 2005 article, Detecting Breakouts in Low-Priced Stocks: Los Vegas Or Los Nasdaq?, by Markos Katsanos.
Formula Parameters:
SD-ADX.efs
- Period for SD: 30
- Period for ADX: 25
- Color: Magenta
- Thickness: 2
NormalizedStdev.efs
- Length: 30
- Color: Aqua
- Thickness: 2
StochOf_NormStdev.efs
- Normalized Stdev Period: 30
- Stoch \%K Length: 150
- Stoch \%K Smoothing: 1
- Stoch \%D Length: 10
- Upper Band: 80
- Lower Band: 20
- Band's Color: Black
- Display Bands: True - [True, False]
- %K Color: Red
- %K Thickness: 2
- %D Color: Blue
- %D Thickness: 1
- %D Display: Off - [On, Off]
VolatilityModifiedFVE2.efs
- Periods for FVE: 14
- EMA Periods for FVE: 40
- Coef for Cutoff: 0.1
- FVE Color: Green
- FVE Thickness: 2
- FVE EMA Color: Blue
- FVE EMA Thickness: 1
- EMA Display: Off - [On, Off]
Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download File:
SD-ADX.efs
NormalizedStdev.efs
StochOf_NormStdev.efs
VolatilityModifiedFVE2.efs
EFS Code:
SD-ADX.efs
/***************************************************************** Provided By : eSignal (c) Copyright 2004 Description: SD*Adx - by Markos Katsanos from Detecting Breakouts Version 1.0 Notes: Formula Parameters: Defaults: Period for SD 30 Period for ADX 25 Color magenta Thickness 2 *****************************************************************/ function preMain() { setStudyTitle("SD*Adx "); setCursorLabelName("SD*Adx"); setDefaultBarThickness(2); addBand(1.3, PS_SOLID, 1, Color.navy, "band"); setShowTitleParameters(false); // Formula Parameters var fp1 = new FunctionParameter("nPeriod", FunctionParameter.NUMBER); fp1.setName("Period for SD"); fp1.setLowerLimit(5); fp1.setUpperLimit(80); fp1.setDefault(30); var fp2 = new FunctionParameter("nDI", FunctionParameter.NUMBER); fp2.setName("Period for ADX"); fp2.setLowerLimit(5); fp2.setUpperLimit(80); fp2.setDefault(25); // Study Parameters var sp1 = new FunctionParameter("cColor", FunctionParameter.COLOR); sp1.setName("Color"); sp1.setDefault(Color.magenta); var sp2 = new FunctionParameter("nThick", FunctionParameter.NUMBER); sp2.setName("Thickness"); sp2.setDefault(2); } var bEdit = true; var aPrice = null; var vStudyMA = null; var vStudyADX = null; var nC = null; function main(nPeriod, nDI, cColor, nThick) { if (bEdit == true) { aPrice = new Array(nPeriod); vStudyMA = new MAStudy(nPeriod, 0, "Close", MAStudy.SIMPLE); vStudyADX = new ADXDMStudy(nDI, nDI); setDefaultBarFgColor(cColor, 0); setDefaultBarThickness(nThick, 0); bEdit = false; } var nState = getBarState(); if (nState == BARSTATE_NEWBAR && nC != null) { aPrice.pop(); aPrice.unshift(nC); } nC = close(0); aPrice[0] = nC; var vMA = vStudyMA.getValue(MAStudy.MA); if (vMA == null) return; var vADX = vStudyADX.getValue(ADXDMStudy.ADX); if (vADX == null) return; if (aPrice[nPeriod-1] == null) return; // array not complete var nSD = Stdev(nPeriod); var nSDC = (nSD/vMA); return (nSDC*vADX); } // Support Functions function Stdev(nLength) { var sumX = 0; var sumX2 = 0; for (i = 0; i < nLength; ++i) { sumX += aPrice[i]; sumX2 += (aPrice[i] * aPrice[i]); } var meanX = (sumX/nLength); var stdev = Math.sqrt((sumX2/nLength) - (meanX*meanX)); return stdev; }
NormalizedStdev.efs
/***************************************************************** Provided By : eSignal (c) Copyright 2004 Description: Normalized Standard Deviation - Markos Katsanos Version 1.0 Notes: Formula Parameters: Defaults: Length 30 Color aqua Thickness 2 *****************************************************************/ function preMain() { setStudyTitle("Normalized Standard Deviation "); setCursorLabelName("N-Stdev",0); // Formula Parameters var fp1 = new FunctionParameter("Length", FunctionParameter.NUMBER); fp1.setName("Period"); fp1.setLowerLimit(1); fp1.setDefault(30); // Study Parameters var sp1 = new FunctionParameter("cColor", FunctionParameter.COLOR); sp1.setName("Color"); sp1.setDefault(Color.aqua); var sp2 = new FunctionParameter("nThick", FunctionParameter.NUMBER); sp2.setName("Thickness"); sp2.setDefault(2); } var bEdit = true; var aValue = null; var vStudy = null; function main(Length, cColor, nThick) { if (bEdit == true) { setDefaultBarFgColor(cColor, 0); setDefaultBarThickness(nThick, 0); bEdit = false; } if (aValue == null) aValue = new Array(Length); if (vStudy == null) vStudy = new MAStudy(Length, 0, "Close", MAStudy.SIMPLE); var nMA = vStudy.getValue(MAStudy.MA); if (nMA == null) return; var nState = getBarState(); var nSum = 0; var ySum = 0; var Basis = 0; var vStdDev = 0; if (nState == BARSTATE_NEWBAR) { aValue.pop(); aValue.unshift(close(0)); } aValue[0] = close(0); if (aValue[Length-1] == null) return; for(i = 0; i < Length; i++){ nSum += (aValue[i]); } Basis=nSum/Length; for(i = 0; i < Length; i++){ ySum += (aValue[i]-Basis)*(aValue[i]-Basis); } vStdDev=Math.sqrt(ySum/(Length)); return (vStdDev/nMA); }
StochOf_NormStdev.efs
/***************************************************************** Provided By : eSignal. (c) Copyright 2004 Description: Stochastic of Normalized Standard Deviation - Markos Katsanos Version 1.0 Notes: Formula Parameters: Defaults: Normalized Stdev Period 30 Stoch \%K Length 150 Stoch \%K Smoothing 1 Stoch \%D Length 10 Upper Band 80 Lower Band 20 Band's Color black Display Bands True - [True, False] %K Color red %K Thickness 2 %D Color blue %D Thickness 1 %D Display Off - [On, Off] *****************************************************************/ function preMain() { setStudyTitle("Stochastic of Normalized Stdev"); setCursorLabelName("Stoch of SD \%K", 0); setCursorLabelName("Stoch of SD \%D", 1); setDefaultBarFgColor(Color.navy, 0); setDefaultBarFgColor(Color.aqua, 1); setStudyMax(120); setStudyMin(-5); // Primary Study Parameters var fp1 = new FunctionParameter("Length", FunctionParameter.NUMBER); fp1.setName("Normalized Stdev Period"); fp1.setLowerLimit(1); fp1.setDefault(30); // Stoch Parameters var fp2 = new FunctionParameter("nKlength2", FunctionParameter.NUMBER); fp2.setName("Stoch \%K Length"); fp2.setLowerLimit(1); fp2.setDefault(150); var fp3 = new FunctionParameter("nKsmooth2", FunctionParameter.NUMBER); fp3.setName("Stoch \%K Smoothing"); fp3.setLowerLimit(1); fp3.setDefault(1); var fp4 = new FunctionParameter("nDlength2", FunctionParameter.NUMBER); fp4.setName("Stoch \%D Length"); fp4.setLowerLimit(1); fp4.setDefault(10); // Study Parameters var sp1 = new FunctionParameter("nBand1", FunctionParameter.NUMBER); sp1.setName("Upper Band"); sp1.setDefault(80); var sp2 = new FunctionParameter("nBand2", FunctionParameter.NUMBER); sp2.setName("Lower Band"); sp2.setDefault(20); var sp3 = new FunctionParameter("cBands", FunctionParameter.COLOR); sp3.setName("Band's Color"); sp3.setDefault(Color.black); var sp4 = new FunctionParameter("bBands", FunctionParameter.STRING); sp4.setName("Display Bands"); sp4.addOption("On"); sp4.addOption("Off"); sp4.setDefault("On"); var sp5 = new FunctionParameter("cK", FunctionParameter.COLOR); sp5.setName("\%K Color"); sp5.setDefault(Color.red); var sp6 = new FunctionParameter("nThickK", FunctionParameter.NUMBER); sp6.setName("\%K Thickness"); sp6.setDefault(2); var sp7 = new FunctionParameter("cD", FunctionParameter.COLOR); sp7.setName("\%D Color"); sp7.setDefault(Color.blue); var sp8 = new FunctionParameter("nThickD", FunctionParameter.NUMBER); sp8.setName("\%D Thickness"); sp8.setDefault(1); var sp9 = new FunctionParameter("bD", FunctionParameter.STRING); sp9.setName("\%D Display"); sp9.addOption("On"); sp9.addOption("Off"); sp9.setDefault("Off"); } // Primary Study: Normalized Stdev var aNormStdev = null; var aValue = null; var vStudy = null; // Stoch of Primary Study var bEdit = true; var study = null; var vK2 = null; var vD2 = null; var aStochK2 = null; function main(Length, nKlength2, nKsmooth2, nDlength2, nBand1, nBand2, cBands, bBands, cK, nThickK, cD, nThickD, bD) { var nState = getBarState(); if (bEdit == true) { if (bBands == "On") { addBand(nBand1, PS_SOLID, 1, cBands, "Upper"); addBand(nBand2, PS_SOLID, 1, cBands, "Lower"); } else if (bBands == "Off") { removeBand("Upper"); removeBand("Lower"); } setDefaultBarFgColor(cK, 0); setDefaultBarFgColor(cD, 1); setDefaultBarThickness(nThickK, 0); setDefaultBarThickness(nThickD, 1); if (aStochK2 == null) aStochK2 = new Array(Math.round(nDlength2)); bEdit = false; } if (nState == BARSTATE_NEWBAR) { if (vK2 != null) { aStochK2.pop(); aStochK2.unshift(vK2); } } //primary study code: Stoch of Normalized Stdev if (aNormStdev == null) aNormStdev = new Array(nKlength2); if (aValue == null) aValue = new Array(Length); if (vStudy == null) vStudy = new MAStudy(Length, 0, "Close", MAStudy.SIMPLE); var nMA = vStudy.getValue(MAStudy.MA); if (nMA == null) return; var nSum = 0; var ySum = 0; var Basis = 0; var vStdDev = 0; if (nState == BARSTATE_NEWBAR) { aValue.pop(); aValue.unshift(close(0)); aNormStdev.pop(); aNormStdev.unshift(0); } aValue[0] = close(0); if (aValue[Length-1] == null) return; for(i = 0; i < Length; i++){ nSum += (aValue[i]); } Basis=nSum/Length; for(i = 0; i < Length; i++){ ySum += (aValue[i]-Basis)*(aValue[i]-Basis); } vStdDev = (Math.sqrt(ySum/(Length)))/nMA; aNormStdev[0] = vStdDev; // end of primary study code // Stoch of Normalized Stdev vK2 = StochK2(Math.round(nKlength2), Math.round(nKsmooth2)); if (vK2 == null) return; aStochK2[0] = vK2; if (aStochK2[Math.round(nDlength2) - 1] == null) return; vD2 = StochD2(Math.round(nDlength2)); if (vD2 == null) return; if (bD == "On") { return new Array(vK2, vD2); } else { return new Array(vK2, vD2.toFixed(4)); } } /*********************/ /***** Functions *****/ /*********************/ function StochHH(nInputOffset, nInputLength) { var nOffset = nInputOffset; var nLength = nInputLength; var hh = 0; var i = 0; for(i = 0; i < nLength; i++) { if(i == 0) { hh = aNormStdev[i+nOffset]; } else { hh = Math.max(hh, aNormStdev[i+nOffset]); } } return hh; } function StochLL(nInputOffset, nInputLength) { var nOffset = nInputOffset; var nLength = nInputLength; var ll = 0; var i = 0; for(i = 0; i < nLength; i++) { if(i == 0) { ll = aNormStdev[i+nOffset]; } else { ll = Math.min(ll, aNormStdev[i+nOffset]); } } return ll; } function StochK2(inputLength, inputSmoothing) { var percentK; var StochK; var ll, hh; var sum = 0; var i = 0; var nOffset = 0; var nDO; var nLength = inputLength; var nSmoothing = inputSmoothing; for(i = 0; i < nSmoothing; i++) { nDO = i + nOffset; StochK = aNormStdev[nDO]; ll = StochLL(nDO, nLength); if(ll == null) return null; hh = StochHH(nDO, nLength); if(hh == null) return null; percentK = ((StochK - ll) / (hh - ll)) * 100; sum += percentK; } sum /= nSmoothing; return sum; } function StochD2(nInputLength) { var sum = 0; var i = 0; for (i = 0; i < nInputLength; ++i) { sum += aStochK2[i]; } sum /= nInputLength; return sum; }
VolatilityModifiedFVE2.efs
/******************************************************************* Description : This Indicator plots the Volatility modified FVE formula Provided By : TS Support, LLC for eSignal Version 2.0 Notes: * Original formula code has been modified by eSignal for real time calculations and additional parameters. 11/8/2004 Formula Parameters: Defaults: Periods for FVE 14 EMA Periods for FVE 40 Coef for Cutoff 0.1 FVE Color green FVE Thickness 2 FVE EMA Color blue FVE EMA Thickness 1 EMA Display Off - [On, Off] ********************************************************************/ function preMain(){ setStudyTitle("Volatility Finite Volume Elements2"); setCursorLabelName("FVE",0); setDefaultBarFgColor(Color.green,0); setCursorLabelName("FVE EMA",1); setDefaultBarFgColor(Color.blue,1); setDefaultBarThickness(2); addBand(0, PS_SOLID, 2, Color.black); setShowTitleParameters(false); // Formula Parameters var fp1 = new FunctionParameter("Samples", FunctionParameter.NUMBER); fp1.setName("Periods for FVE"); fp1.setLowerLimit(5); fp1.setDefault(14); var fp2 = new FunctionParameter("Perma", FunctionParameter.NUMBER); fp2.setName("EMA Periods for FVE"); fp2.setLowerLimit(1); fp2.setDefault(40); var fp3 = new FunctionParameter("Coef", FunctionParameter.NUMBER); fp3.setName("Coef for Cutoff"); fp3.setLowerLimit(0); fp3.setDefault(.1); // Study Parameters var sp1 = new FunctionParameter("cFVE", FunctionParameter.COLOR); sp1.setName("FVE Color"); sp1.setDefault(Color.green); var sp2 = new FunctionParameter("nThickFVE", FunctionParameter.NUMBER); sp2.setName("FVE Thickness"); sp2.setDefault(2); var sp3 = new FunctionParameter("cEMA", FunctionParameter.COLOR); sp3.setName("FVE EMA Color"); sp3.setDefault(Color.blue); var sp4 = new FunctionParameter("nThickEMA", FunctionParameter.NUMBER); sp4.setName("FVE EMA Thickness"); sp4.setDefault(1); var sp5 = new FunctionParameter("bEMA", FunctionParameter.STRING); sp5.setName("EMA Display"); sp5.addOption("On"); sp5.addOption("Off"); sp5.setDefault("Off"); } var bEdit = true; var EMA_1 = 0; var EMA = 0; var VolumePlusMinusArray = null; var IntraArray = null; var InterArray = null; var TP = 0; var TP1 = 0; function main(Samples, Perma, Coef, cFVE, nThickFVE, cEMA, nThickEMA, bEMA) { if (bEdit == true) { setDefaultBarFgColor(cFVE, 0); setDefaultBarFgColor(cEMA, 1); setDefaultBarThickness(nThickFVE, 0); setDefaultBarThickness(nThickEMA, 1); bEdit = false; } var VolumePlusMinus = 0, FVE = 0, Fvesum = 0, VolSum = 0, FveFactor = 0, Intra = 0, Inter = 0, Vintra = 0, Vinter = 0, CutOff = 0, i = 0, K = 2 / (Perma + 1); var nState = getBarState(); if (IntraArray == null) IntraArray = new Array(Samples); if (InterArray == null) InterArray = new Array(Samples); if (VolumePlusMinusArray == null) VolumePlusMinusArray = new Array(Samples); if (nState == BARSTATE_NEWBAR) { IntraArray.pop(); IntraArray.unshift(0); InterArray.pop(); InterArray.unshift(0); VolumePlusMinusArray.pop(); VolumePlusMinusArray.unshift(0); TP1 = TP; } IntraArray[0] = Math.log(high(0)) - Math.log(low(0)); InterArray[0] = Math.log((high(0) + low(0) + close(0))/3) - Math.log((high(-1)+ low(-1) + close(-1))/3); TP = (high(0) + low(0) + close(0))/3; if (IntraArray[Samples -1] == null) return; if (InterArray[Samples -1] == null) return; Intra = Math.log(high(0)) - Math.log(low(0)); Vintra = StandardDev(IntraArray, Samples); Inter = Math.log(TP) - Math.log(TP1); Vinter = StandardDev(InterArray, Samples); CutOff = Coef * (Vintra + Vinter) * close(0); MF = close(0) - ((high(0) + low(0))/2) + TP - TP1; if(MF > CutOff) FveFactor = 1; else if(MF < -1 * CutOff) FveFactor = -1; else FveFactor=0; VolumePlusMinus = volume(0) * FveFactor; VolumePlusMinusArray[0] = VolumePlusMinus; if (VolumePlusMinusArray[Samples-1] == null) return; for(i = 0; i < Samples; i++){ Fvesum += VolumePlusMinusArray[i]; VolSum += volume(-i); } if(VolumePlusMinusArray[Samples - 1] != null){ FVE = (Fvesum / (VolSum/Samples)) / Samples * 100; if (nState == BARSTATE_NEWBAR) EMA_1 = EMA; EMA = K * FVE + (1 - K) * EMA_1; if (bEMA == "On") { return new Array(FVE,EMA); } else { return new Array(FVE,EMA.toFixed(4)); } } return null; } function StandardDev(Array,Length){ var i; var vSum = 0; var SumSqr = 0; var StdDev = 0; for(i = 0; i < Length; i++) vSum += Array[i]; if(Length != 0) for(i = 0; i < Length; i++) SumSqr += (Array[i] - vSum / Length) * (Array[i] - vSum / Length); StdDev = Math.sqrt(SumSqr / Length); return StdDev; }