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

Re: [EquisMetaStock Group] Simple Moving Average using first bar of each week



PureBytes Links

Trading Reference Links

Here are three versions of a weekly Monday CLOSE SMA. The first formula is less accurate than the
other two because of the errors introduced by cumulating the data for every Monday on the chart then
subtracting the unwanted Monday data. The advantage of this code is that it does not require PREV.

The second and third formulas are more accurate because there is no fractional component in the 'J'
variable cumulations. This variable calculates the look-back periods (in bars, not weeks) for Sum()
or Mov(). In both formulas the 'J' variable is converted to operate legitimately as a constant in
either the Sum() or Mov() functions.

The last line of the third formula can be broken down as follows.

Mov(   {moving average of}
 K*M,  {data array includes only the CLOSE when Monday is true}
  LastValue(J+PREV-PREV),   {'J' periods in the form of a constant as required by Mov()}
   S)  {simple moving average}
    *J/D;  {multiply MA by look-back periods and divide result by weeks}

It is clear from the makeup of this last line that moving between different periodises on the one
chart is rarely a matter of making simple changes. As you've already discovered the data array needs
to created, the sampling of that data needs to be managed, and the number of look-back periods also
need to adjusted to allow for holidays. The basic functions just can't cut it.

Roy

  {Monday Close SMA 1}
  {for use on daily charts}
D:=Input("Periods in Weeks",1,100,10);
M:=DayOfWeek()<=ValueWhen(2,1,DayOfWeek());
K:=ValueWhen(1,M,C);
G:=Cum(M*K);
X:=(G-ValueWhen(D+1,M,G))/D;
X;

  {Monday Close SMA 2}
  {for use on daily charts}
D:=Input("Periods in Weeks",1,100,10);
M:=DayOfWeek()<=ValueWhen(2,1,DayOfWeek());
J:=Cum(1)-ValueWhen(D+1,M,Cum(1));
K:=ValueWhen(1,M,C);
Sum(K*M,LastValue(J+PREV-PREV))/D;

  {Monday Close SMA 3}
  {for use on daily charts}
D:=Input("Periods in Weeks",1,100,10);
M:=DayOfWeek()<=ValueWhen(2,1,DayOfWeek());
J:=Cum(1)-ValueWhen(D+1,M,Cum(1));
K:=ValueWhen(1,M,C);
Mov(K*M,LastValue(J+PREV-PREV),S)*J/D;


----- Original Message ----- 
From: "sabboushi2000" <Yahoo@xxxxxxxxxxxxxxx>
To: <equismetastock@xxxxxxxxxxxxxxx>
Sent: Friday, February 06, 2004 2:53 AM
Subject: [EquisMetaStock Group] Simple Moving Average using first bar of each week


> Hi-
>
> Am trying to use EOD daily data to create a Moving Average for the
> previous 3 weeks - by using the Close of the first bar of each
> week AND by using the MOV function.
>
> Example:  Today is Wednesday.  I want a simple 3 day moving average
> using the following data:
>
>
>
>     2/17 Wednesday
>     2/16
>     2/15 Monday  Close: 10
>
>     2/12 Friday
>     2/11
>     2/10
>     2/9  Tuesday Close: 15
>     2/8  Monday Holiday
>
>     2/5  Friday
>     2/4
>     2/3
>     2/2
>     2/1  Monday  Close: 20
>
> The result I am looking for in this example would be (10 + 15 +
> 20) / 3 = 15
>
> (2/9 Tuesday was first trading day of that week since Monday was a
> trading Holiday)
>
>
> NOTE: I know I can create a formula to create this moving average
> without using the MOV function, but I don't really want to create a
> simple moving average using 3 data points - I just used this as a
> simple example for discussion purposes.
>
> I've tried using valuewhen to identify the first close value I want
> MS8.01 EOD to use, wishing that the formula would "increment" to each
> previous bar that met the condition - but no such luck.  The formula
> I tried:
>      Mov(ValueWhen(1,FIRSTDAYOFWEEK, C) ,3 ,S )
> where FIRSTDAYOFWEEK is a custom indicator that is true on the first
> trading day of each week.  My problem would be solved if MS
> incremented the "1" in my formula to 2 and 3 to get the data points I
> want it to use - but of course I'm being naive...
>
> Any geniuses out there that can think outside my box?
>
> With Regards-
> Sam
>
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
>




 
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/