[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

Hi Mike, you're perfectly right.

I managed to get a solution with this which looks the same as yours.

thanks for every suggestion.

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
Count = Count + IIf (IsNull(myforeign), 0, 1);

_TRACE("symbol " + sym);
_TRACE("Count " + Count);
_TRACE("IsNull " + IsNull(myforeign));

}

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


--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> 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@> 
> 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/