Hi Harish
Apologies if this message shows up twice. My original reply seems to
have disappeared.
I don't have all Daily/Weekly/Multi-Frame formulas
or intraday data with me right now but I think you'll find that the problem lies
with the revised definition of "N" immediately after the {Calculate and plot
Daily MACD} header. comment out or delete the "N:=2/(N+1)" definition. This
definition converts N periods to a ratio for the signal EMA and is not needed
for the SMA calculation. The original N number IS required, and commenting
out the redefinition allows the N variable to remain unchanged. I've tried my
suggestion on EOD data and it appears to do as you require. I can't check it on
intraday data right now.
I'm including Weekly and Multi-Frame MACD formulas
with an SMA signal line. These formulas require the use of the Forum DLL, and
the variable-length Sum function from this DLL is used to generate a more
accurate SMA.
Regards
Roy
{Multi-Frame D MACD E} {This
indicator uses Equis Forum DLL} {Roy Larsen, 2008}
{User settings} N:=Input("Multi-Frame D
MACD, Signal Periods",1,19,9); F:=Input("Timeframe, 0=W 1=M
2=Q 3=6M
4=Y",0,4,0); F:=If(F=1,1,If(F=2,3,If(F=3,6,If(F=4,12,0)))); Q:=Input("Mode,
0=Static 1=Dynamic 2=Delayed",0,2,1); {0, update at last bar of current
frame} {1, update on each new bar} {2, update on first bar of
new frame}
{Timing signals} {Day counter courtesy metastock@xxxxxxxxxxxxx} M:=Month();A:=Int((14-M)/12);D:=DayOfMonth(); Y:=Year();X:=Y+4800-A;B:=M+(12*A)-3;Z:=Cum(1); M:=If(F=0,D+Int((2+153*B)/5)+(365*X)+Int(X/4)- Int(X/100)+Int(X/400)-32045,{day
counter} (Y-ValueWhen(1,Z=1,Y))*12+M){month
counter}; I:=If(F=0,Int(M/7),Int((M-1)/Max(1,F))); I:=I<>ValueWhen(2,1,I); G:=LastValue(Lowest(Sum(I>0,5))=5); I:=ExtFml("Forum.Sum",I,1);M:=G
OR I; F:=G OR
(M=0)*ExtFml("Forum.Sum",Ref(I,1),1); A:=LastValue(Z-1)=Z;B:=LastValue(Z)=Z; J:=If(F,1,(Alert(F,2)=0)*M*2*(Z>1)); J:=If(A+LastValue(J)>2
OR B+(Q=1)=2,1,J); J:=If(G,1,If(Q=2,M*2,J));
{Frame
CLOSE} K:=ValueWhen(1,J,If(J=1,C,ValueWhen(2-G,1,C)));
{Calculate/plot MACD and signal} X:=0.15;
Y:=0.075;
J:=J>0; X:=If(Cum(J)=1,K,PREV*If(J,1-X,1)+J*K*X); Y:=If(Cum(J)=1,K,PREV*If(J,1-Y,1)+J*K*Y); R:=X-Y;
A:=Cum(J); M:=ExtFml("Forum.Sum",J*R,Z-ValueWhen(N+1,J,Z)); Z:=ValueWhen(1,A>N,ValueWhen(1,J,M)/N); R;
{Weekly MACD} Z; {SMA signal line}
{Weekly MACD S} {This indicator
uses the Equis Forum DLL} {Roy Larsen, 2004-2007}
{User settings} N:=Input("Weekly MACD
Signal Periods",1,19,9); Q:=Input("Mode, 0=Static 1=Dynamic
2=Delayed",0,2,0); {0, update on last bar of current
frame} {1, update on each new bar} {2, update on first bar of
new frame}
{Weekly frame timing} {* Day counter from
metastock@xxxxxxxxxxxxx} M:=Month();A:=Int((14-M)/12);D:=DayOfMonth(); Y:=Year()+4800-A;B:=M+(12*A)-3; M:=D+Int((2+153*B)/5)+(365*Y)+Int(Y/4)-Int(Y/100)+Int(Y/400)-32045; {*}I:=Int(M/7); I:=I-ValueWhen(2,1,I); G:=LastValue(Lowest(Sum(I>0,5))=5); M:=G+I;F:=G+(M=0)*ExtFml("Forum.Sum",Ref(I,1),1); A:=LastValue(Cum(1)-1)=Cum(1); B:=Alert(A,2)*(A=0); J:=If(F,1,If(Alert(F,2)=0
AND M,2,0)); J:=If(A+LastValue(J)>2 OR B+(Q=1)=2,1,J); J:=If(G,1,If(Q=2
OR Cum(J)<=1,M*2,J));
{Weekly
CLOSE} K:=ValueWhen(1,J,If(J=1,C,ValueWhen(2-G,1,C)));
{Calculate and plot weekly MACD and signal
line} X:=0.15; Y:=0.075; J:=J>0;
A:=Cum(J); X:=If(Cum(J)=1,K,PREV*If(J,1-X,1)+J*K*X); Y:=If(Cum(J)=1,K,PREV*If(J,1-Y,1)+J*K*Y); R:=X-Y;
Z:=Cum(1); M:=ExtFml("Forum.Sum",J*R,Z-ValueWhen(N+1,J,Z)); Z:=ValueWhen(1,A>N,ValueWhen(1,J,M)/N); R;
{Weekly MACD} Z; {SMA signal line}
__._,_.___
__,_._,___
|