File Name: FractalDimension.efs
Description:
Fractal Dimension Indicator
Formula Parameters:
N (must be an even number) : 30
Price Source : hl2
Band 1 : 1.6
Band 2 : 1.4
Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.
Download File:
FractalDimension.efs
EFS Code:
Description:
Fractal Dimension Indicator
Formula Parameters:
N (must be an even number) : 30
Price Source : hl2
Band 1 : 1.6
Band 2 : 1.4
Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.
Download File:
FractalDimension.efs
EFS Code:
PHP Code:
/*********************************
Provided By:
eSignal (Copyright c eSignal), a division of Interactive Data
Corporation. 2010. 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:
Fractal Dimension Indicator
Version: 1.00 04/07/2010
Formula Parameters: Default:
N (must be an even number) 30
Price Source hl2
Band 1 1.6
Band 2 1.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();
var bInit = false;
var bVersion = null;
function preMain() {
setPriceStudy(false);
setShowCursorLabel(true);
setShowTitleParameters(false);
setStudyTitle("Fractal Dimension");
setCursorLabelName("Fractal Dimension", 0);
setDefaultBarFgColor(Color.red, 0);
setPlotType(PLOTTYPE_LINE, 0);
setDefaultBarThickness(2, 0);
var x=0;
fpArray[x] = new FunctionParameter("N", FunctionParameter.NUMBER);
with(fpArray[x++]){
setName("N (must be an even number)");
setLowerLimit(1);
setDefault(30);
}
fpArray[x] = new FunctionParameter("Band1", FunctionParameter.NUMBER);
with(fpArray[x++]){
setName("Band 1");
setDefault(1.6);
}
fpArray[x] = new FunctionParameter("Band2", FunctionParameter.NUMBER);
with(fpArray[x++]){
setName("Band 2");
setDefault(1.4);
}
fpArray[x] = new FunctionParameter("PriceSource", FunctionParameter.STRING);
with(fpArray[x++]){
setName("Price Source");
addOption("open");
addOption("high");
addOption("low");
addOption("close");
addOption("hl2");
addOption("hlc3");
addOption("ohlc4");
setDefault("hl2");
}
}
var xFractalDimension = null;
function main(PriceSource, N, Band1 ,Band2) {
var nBarState = getBarState();
var nFractalDimension = 0;
if (bVersion == null) bVersion = verify();
if (bVersion == false) return;
if (nBarState == BARSTATE_ALLBARS) {
if (N == null) N = 30;
if (PriceSource == null) PriceSource = "hl2";
}
if (!bInit) {
xFractalDimension = efsInternal("CalcFractalDimension", PriceSource, N);
addBand(Band1, PS_SOLID, 1, Color.blue, "1.6");
addBand(Band2, PS_SOLID, 1, Color.blue, "1.4");
bInit = true;
}
nFractalDimension = xFractalDimension.getValue(0);
if (nFractalDimension == null) return;
return nFractalDimension;
}
var bSecondInit = false;
var xSmooth = null;
var xSmoothH = null;
var xSmoothL = null;
var xHH_N2 = null;
var xLL_N2 = null;
var aRatio = new Array(20);
function CalcFractalDimension(PriceSource, N) {
var nBarState = getBarState();
var N1 = 0;
var N2 = 0;
var N3 = 0;
var SmoothH = 0;
var SmoothL = 0;
var HH_N2 = 0;
var LL_N2 = 0;
var nRef = ref(-1);
var nAverage = 0;
var i = 0;
if (!bSecondInit) {
xSmooth = efsInternal("CalcSmooth", PriceSource);
xSmoothH = upperDonchian(N, xSmooth);
xSmoothL = lowerDonchian(N, xSmooth);
xHH_N2 = upperDonchian(N / 2 - 1, xSmooth);
xLL_N2 = lowerDonchian(N / 2 - 1, xSmooth);
for (i = 20; i >= 0; i--) {
aRatio[i] = 0;
}
bSecondInit = true;
}
if (xHH_N2.getValue(-20) == null) return;
SmoothH = xSmoothH.getValue(0);
SmoothL = xSmoothL.getValue(0);
N3 = (SmoothH - SmoothL) / N;
HH_N2 = xHH_N2.getValue(0);
LL_N2 = xLL_N2.getValue(0);
N1 = (HH_N2 - LL_N2) / (N / 2);
HH_N2 = xHH_N2.getValue(-(N / 2));
LL_N2 = xLL_N2.getValue(-(N / 2));
N2 = (HH_N2 - LL_N2)/(N / 2);
if (nBarState == BARSTATE_NEWBAR) {
for (i = 20; i > 0; i--) {
aRatio[i] = aRatio[i - 1];
}
}
if (N1 > 0 && N2 > 0 && N3 > 0) {
aRatio[0] = 0.5 * ((Math.log(N1 + N2) - Math.log(N3)) / Math.log(2) + nRef);
}
for (i = 0; i < 20; i++) {
nAverage = nAverage + aRatio[i];
}
nAverage = nAverage / 20;
return nAverage;
}
var bCalcSmoothInit = null;
var xPriceSource = null;
function CalcSmooth(PriceSource) {
var nRes = 0;
if (!bCalcSmoothInit) {
xPriceSource = eval(PriceSource)();
bCalcSmoothInit = true;
}
if (xPriceSource.getValue(-3) == null) return;
nRes = (xPriceSource.getValue(0) + 2 * xPriceSource.getValue(-1) +
2 * xPriceSource.getValue(-2) + xPriceSource.getValue(-3)) / 6;
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;
}