[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [EquisMetaStock Group] Weekly pdi and mdi on daily charts



PureBytes Links

Trading Reference Links


>> Is the Metastock code for the weekly pdi and mdi expressed in terms of
>> daily data "out there" anywhere? -- in a form that a person with a limited
>> grasp of coding might be able to use?
>>
>> TIA,
>> Philip
>
> When I crack the rounding approach that MetaStock uses I'll be able to
> get a better simulation value. Whether that would be as accurate as Wilder intended is 
> questionable.
>

Isn't it funny how something can be so elusive and yet so obvious. I've tried to fix the rounding of 
the Weekly ADX indicator so it matches the value of the MetaStock function. Turns out that all I had 
to do was apply the Round() function to the +DI and -DI components.

Roy Larsen
www.metastocktips.co.nz
Free formulas and MS links

  {Weekly PlusDI MinusDI}
  {2004 Roy Larsen, rlarsen@xxxxxxxxxxxxxx}
  {for use on daily charts with
   Jose Silva's "Calendar Week counter"}
N:=Input("Weekly ADX Periods",1,99,14); X:=1/N;
F:=Input("End of Week,  5=Friday  6=Saturday  7=Sunday",5,7,5);
Q:=Input("Display Mode,  0=Static  1=Dynamic  2=Test",0,2,1);
  {0=Display, update on Friday when possible}
  {1=Display, update on each new bar}
  {2=Backtest, update on first bar of new week}
G:=LastValue(Highest(Sum(DayOfWeek()=F,5))=5);
I:=Fml("Calendar Week counter");
I:=Abs(I-ValueWhen(2-G,1,I)); M:=G OR I>0;
F:=G OR (DayOfWeek()=F AND I=0);
A:=LastValue(Cum(1)-1)=Cum(1);
B:=ValueWhen(2,1,A);
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));
Ho:=HighestSince(1,M,H);
Ho:=ValueWhen(1,J,If(J=1,Ho,ValueWhen(2-G,1,Ho)));
Lo:=LowestSince(1,M,L);
Lo:=ValueWhen(1,J,If(J=1,Lo,ValueWhen(2-G,1,Lo)));
Ci:=ValueWhen(1,J,If(J=1,C,ValueWhen(2-G,1,C)));
Ho:=ValueWhen(1,Ho>0,Ho); Hi:=ValueWhen(2,J,Ho);
Lo:=ValueWhen(1,Lo>0,Lo); Li:=ValueWhen(2,J,Lo);
Ci:=ValueWhen(1,Ci>0,Ci); Ci:=ValueWhen(2,J,Ci);
Pdm:=If(Ho>Hi AND Lo>=Li,Ho-Hi,If(Ho>Hi AND
  Lo<Li AND (Ho-Hi)>(Li-Lo),Ho-Hi,0));
Mdm:=If(Lo<Li AND Ho<=Hi,Li-Lo,If(Ho>Hi AND
  Lo<Li AND (Ho-Hi)<(Li-Lo),Li-Lo,0));
R:=Max(Max(Abs(Ci-Lo),Abs(Ci-Ho)),Ho-Lo);
A:=If(Cum(J>0)<N+1,Cum((J>0)*R)/N, ValueWhen(1,J,PREV)*(1-X)+R*X);
I:=If(Cum(J>0)<N+1,Cum((J>0)*Pdm)/N, ValueWhen(1,J,PREV)*(1-X)+Pdm*X);
PlusDI:=Round(100*I/A);
PlusDI:=ValueWhen(1,Cum(J>0)>=N,PlusDI);
M:=If(Cum(J>0)<N+1,Cum((J>0)*Mdm)/N, ValueWhen(1,J,PREV)*(1-X)+Mdm*X);
MinusDI:=Round(100*M/A);
MinusDI:=ValueWhen(1,Cum(J>0)>=N,MinusDI);
PlusDI;
MinusDI; 




------------------------ Yahoo! Groups Sponsor --------------------~--> 
$4.98 domain names from Yahoo!. Register anything.
http://us.click.yahoo.com/Q7_YsB/neXJAA/yQLSAA/BefplB/TM
--------------------------------------------------------------------~-> 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/

<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/