MarcoValente

Cycle Dynamic Composite Average

376
This MA uses the formula of simple cycle indicator to find 2 cycles periods length's .
The CDCA is the result of 8 different ma to control and filter the price. The regression line is the signal , don t need to look candles, but just the cross between MA and reg lin.
Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.

Want to use this script on a chart?
//@version=2
//by Marco
//This MA use the formula of simple cycle indicator to find 2 cycle' s length. Take half cycle as Ma lenght, and ER to control volability;
// There are 8 different ma to control and filter the price. The regression line is the signal , don t need to look candles, but just the cross 
//between MA and reg lin. 
study(title="Cycle Dynamic Composite Average",shorttitle="CDCA", overlay=true)
length =10
src=close
a=input(.08,step=0.001, title="short cycle :Alpha1")
aa=input(0.03,step=0.001,title="long cycles: Alpha2")
s = (src + 2*src[1] + 2*src[2] + src[3])/6.0
c = n<7?(src - 2*src[1] + src[2])/4.0:((1 - 0.5*a)*(1 - 0.5*a)*(s - 2*s[1] + s[2]) + 2*(1-a)*c[1] - (1 - a)*(1-a)*c[2])
c2 = n<7?(src - 2*src[1] + src[2])/4.0:((1 - 0.5*aa)*(1 - 0.5*aa)*(s - 2*s[1] + s[2]) + 2*(1-aa)*c2[1] - (1 - aa)*(1-aa)*c2[2])
q1 = (.0962*c + 0.5769*c[2] - 0.5769*c[4] - .0962*c[6])*(0.5+.08*nz(ip[1]))
q2 = (.0962*c2 + 0.5769*c2[2] - 0.5769*c2[4] - .0962*c2[6])*(0.5+.08*nz(ip2[1]))
I1 = c[3]
I2 = c2[3]
dp_ = iff(q1 != 0 and q1[1] != 0, (I1/q1 - I1[1]/q1[1]) / (1 + I1*I1[1]/(q1*q1[1])),0)
dp_2 = iff(q2 != 0 and q2[1] != 0, (I2/q2 - I2[1]/q2[1]) / (1 + I2*I2[1]/(q2*q2[1])),0)
dp = iff(dp_ < 0.1, 0.1, iff(dp_ > 1.1, 1.1, dp_))
dp2 = iff(dp_2 < 0.1, 0.1, iff(dp_2 > 1.1, 1.1, dp_2))
med(x,y,z) => (x+y+z) - min(x,min(y,z)) - max(x,max(y,z))
md = med(dp,dp[1], med(dp[2], dp[3], dp[4]))
md2 = med(dp2,dp2[1], med(dp2[2], dp2[3], dp2[4]))
dc = iff(md == 0, 15, 6.28318 / md + 0.5)
dc2 = iff(md2 == 0, 15, 6.28318 / md2 + 0.5)
ip = .33*dc + .67*nz(ip[1])
ip2 = .33*dc2 + .67*nz(ip2[1])
p = .15*ip + .85*nz(p[1])
p2 = .15*ip2 + .85*nz(p2[1])
//
a1 = 2.0/(p + 1)
a2=2.0/(p/2+ 1)
b1=5/p2
b2=5/p2/2
//
mul=input(.7,step=0.1,title="Power Alpha")
diff=abs(close[0]-close[1])
signal=abs(close-close[length])
noise=sum(diff, length)
ER=noise!=0 ? signal/noise : 1
SC=pow((ER*(a1-a2)+a2),mul)
SC1=pow((ER*(b1-b2)+b2),mul)
q=a2
out=nz(out[1],src)+SC*(src-nz(out[1],src))
outz=nz(outz[1],src)+SC1*(src-nz(outz[1],src))
nl=q*out+(1-q)*nz(nl[1])
//
mg = na(mg[1]) ? ema(src, length) : mg[1] + (src - mg[1]) / (p* pow(src/mg[1], 4))
mg2 = na(mg2[1]) ? ema(src, length) : mg2[1] + (src - mg2[1]) / (p/2* pow(src/mg2[1], 4))
mg3 = na(mg3[1]) ? ema(src, length) : mg3[1] + (src - mg3[1]) / (p2* pow(src/mg3[1], 4))
mg4 = na(mg4[1]) ? ema(src, 1) : mg4[1] + (src - mg4[1]) / (p2/2* pow(src/mg4[1], 4))
//
price =close
len = 14
FC =p/2 
SCa =p 
ss=2*p
len1 = len/2
w = log(2/(ss+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SCa-FC)*(oldN-1))/(SCa-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SCa+1)?2/(SCa+1):(alpha_>1?1:alpha_)
outt = (1-alpha)*nz(outt[1]) + alpha*price
//Super Dynamic Composite Avarege (SDCA)
sdca=sqrt((pow(mg,2)+pow(mg3,2)+pow(out,2)+pow(nl,2)+pow(outt,2)+pow(outz,2)+pow(mg2,2)+pow(mg4,2))/8)
plot(sdca,color=lime,linewidth=2,title="SDCA")
pr=input(15,title="Regr Lin Len")
ofs=input(5,title="Regr Lin Offset")
lrl=linreg(sdca,pr,ofs)
plot(lrl,color=red)
///bgcolor(sdca>lrl?green:red,transp=65)