[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

Hi Philip

> Greetings All,
>
> 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

Here's a formula for weekly +DI and -DI on daily charts. Use Fml("Weekly PlusDI MinusDI") to 
call -DI in a systems test or exploration, and FmlVar("Weekly PlusDI MinusDI","PlusDI") to call +DI. 
These values do not agree exactly with the MetaStock functions because MetaStock rounds the values 
and these formulas do not. 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.

Sorry about the number of PREVs in this formula. There is no way, short of creating a dll, to code 
weekly Wilders Smoothing without PREV. You will need to install Jose's "Calender Week counter" 
indicator before this indicator will function. You can get that from
http://users.bigpond.com/prominex/pegasus.htm#metastock

I've set the indicator to "dynamic" mode. That means that it will update the current week as each 
day's data is added. Remember to set the "periods" default before use.

Regards

Roy


  {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:=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:=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/