MetaStock™ Zone Forum & FAQ Artykuły Linki Elliott Waves EasyLanguage™ Zone

A B C D E F G H I J K L M N O P R S T U V W Y Z #

Weekly ADX Roy Larsen

From: samuel leung <samuelleung88960[at]yahoo.com.hk>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Sunday, January 29, 2006, 6:06:25 AM
Subject: [EquisMetaStock Group] Weekly +DI on daily chart

Hello Roy,

I'm trying to write the weekly +DI indicator (and also the weekly -DI indicator) on daily chart.

As there are codes of weekly ADX on daily chart written by you below, I think the weekly +DI indicator can be got by modifying some lines with in {{{ }}} below. However, the result is not correct. Please help to share the hint the way to fix it.

Thanks in advance.

Regards,
Samuel

A prerequisite for this indicator is Jose Silva's "Calendar Week counter"."Weekly ADX" plots a weekly ADX signal on any daily chart. The construction is not quite true to the standard MetaStock"Directional Movement ADX" indicator and therefore the plot values also will differ slightly.


Weekly ADX

{(c)2004 Roy Larsen, rlarsen[at]man.quik.co.nz}
{for use on daily charts with
Jose Silva's "Calendar Week counter"}
N:=Input("Weekly ADX Periods",1,99,10); 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,2);
{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:=LastValue(Cum(1))=Cum(1);
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);
I:=100*I/A;

M:=If(Cum(J>0)<N+1,Cum((J>0)*Mdm)/N, ValueWhen(1,J,PREV)*(1-X)+Mdm*X);
M:=100*M/A;
M:=Abs(I-M)/(I+M);

F:=ValueWhen(1,J,PREV)*(1-X)+M*X;
100*If(ValueWhen(N+1,J,F)>0,F,F);



 

 


Weekly ADX Modification 1

{(c)2004 Roy Larsen, rlarsen[at]man.quik.co.nz}
{for use on daily charts with
Jose Silva's "Calendar Week counter"}
N:=Input("Weekly ADX Periods",1,99,10); 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,2);
{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:=LastValue(Cum(1))=Cum(1);
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);
I:=100*I/A;

{M:=If(Cum(J>0)<N+1,Cum((J>0)*Mdm)/N, ValueWhen(1,J,PREV)*(1-X)+Mdm*X);
M:=100*M/A;
M:=Abs(I-M)/(I+M);}

F:=ValueWhen(1,J,PREV)*(1-X)+I*X;{M is changed to I}
100*If(ValueWhen(N+1,J,F)>0,F,F);

 

 
 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Roy Larsen <rlarsen[at]man.quik.co.nz>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Sunday, January 29, 2006, 7:12:51 PM
Subject: [EquisMetaStock Group] Weekly +DI on daily chart

Hi Samuel

The "I" variable is actually +DI, And Rounding it should give identical values to the MetaStock function. Use the "Round(M)" for -DI.

There is a problem with my weekly ADX-related formulas when plotted on weekly charts, and that is that the first 6 -10 months is way off the scale. This is an issue with seeding (assigning a beginning value) one or more of the Wilders Smoothing variables (variables with PREV). I'll take a look at it soon.

Regards

Roy


Weekly ADX Modification 2

{2004 Roy Larsen, rlarsen[at]man.quik.co.nz}
{for use on daily charts with
Jose Silva's "Calendar Week counter"}

N:=Input("Weekly ADX Periods",1,99,10); 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:=LastValue(Cum(1))=Cum(1);
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));

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);
I:=100*I/A;
Round(I);

 
 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Roy Larsen <rlarsen[at]man.quik.co.nz>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Sunday, January 29, 2006, 8:18:54 PM
Subject: [EquisMetaStock Group] Weekly +DI on daily chart

Hi Samuel

Here are revised versions of the Weekly +DI and Weekly ADX indicators. Changes have been made affecting the "Pdm" and "I" variables (and "M" for Weekly ADX). Further changes may follow.

Regards

Roy

 

Weekly +DI - Revised

{c 2004-2006 Roy Larsen, www.metastocktips.co.nz}
{for use on daily charts with Jose Silva's "Calendar Week counter"}

N:=Input("Weekly ADX Periods",1,99,10); 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:=LastValue(Cum(1))=Cum(1);
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));
Pdm:=If(Cum(J>0)<3,0,Pdm);
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);
I:=100*I/ValueWhen(1,Cum(J>0)>N,A);
Round(I);




 
 

Weekly ADX - Revised

{(c) 2004-2006 Roy Larsen, www.metastocktips.co.nz}
{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,0);
{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:=LastValue(Cum(1))=Cum(1);
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));
Pdm:=If(Cum(J>0)<3,0,Pdm);
Mdm:=If(Lo<Li AND Ho<=Hi,Li-Lo,If(Ho>Hi AND Lo<Li AND (Ho-Hi)<(Li-Lo),Li-Lo,0));
Mdm:=If(Cum(J>0)<3,0,Mdm);
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);
I:=100*I/ValueWhen(1,Cum(J>0)>N,A);
M:=If(Cum(J>0)<N+1,Cum((J>0)*Mdm)/N, ValueWhen(1,J,PREV)*(1-X)+Mdm*X);
M:=100*M/ValueWhen(1,Cum(J>0)>N,A);
M:=Abs(I-M)/(I+M);
F:=ValueWhen(1,J,PREV)*(1-X)+M*X;
X:=100*If(ValueWhen(N+1,J,F)>0,F,F);
X;


 
 

Hello Roy,

Thank you for your help.

Regards,
Samuel

Source / From: TOP
Metastockusers[at]yahoogroups[dot]com

Equis and MetaStock® and MetaStock Professional® are registered trademarks of Equis International. Achelis Binary Wave®, The DownLoader®,
Expert Advisor®, OptionScope®, Quotecenter® and Smart Charts® are trademarks of Equis International, a Thomson Reuters company.

TradeStation® Pro, TradeStation® 2000i, OptionStation®, SuperCharts®, PowerEditor® and EasyLanguage®
are registered trademarks of TradeStation Technologies, Inc. Other names and marks referred to are the property of their respective owners.

All information provided on this website is for educational purposes only. Trading involves risk, including possible loss of principal and other losses.

Ten i inne materiały na tej stronie zostały zamieszczone zostały jedynie w celach edukacyjnych, nie ponoszę żadnej odpowiedzialno¶ci za ich stosowanie.

Gra na giełdzie i rynkach walutowych (FOREX) niesie ze sob± ryzyko poważnych strat finansowych!