Thanks. I'm going over your inputs and implemeting them now.
--- In [email protected], "Mike" <sfclimb...@...> wrote:
>
> Hi,
>
> I noticed an error in my code. It is not correct to rely on the value of "i"
> to add the comma separator. There's no guarantee that any of the previous
> symbols were added to the list.
>
> Instead, use a separate counter variable tracking additions. Or, check the
> length of TickerList to decide. Or, just keep adding the comma regardless and
> then strip off the last one before returning the final value. Or, ...
>
> Mike
>
> --- In [email protected], "gmorlosky" <gmorlosky@> wrote:
> >
> > Thanks - I'll give it a try
> >
> > --- In [email protected], "Mike" <sfclimbers@> wrote:
> > >
> > > I forgot "local" declarations for "i" and "Ticker". There may be other
> > > errors/omissions. But, you get the idea ;)
> > >
> > > Mike
> > >
> > > --- In [email protected], "Mike" <sfclimbers@> wrote:
> > > >
> > > >
> > > > Hi,
> > > >
> > > > It appears that you are trying to traverse a list of symbols and return
> > > > a subset of those that are found to also be in a reference symbol list.
> > > >
> > > > That being the case, a couple of observations that might be helpful:
> > > >
> > > > - It would be better if your function did not rely on variable
> > > > declarations that were defined somewhere else (e.g. TickerCategory,
> > > > TickerListNum, NumTickers, etc.). Consider having your function take
> > > > arguments instead.
> > > >
> > > > - Are you sure that NumTickers is the correct number of symbols found in
> > > > SymbolList? Given that you just fetched SymbolList, how did you know how
> > > > many symbols were in the list? Looks like a possible indexing error
> > > > here.
> > > >
> > > > - No need to repeatedly fetch the symbols for your reference list (i.e.
> > > > CategoryGetSymbols( categoryWatchlist, 9 )), unless the list is being
> > > > updated by another process behind your back, the value will not change
> > > > between iterations of the loop.
> > > >
> > > > - No need to use IFF. Just use IF without the "==" operator. Any non
> > > > zero value is considered to be true.
> > > >
> > > > - No need to include a check for (SP1500N100 == 1 AND Found == 1). Your
> > > > function never changes SP1500N100, so don't bother checking for it over
> > > > and over again. Either check the value before ever calling your function
> > > > in the first place, else check the value once at the very start of your
> > > > function and just return an empty string if it is false.
> > > >
> > > > - Your return value will have an extra "," at the end, which would be
> > > > different than any other list of symbols fetched using AmiBroker
> > > > functions. Better to use the same format as AmiBroker so that you can
> > > > pass your result list to any function that takes an AmiBroker list.
> > > >
> > > > Keeping all the rest of your logic, your function might look something
> > > > like this (untested):
> > > >
> > > > function GetSymbols2(TickerCategory, TickerListNum, ReferenceList) {
> > > > local InList;
> > > > local TickerList;
> > > > local SymbolList;
> > > >
> > > > InList = "," + ReferenceList + ",";
> > > > TickerList = "";
> > > > SymbolList = CategoryGetSymbols( TickerCategory, TickerListNum );
> > > >
> > > > for (i = 0; (Ticker = StrExtract(SymbolList, i)) != ""; i++) {
> > > > if (StrFind(InList, "," + Ticker + ",")) {
> > > > if (i > 0) {
> > > > TickerList += ",";
> > > > }
> > > >
> > > > TickerList += Ticker;
> > > > }
> > > > }
> > > >
> > > > return TickerList;
> > > > }
> > > >
> > > >
> > > > Sample usage becomes:
> > > >
> > > > if (SP1500N100) {
> > > > WL_SP1500N100 = CategoryGetSymbols(categoryWatchlist, 9);
> > > > Duplicates = GetSymbols2(categoryWatchList, 1, WL_SP1500N100);
> > > > }
> > > >
> > > >
> > > > Mike
> > > >
> > > > --- In [email protected], "gmorlosky" <gmorlosky@> wrote:
> > > > >
> > > > > Use this, which will locate the string in the watchlist:
> > > > >
> > > > > function GetSymbols()
> > > > > {
> > > > > TickerList = "";
> > > > > SymbolList = CategoryGetSymbols(TickerCategory, TickerListNum);
> > > > >
> > > > > for(n = 0; n < NumTickers; n++)
> > > > > {
> > > > > Ticker = StrExtract(SymbolList,n);
> > > > > WL_SP1500N100 = CategoryGetSymbols(categoryWatchlist, 9);
> > > > > Found = 0;
> > > > > Found = IIf(StrFind(","+WL_SP1500N100+",",","+Ticker+",") > 0, 1, 0);
> > > > > if (SP1500N100 == 1 AND Found == 1 )
> > > > > TickerList = TickerList + Ticker + ",";
> > > > > }
> > > > > return TickerList;
> > > > > }
> > > > >
> > > > >
> > > > > --- In [email protected], "gmorlosky" gmorlosky@ wrote:
> > > > > >
> > > > > > I have this code and the middle line of the "IIF" statement keeps
> > > > telling me it's the wrong argument ?
> > > > > >
> > > > > > function GetSymbols()
> > > > > > {
> > > > > > TickerList = "";
> > > > > > SymbolList = CategoryGetSymbols(TickerCategory, TickerListNum);
> > > > > >
> > > > > > for(n = 0; n < NumTickers; n++)
> > > > > > {
> > > > > > Ticker = StrExtract(SymbolList,n);
> > > > > > IIf (InWatchListName( "1_S&P 1500 N100" ), Ticker = Ticker, Ticker =
> > > > "");
> > > > > > TickerList = TickerList + Ticker + ",";
> > > > > > }
> > > > > > return TickerList;
> > > > > > }
> > > > > >
> > > > >
> > > >
> > >
> >
>