Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
John F. Ehlers Autocorrelation Periodogram for Amibroker (AFL)
Good Day! I translated indicator “Autocorrelation Periodogram” from book “Cycle Analytics for Traders”. Who needs the other indicators from this book on AFL I can do without problems. Best Regards, Ilya
Screenshots
Indicator / Formula
/* Autocorrelation Periodogram 2013 John F. Ehlers */ SetBarsRequired(sbrAll); LPeriod = Param("Low-pass Period", 10, 3, 20); HPeriod = Param("High-pass Period", 48, 22, 80); IsPlotHeatMap = ParamToggle("Show HeatMap?", "No|Yes", 1); IsPlotDominantCycle = ParamToggle("Show Dom. Cycle?", "No|Yes"); pi=3.1415926; function RoofingFilter(lpPeriod, hpPeriod) { alpha1 = (cos(0.707*2*pi / hpPeriod) + sin(0.707*2*pi / hpPeriod) - 1) / cos(0.707*2*pi / hpPeriod); a1 = exp(-1.414*pi / lpPeriod); b1 = 2*a1*cos(1.414*pi / lpPeriod); c2 = b1; c3 = -a1*a1; c1 = 1 - c2 - c3; HP = Close; Filt = HP; for(i = 2; i < BarCount; i++) { HP[i] = ((1 - alpha1 / 2)^2)*(Close[i] - 2*Close[i-1] + Close[i-2]) + 2*(1 - alpha1)*HP[i-1] - ((1 - alpha1)^2)*HP[i-2]; Filt[i] = c1*(HP[i] + HP[i-1]) / 2 + c2*Filt[i-1] + c3*Filt[i-2]; } return Filt; } function AGC(lowerCutoff, higherCutoff, acceptableSlope) { factor = 0; accSlope = -acceptableSlope; //acceptableSlope = 1.5 dB halfLC = lowerCutoff / 2; halfHC = higherCutoff / 2; ratio = 10^(accSlope/20); if(halfHC - halfLC > 0) factor = ratio^(1/(halfHC - halfLC)); return factor; } function AutocorrelationPeriodogram(data, isHeatMap, isDomCyc) { avgLength = 3; dominantCycle = 0; //Pearson correlation for each value of lag for(lag = 0; lag <= 48; lag++) { //Set the average length as M M = avgLength; if(avgLength == 0) M = lag; //Initialize correlation sums Sx = 0; Sy = 0; Sxx = 0; Syy = 0; Sxy = 0; //Advance samples of both data streams and sum Pearson components for(count = 0; count <= M-1; count++) { X = Ref(data, -count); Y = Ref(data, -(lag + count)); Sx += X; Sy += Y; Sxx += X^2; Syy += Y^2; Sxy += X*Y; } var1 = (M*Sxx - Sx^2)*(M*Syy - Sy^2); VarSet("corr" + lag, IIf(var1 > 0, (M*Sxy - Sx*Sy)/sqrt(var1), 0)); //Compute correlation for each value of lag //VarSet("corrScale" + lag, IIf(var1 > 0, 0.5*((M*Sxy - Sx*Sy)/sqrt(var1) + 1), 0)); //Scale each correlation to range between 0 and 1 } /*//Plot as a Heatmap (for scale each correlation to range between 0 and 1) for(period = 3; period <= 48; period++) { corr = VarGet("corrScale" + period); Red = IIf(corr > 0.5, 255*(2 - 2*corr), 255); Green = IIf(corr > 0.5, 255, 2*255*corr); PlotOHLC( period-1, period-1, period, period, "", ColorRGB( Red, Green, 0 ), styleCloud | styleNoLabel); }*/ /* The DFT is accomplished by correlating the autocorrelation at each value of lag with the cosine and sine of each period of interest. The sum of the squares of each of these values represents the relative power at each period. */ for(period = 10; period <= 48; period++) { cosinePart = 0; sinePart = 0; for(n = 3; n <= 48; n++) { cosinePart += VarGet("corr" + n)*cos(2*pi*n / period); sinePart += VarGet("corr" + n)*sin(2*pi*n / period); } VarSet("sqSum" + period, cosinePart^2 + sinePart^2); } //EMA is used to smooth the power measurement at each period for(period = 10; period <= 48; period++) VarSet("r" + period, AMA((VarGet("sqSum" + period))^2, 0.2)); //Find Maximum Power Level for Normalization K = AGC(10, 48, 1.5); for(period = 10; period <= 48; period++) { if(period == 10) VarSet("maxPwr", 0); VarSet("maxPwr", IIf(VarGet("r" + period) > VarGet("maxPwr"), K*VarGet("r" + period), VarGet("maxPwr"))); } //Normalization power for(period = 10; period <= 48; period++) VarSet("pwr" + period, VarGet("r" + period)/VarGet("maxPwr")); //Compute the dominant cycle using the CG of the spectrum Spx = 0; Sp = 0; for(period = 10; period <= 48; period++) { Spx += IIf(VarGet("pwr" + period) >= 0.5, period*VarGet("pwr" + period), 0); Sp += IIf(VarGet("pwr" + period) >= 0.5, VarGet("pwr" + period), 0); } dominantCycle = IIf(Sp != 0, Spx / Sp, 0); if(isHeatMap) { //Plot as a Heatmap for(period = 10; period <= 48; period++) { pwr = VarGet("pwr" + period); Red = IIf(pwr > 0.5, 255, 2*255*pwr); Green = IIf(pwr > 0.5, 255*(2*pwr - 1), 0); PlotOHLC( period-1, period-1, period, period, "", ColorRGB( Red, Green, 0 ), styleCloud | styleNoLabel, Null, Null, 0, 0); } } if(isDomCyc) Plot(dominantCycle, "Dominant Cycle", colorBlue, styleThick, Null, Null, 0, 1); return dominantCycle; } filtData = RoofingFilter(LPeriod, HPeriod); AutocorrelationPeriodogram(filtData, IsPlotHeatMap, IsPlotDominantCycle);
24 comments
Leave Comment
Please login here to leave a comment.
Back
Super
dominant cycle = 0; "syntax error???
Dear Ilya,
Thanks for sharing the code, its very good.
Request you please develop & share other indicators mentioned in the book.
Viswanath
The book (Free PDF) is available at https://download.e-bookshelf.de/download/0004/0350/03/L-G-0004035003-0002588758.pdf.
Guys interested can down load from there
davidalan, “dominant cycle = 0; syntax error???” – сan you explain what is wrong? I am here simply declare an array and fills it with zeros.
Ilya, Autocorrelation Reversals code would be much apreciated.
kv_maligi, your free pdf has only 26 pages.
sal157011, Ok!
sal157011,
i too realized after some time going thrpugh it. I am searching for full PDF.
I tried to read those pages, but looked Greek to me.
The code “Autocorrelation Periodogram”, after attaching to a chart, gives trend direction & also strength of the trend clearly. As saying goes “A picture reveals 1000 secretes….”
Its superb coding by llya, It seems he is blessed with lots of skills, I am sure he will develop all useful codes.
viswanath
Friends, “Autocorrelation Reversals” waiting for the approval.
Very nice work. You do need the book to understand what the indicator says.
Do post in the ‘Pastie’ area with “//” comments on the afl posted.
THANK YOU! for your contribution.
Tks a lot, autocorrelation reversals would be as well very appreciated
Unlis ,something else not related
Have a look please at
https://www.tradingview.com/script/ngr0qRmw-CM-Laguerre-PPO-PercentileRank-Mkt-Tops-Bottoms/
interesting indicator that may be translated into afl
val2004, “https://www.tradingview.com/script/ngr0qRmw-CM-Laguerre-PPO-PercentileRank-Mkt-Tops-Bottoms/” – well, I will do.
tks a lot,
how to apply this or use it.
Dear Unlis,
Plz go through this. Sling shot trading system
https://www.tradingview.com/script/
This seems to be fantastic code. Can you plz develop this
Viswanath
error 31 syntax error,unexpected ‘=’,expecting ‘(’ that’s the error message version 5.9 dominate cycle highlighted in blue
http://libgen.org/book/index.php?md5=3bffbaffcc01ab1031add7ef11b303df
Link for downloading full text book- cycle analytics for trader
Many thanks hotaro3
Plz have a look at CM sling slot trading system
https://www.tradingview.com/script/GE7tSQK1-CM-Sling-Shot-System/
http://wisestocktrader.com/indicatorpasties/1511-cm-sling-slot-trading-system
I do not know in which language its written, can any AFL expert guys convert this into AFL?
Hellow Hotor3,
Can also please paste PDF link for “John Ehlers – Rocket Science for Traders”
Thanks
viswanath
Hi Unlis,
Can please have a look at the MSLIDE, below is the code. can you try to convert it to AFL code.Thanks
Hi, someone has the book for Cycle Analytics Traders in pdf? Thanks!
Hello Ilya
On a Daily Chart
I would like to Plot a Weekly “Autocorrelation Periodogram “ in a Pane of its own.
I only need the ( LastValue( dominant Weekly Cycle )
I have tried inserting the lines of code below in the formula
but I get incorrect values for a Weekly Periodogram
I must have lines below in the wrong places
-————————————————————————————-Thank you in advance
Derek