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

[amibroker] Re: How to Skip Empty Symbols when looping through wishlist



PureBytes Links

Trading Reference Links

I think that your code is now wrong. It was correct the way you had it 
before.

Consider the scenario where you have 10 symbols, and any number of the 
initial symbols have any number of NULLs, but the last symbol does not 
have any nulls.

By the end of your loop, the variable i will be 9 (e.g. 0, 1, 2, ..., 
9) and IsNull will be false for all bars (since it is on the last 
symbol, which does not have any nulls). You will have set Count for 
all bars as follows:

Count = 9 - 0;

This is wrong for multiple reasons.

1. There are 10 symbols, not 9.
2. You are overwriting all previous calculations of Count based only 
on the values of the last symbol. All calculations of Count based on 
the NULL values of the previous symbols have been lost.

Why did you change the code from what you had? The whole thing can be 
simplified down to:

list = CategoryGetSymbols(categoryGroup, 0);
count = 0;
 
for (i = 0; (sym = StrExtract(list, i)) != ""; i++) {
  count += IIf(IsNull(Foreign(sym, "C")), 1, 0);
}

Plot(count, "Count", colorRed, styleLine | styleThick | 
styleOwnScale);

Mike

--- In amibroker@xxxxxxxxxxxxxxx, "Paolo Cavatore" <pcavatore@xxx> 
wrote:
>
> 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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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));
> > > > > 
> > > > >     }
> > > > >
> > > >
> > >
> >
>




------------------------------------

**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

*********************
TO GET TECHNICAL SUPPORT from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com
*********************

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html

*********************************
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/