PureBytes Links
Trading Reference Links
|
Hi Alan
> I'll certainly try your ideas. The only problem is that I don't
> understand PREV. I submitted an earlier post asking how to determine
> exactly what variable, formula, constant, data array, etc, etc, was
> calculated by PREV.
PREV calls the previous bars value of the variable currently being processed. This allows decisions
to be made based on current bar values relative to some readily defined past event.
Ref() calls the previous bars value of a data array or variable that has been defined PRIOR to the
current variable being processed. Ref() cannot access a variable that has not been defined.
Therefore you cannot use Ref() to call the current variable if this is the first definition of this
variable. If this is not the first definition of this variable then Ref() is allowable, but only to
call the previous value of the prior defininition, not the previous value of the current definition.
Defining a variable twice is an accepted method of overcomming the 20 variable name limitation but
it does not allow Ref() to be used in place of PREV.
MetaStock processes every bar and every variable in sequence. It can't "jump" in the processing
flow. This makes MS very difficult to to come to grips with for programmers but simpler to use for
non-programmers (up to a point). Think orderly sequence. PREV is a function that allows us to make
processing decisions right now based on current status. Every other function can only react to
things that have already happened in the processing flow, if not on a previous bar then in a
previously processed variable.
> I got only one response (suggesting I should use Ref() instead), so
> it seems to me that other people also have difficulty in
> understanding PREV. Except you, of course :-).
I have my moments with it too.
> (As an aside, my inability to understand PREV hinders me in trying to
> understand your Pegasus indicators, which are full of PREVs. For
> example:
> X:=If(Cum(J>0)=1,K,ValueWhen(1,J,PREV)*(1-X)+K*X);
> )
This variable is calculating a weekly exponential moving average. Somewhere in the User Manual it
says that an EMA can't be calculated without PREV, and this is true. before trying to understand the
above line you really need to tackle an EMA in a more simple form. Examine the following formula in
conjunction with the EMA description in the manual.
{Exponential Moving Average}
n:=Input("Periods",1,999,7);
R:=2/(n+1); {ratio of new data added each bar}
M:=If(Cum(1)=1,C,PREV*(1-R)+C*R);
M;
In a 7 period EMA 25% of the current value of CLOSE is added to 75% of the previous bars value of
the EMA.
How do I arrive at 25%? 2/(7+1). How do I arrive at 75%? 1 - 2/(7+1). Change the value of "n" and
you change the percentages/proportions, OK?
Now to the 'M' variable with PREV in it. The "If(Cum(1)=1,C," part says if this is bar one then
"seed" the EMA with CLOSE. Failure to seed the variable on bar one will essentially force it to
start with ZERO which is pretty stupid for an MA. Give it 100% of CLOSE on the first bar. If you
think about it the 1 bar average of CLOSE has to be 100% of CLOSE.
The 'M' variable will not plot on bar one because the PREV function needs two bars before it can
plot - the current bar and a previous bar. However on bar two the PREV function looks back to bar
one and finds that, even though not plotted, the previous value of 'M' was CLOSE.
"PREV*(1-R)" is saying multiply the previous value of 'M' (CLOSE only if this is bar two, otherwise
it is a composite) by 75%.
"+C*R)" is saying add that to 25% of the current value of CLOSE.
Bar one sets a starting value for the EMA, and every subsequent bar adds a proportion (set by the
number of period) of new data and retains the balance of the old data. The retained old data
contains some of ALL old data, not just data looking back "n" periods.
PREV is a concept that takes most of us some time to get our heads around. Sooner or later you'll
make the connection.
Regards
Roy
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/
|