I'm trying to know how many symbols are not empy in my universe on a
bar-by-bar basis...the following code now seems to be working.
Thanks for every hint
p
// EmptySymbols finder
// retrive comma-separated list of symbols
// from Group 0
list = CategoryGetSymbols(categoryGroup, 0);
Count = 0;
for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
{
SetForeign(sym);
myforeign = C;
RestorePriceArrays();
//if the symbol is empty Count is not increased
Count = i - IIf(IsNull(myforeign), 1, 0);
_TRACE("symbol " + sym);
_TRACE("Count " + Count);
_TRACE("IsNull " + IsNull(myforeign));
}
Plot(Count, "Count", colorRed, styleLine | styleThick);
--- In amibroker@yahoogroups.com, "Mike" <sfclimbers@...> wrote:
>
> Your code is working fine. What is it that you are trying to do?
>
> As written, your code is counting (on a bar by bar basis since you
are
> working with arrays) the number of symbols that have a Null value
for
> a Close.
>
> Just add a Plot statement for the Count array and scroll back
through
> time to see that the value will increase as more and more symbols
run
> out of data. Be sure that at least 1 symbol in your group actually
> runs out of data before any of the others, or actually does have a
> Null value for Close at some point in its history.
>
> Mike
>
> --- In amibroker@yahoogroups.com, "Paolo Cavatore" <pcavatore@>
> wrote:
> >
> > Having changed
> > IIf(IsNull(myforeign), Count, Count++);
> > into
> > Count = Count + IIf(IsNull(myforeign), 1, 0);
> > is not working either.
> >
> > It really seems like IsNull function doesn't return True for
empty
> > symbols.
> >
> > New entire code below
> >
> > // EmptySymbols finder
> > // retrive comma-separated list of symbols
> > // from Group 0
> > list = CategoryGetSymbols(categoryGroup, 0);
> >
> > Count = 0;
> >
> > for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
> > {
> > SetForeign(sym);
> > myforeign = C;
> > RestorePriceArrays();
> >
> > //if the symbol is empty Count is not increased
> > Count = Count + IIf(IsNull(myforeign), 1, 0);
> >
> > _TRACE("symbol " + sym);
> > _TRACE("Count " + Count);
> > _TRACE("IsNull " + IsNull(myforeign));
> >
> > }
> >
> >
> > --- In amibroker@yahoogroups.com, "Mike" <sfclimbers@> wrote:
> > >
> > > Actually, you are running into a documented side effect of IIF
> > usage.
> > >
> > > Specifically; the IIF statement always executes BOTH the true
and
> > the
> > > false branches of the code. So, you will always have your
Count++
> > code
> > > executed regardless of the value of the IsNull expression.
> > >
> > > Refer to the user guide for details:
> > > http://www.amibroker.com/guide/afl/afl_view.php?id=72
> > >
> > > Mike
> > >
> > >
> > > --- In amibroker@yahoogroups.com, "Paolo Cavatore" <pcavatore@>
> > > wrote:
> > > >
> > > > Does anyone know how to skip empty symbols when looping
through
> a
> > > > list of them?
> > > >
> > > > The code below shows that IsNull function doesn't return TRUE
> for
> > > > empty symbols.
> > > >
> > > > Thanks,
> > > >
> > > > paolo
> > > >
> > > > // EmptySymbols finder
> > > > // retrive comma-separated list of symbols
> > > > // from Group 0
> > > > list = CategoryGetSymbols(categoryGroup, 0);
> > > >
> > > > Count = 0;
> > > >
> > > > for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
> > > > {
> > > > SetForeign(sym);
> > > > myforeign = C;
> > > > RestorePriceArrays();
> > > >
> > > > //if the symbol is empty Count is not increased
> > > > IIf(IsNull(myforeign), Count, Count++);
> > > > _TRACE("symbol " + sym);
> > > > _TRACE("Count " + Count);
> > > > _TRACE("IsNull " + IsNull(myforeign));
> > > >
> > > > }
> > > >
> > >
> >
>