File Name: Autocorrelation_Periodogram.efs
Description:
Measuring Market Cycles by John F. Ehlers
Formula Parameters:
Autocorrelation_Periodogram.efs
Enhance Resolution: false
Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.
Download File:
Autocorrelation_Periodogram.efs
Autocorrelation_Periodogram.efs
EFS Code:
Description:
Measuring Market Cycles by John F. Ehlers
Formula Parameters:
Autocorrelation_Periodogram.efs
Enhance Resolution: false
Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.
Download File:
Autocorrelation_Periodogram.efs
Autocorrelation_Periodogram.efs
EFS Code:
PHP Code:
/*********************************
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:
Measuring Market Cycles by John F. Ehlers
Version: 1.00 07/12/2016
Formula Parameters: Default:
Enhance Resolution false
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);
setShowCursorLabel(false);
for (var i = 0; i < 41; i++)
setDefaultBarThickness(4,i);
var x = 0;
fpArray[x] = new FunctionParameter("EnhanceRes", FunctionParameter.BOOLEAN)
with(fpArray[x++]){
setName("Enhance Resolution");
setDefault(false);
}
}
var bInit = false;
var bVersion = null;
var nAvgLength = 3;
var HP = 0;
var HP_1 = 0;
var a1 = 0;
var b1 = 0;
var c1 = 0;
var c2 = 0;
var c3 = 0;
var Period = null;
var DominantCycle = null;
var DominantCycle_1 = 0;
var ColorR = 0;
var ColorG = 0;
var ColorB = 0;
var xClose = null;
var xRoof = null;
var R = new Array(41);
var Pwr = new Array(41);
var retVal = new Array(41);
var Corr = new Array(48);
function main(EnhanceRes){
if (bVersion == null) bVersion = verify();
if (bVersion == false) return;
if (getCurrentBarCount() <= 48) return;
if (getBarState() == BARSTATE_ALLBARS){
bInit = false;
}
if(!bInit){
_vars_Reset();
_init_Array();
xClose = close();
xRoof = efsInternal("Calc_Roof", xClose);
bInit = true;
}
Calc_Spectrum(xRoof, Corr);
var MaxPwr = 0.0001;
for (Period = 1; Period <= 41; Period++){
if (R[Period] > MaxPwr)
MaxPwr = R[Period];
}
for (Period = 1; Period <= 41; Period++){
Pwr[Period] = R[Period] / MaxPwr;
}
if(EnhanceRes){
for (Period = 1; Period <= 41; Period++)
Pwr[Period] = Math.pow(Pwr[Period],3);
}
DominantCycle = 0;
var PeakPwr = 0;
for (Period = 1; Period <= 41; Period++){
if (Pwr[Period] > PeakPwr)
PeakPwr = Pwr[Period];
}
var Spx = 0;
var Sp = 0;
for (Period = 1; Period <= 41; Period++){
if (PeakPwr >= 0.25 && Pwr[Period] >= 0.25){
Spx += Period * Pwr[Period];
Sp += Pwr[Period];
}
}
if (Sp != 0) DominantCycle = Spx / Sp;
if (Sp < 0.25) DominantCycle = DominantCycle_1;
DominantCycle_1 = DominantCycle;
for (Period = 0; Period <= 40; Period++){
if (Pwr[Period] > 0.5){
ColorR = 255;
ColorG = Math.floor(255 * ((2 * Pwr[Period]) - 1));
}
else{
ColorR = Math.floor(2 * 255 * Pwr[Period]);
ColorG = 0;
}
setBarFgColor(Color.RGB(ColorR, ColorG, ColorB), Period);
}
return retVal;
}
var alpha1 = 0;
var bSecondInit = false;
function Calc_Roof(xClose){
if (xClose.getValue(-1) == null) return;
var Filt_1 = ref(-1);
var Filt_2 = ref(-2);
if(Filt_2 == null) Filt_2 = 0;
if(Filt_1 == null) Filt_1 = 0;
if (getBarState() == BARSTATE_NEWBAR){
HP_1 = HP;
}
if (!bSecondInit){
alpha1 = (1 - Math.sin(Math.PI/180*(360/48)))/Math.cos(Math.PI/180*(360/48));
bSecondInit = true;
}
HP = 0.5 * (1 + alpha1) * (xClose.getValue(0) - xClose.getValue(-1)) +
alpha1 * HP_1;
a1 = Math.exp((-Math.SQRT2) * Math.PI / 8);
b1 = 2 * a1 * Math.cos(Math.PI/180*Math.SQRT2 *180/8);
c2 = b1;
c3 = (- a1) * a1;
c1 = 1 - c2 - c3;
var Filt = (c1 * (HP + HP_1) / 2) + c2 * Filt_1 + c3 * Filt_2;
return Filt;
}
function Calc_Spectrum(xRoof,Corr){
var SqSum = new Array(41);
var Sx = 0;
var Sy = 0;
var Sxx = 0;
var Syy = 0;
var Sxy = 0;
var X = 0;
var Y = 0;
var M = 0;
var N = 0;
var temp = 0;
for (var i = 0; i < 41; i++){
SqSum[i] = 0;
}
var Lag = 0;
var count = 0;
for(Lag = 0; Lag <= 48; Lag++){
M = nAvgLength;
if(nAvgLength == 0) M = Lag;
Sx = 0;
Sy = 0;
Sxx = 0;
Syy = 0;
Sxy = 0;
for(count = 0; count < M; count++){
X = xRoof.getValue(-count);
Y = xRoof.getValue(-(Lag+count));
Sx += X;
Sy += Y;
Sxx += X * X;
Sxy += X * Y ;
Syy += Y * Y;
}
temp =(M * Sxx - Sx * Sx) * (M * Syy - Sy * Sy);
if (temp > 0.0001)
Corr[Lag] = (M * Sxy - Sx * Sy)/(Math.sqrt(temp));
}
var CosinePart = 0;
var SinePart = 0;
for (Period = 8; Period <= 48; Period++){
CosinePart = 0;
SinePart = 0;
for (N = 3; N <= 48; N++){
CosinePart += Corr[N] * Math.cos(Math.PI/180*(360 * N / Period));
SinePart += Corr[N] * Math.sin(Math.PI/180*(360 * N / Period));
}
SqSum[Period-8] = (CosinePart * CosinePart) +
(SinePart * SinePart);
}
AMA(SqSum);
}
function AMA(SqSum){
for (Period = 0; Period <= 40; Period++){
R[Period] = 0.2 * SqSum[Period] * SqSum[Period] + 0.8 * R[Period];
}
}
function _init_Array(){
var i = 0;
for (i = 0; i < 41; i++){
Pwr[i] = 0;
R[i] = 0;
}
for (i = 0; i < 49; i++)
Corr[i] = 0;
for (i = 0; i<41; i++)
retVal[i] = i + 8;
}
function _vars_Reset(){
alpha1 = 0;
HP = 0;
HP_1 = 0;
a1 = 0;
b1 = 0;
c1 = 0;
c2 = 0;
c3 = 0;
Period = null;
DominantCycle = null;
DominantCycle_1 = 0;
ColorR = 0;
ColorG = 0;
ColorB = 0;
xClose = null;
xRoof = null;
R = new Array(41);
Pwr = new Array(41);
retVal = new Array(41);
Corr = new Array(48);
}
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;
}