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" <gmorlo...@...> 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;
> > }
> >
>