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

Re: [EquisMetaStock Group] Issues with Variables



PureBytes Links

Trading Reference Links

Roy,

As always you have given a heck of a lot here. BTW I'm signing up for
your site/
newsletter. Least that can be done for all the help you have offered.
(Hint Hint folks).

I'm going to give this a shot for sure. But I think the problem is
pretty fundamental 
and perhaps one that is very tough to deal with in MS as it is since
it has no loop 
control or assingment as in other languages.

What I really want to do in the example is pluck one value (in this
case the close) on a 
given date. The date here is the first trading day of 2004. Why? I'm
trying to evolve 
some Year-to-date indicators more for scanning purposes in the
Explorer than for 
charting.

So what I really am trying to do is pluck valueA from Jan 2, 2004 and
then compare it 
to the valueB (in this case the close of the prior day or today). The
math bit in my 
example is just to display a percent change value between those dates.

Here is the pseudo-code:

valueA:= the closing price  on Jan 2, 2004 

this is all I am interested in, and once assigned I don't want valueA
to have any other 
value. see note below

valueB:= C, today's close

Now, here is the issue I have always had trouble with in MS. In other
languages I can 
pluck a value from a matrix or list and that's the end of it. The
variable is assigned 
that value, end of story, no loop control necessary.

In MS however since the if/then structure always seems to require an
else valueA over 
the variable value's range goes something like this when I get it
back from the 
formula I sent.

<----- valueA

Jan 2, 2004: 39.00
Jan 5, 2004: 0
...
Today's date:0

------ >
What I want though is a variable that has only the first non-zero
value (Jan 2 in this 
case though it could be any date of choosing). Period. Yet MS seems
to offer no way 
to do that.

The problem is that if I want to use this value in an exploration, I
have to somehow 
parse it to get the non-zero, Jan 2nd value and then do the
manipulation. 

The only other MS approach I can think of is to somehow copy the one
value I want 
over the entire range of values.  In other words every value over the
range of dates for 
valueA would be 39 to use the example above. Or somehow coerce the
non-zero 
value so that it would be the LastValue() of the variable.

Hope I have not utterly confused you. And maybe ValueWhen will do it. 


--- In equismetastock@xxxxxxxxxxxxxxx, "Roy Larsen" <rlarsen@xxxx>
wrote:
> deepfoobar
> 
> I've looked at your code and I can't see what it is that you're
trying to achieve (my 
problem, not
> yours). However from your comments I think the function you need is
ValueWhen(). 
The trick with
> ValueWhen() is to create an "EXPRESSION" that was last true on the
bar that has the 
value you want
> to record.
> 
> So if I wanted to extend the active value of your indicator from 2
January 2004 to 
the current bar I
> would change your last line by naming the variable, then add
ValueWhen() like so.
> 
> x:=If((Start<>End),varPercent+(100*(varC-(varB+C))/varC),0);
> ValueWhen(1,x>0,x);
> 
> To get this to plot on a chart properly when unscaled you might
need to add an 
"initialisation"
> signal. The purpose of this is to trigger the ValueWhen() at the
beginning of the 
chart. The value
> returned by that trigger is replaced by the genuine trigger from
the set data, but 
you need to
> remember that the pseudo (initialisation) trigger will create a
value even if the date 
signal does
> not occur for whatever reason.
> 
> ValueWhen(1,Cum(x>-1)=1 OR x>0,x);
> 
> Now, suppose your trigger signal was true for many bars, a date
range for example, 
and you only
> wanted the last true bar as the real signal. No change is necessary
to the 
ValueWhen() because it
> will trigger on every bar up to the last true trigger bar. If you
wanted to return the 
value from
> the first bar of the date range then you need to convert the signal
into a "leading 
edge" only
> signal.
> 
> ValueWhen(1,Cum(x>-1)=1 OR (x>0 AND Alert(x=0,2)) ,x);
> 
> Notice how I've used (x>0 AND Alert(x=0,2)) to create the leading
edge signal. you 
could use
> Ref(x,-1)=0 in place of Alert(), but in doing so you would
invalidate the 
initialisation expression
> because it is active while Ref(x,-1)=0 is still invalid. An invalid
bar in an any 
expression in a
> variable makes the whole variable invalid.
> 
> Hope this helps.
> 
> Roy
> 
> > I have run into an annoying issue with MS I need help with.
Following
> > Roy Larsen's example I've been able to write some date code that
works
> > well in isolating the start and end of data to look at.
> >
> > The recent issue is that I want to be able to grab a value from a
date
> > and return that value in a variable to use in explorations.
> >
> > Right now I have the code set up so that I get the expected value
on
> > the specific date and zero otherwise. That works fine as far as
plots
> > go, but stops me dead in my tracks when it comes to using the
variable.
> >
> > Here is the code such as it is:
> > << ---------------
> >
> > Sd:=2;
> > Sm:=1;
> > Sy:=2004;
> >
> > Start:=(DayOfMonth()>=Sd AND Month()=Sm AND
> > Year()=Sy);
> >
> > End:=(DayOfMonth()>=Sd+1 AND Month()=Sm AND
> > Year()=Sy);
> >
> > varB:=0;
> > varPercent:=0;
> > varC:=LastValue(C);
> >
> > If((Start<>End),varPercent+(100*(varC-(varB+C))/varC),0)
> >
> > ------------------- >>
> >
> > Is there a way to isolate a variable only to the non-zero result
(this
> > would be varPercent)? The problem seems to be near as I can tell
that
> > I must be getting only the last value back from this instead of
the
> > variable, and thus always zero.
> >
> > In other languages this would be a snap. I'm at a loss in how to
tell
> > MS not to stomp all over this and return the non-zero result.
> >
> > Hope this was resonably clear. I want the variable back in
isolation
> > for that date by the way to use in other calculations. It is not
> > necessary for it to be plotted at all really.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> >




------------------------ Yahoo! Groups Sponsor --------------------~--> 
Yahoo! Domains - Claim yours for only $14.70
http://us.click.yahoo.com/Z1wmxD/DREIAA/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/