Yep, got it. Nice explanation. Something you did not have to do! Thanks again!!
--- In [email protected], "Mike" <sfclimb...@...> wrote: > > Let me prefix my comments by saying that there may be a more efficient way of > doing it. > > I did not see any obvious OLE access for watchlists. However, there is access > to the stocks in the database. Part of that stock access includes a bit field > for which watchlists the stock belongs to. > > Therefore, to empty the watchlist we could iterate through the universe of > stocks and remove each from the target watchlist by clearing (i.e. setting to > 0) the bit identifying the target watchlist. In the world of bitwise > manipulation, you can clear a bit by "and-ing" it with 0 (i.e. false) since > anything "and false" will always be false as a whole. > > Similarly, to add all stocks to the watchlist, we could iterate through the > universe of stocks and set (i.e. change to 1) the bit for the target > watchlist. In the world of bitwise manipulation, you can set a bit by > "or-ing" it with 1 (i.e. true) since anything "or true" will always be true > as a whole. > > Combining the two approaches, a single loop can be employed to either set or > clear the watchlist bit based on the desirability of the stock being > considered. Thus leaving the only question to be which stocks to include? > > In your case the answer is those stocks found in your .csv file. > > Approach 1. > Using a single iteration through the universe of database stocks, we could > have searched for each stock in your file, and upon finding the stock set > it's watchlist bit, else cleared it's watchlist bit. But, if there were 'n' > stocks in the database, that would mean n searches of your .csv file. File > manipations are not cheap. > > Approach 2. > Alternatively, we could have done an initial sweep of the universe of > database stocks to clear the bit for all of them. Then done a single > iteration of your .csv file and for each stock compared it to every stock in > the database until we found the match, at which point we would set the bit > for that database stock. But, if there were 'n' stocks in your watchlist, we > would have done at least a partial iteration through the database of stocks > n+1 times (once to clear all, then n more times up until each stock was > found). > > Assuming that searching a string is less expensive than searching line by > line through a file, I instead constructed a single string prefixed with a > comma, followed by a comma separated list of all the stocks in your .csv > file, and suffixed with a comma. > > e.g. > ",ORCL,IBM,AAPL," > > Now, using Approach 1 above, we can simply search the string instead of > searching your .csv file. Since there may be overlap between stock names > (e.g. A and AA), we rely on the commas as delimeters for complete names and > search for ",A," and ",AA," respectively. > > Make sense? > > Mike > > --- In [email protected], "bistrader" <bistrader@> wrote: > > > > Thanks Mike. I did each, will do more and give it a try. I am sure I will > > get it, Today, I do not totally understand exactly what the following code > > you provided is doing. It seems to be comparing 2 strings by looping thru > > all stocks in the database. I have read via google and am not clear. > > > > for (j = 0; j < count; j++) { > > stock = stocks.Item(j); > > > > if (tickers.indexOf("," + stock.Ticker + ",") >= 0) { > > stock.WatchListBits |= 1 << 20; // Add to watchlist 20 > > } else { > > stock.WatchListBits &= !(1 << 20); // Remove from watchlist 20 > > } > > > > > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > Microsoft's MSDN has good coverage for much of what is available. > > > > > > e.g. file usage: > > > http://msdn.microsoft.com/en-us/library/czxefwt8(VS.85).aspx > > > > > > They also have an area dedicated to JScript, which I haven't sifted > > > through yet. > > > > > > http://msdn.microsoft.com/en-us/library/4yyeyb0a(VS.85).aspx > > > > > > Whenever I need something, I just google for an english description of > > > what I want, like "how to ... in JScript". You usually end up wading > > > through a bunch of javascript web development specific stuff. But, > > > eventually you hit a JScript example in a user forum somewhere. > > > > > > Mike > > > > > > --- In [email protected], "bistrader" <bistrader@> wrote: > > > > > > > > Mike, I did not see this and do not know how I missed it. I studied. > > > > I understand all of the basic code and loop. I do not understand first > > > > 4 lines and will do google search on these. Maybe you or someone else > > > > has a good site or document to go to, to do better job at JavaScript. > > > > Thanks so much for your help. > > > > > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > > > > > > > > > > I believe that the following will serve as a skeleton for the desired > > > > > steps 1, 2, 5. > > > > > > > > > > fso = new ActiveXObject("Scripting.FileSystemObject"); > > > > > ab = new ActiveXObject("Broker.Application"); > > > > > stocks = ab.Stocks; > > > > > count = stocks.Count; > > > > > aa = ab.Analysis; > > > > > > > > > > for (i = 1; i <= 10; i++) { > > > > > f = fso.GetFile("c:\\temp\\Input" + i + ".csv"); > > > > > ts = f.OpenAsTextStream(1, 0); // Open for read of ASCII > > > > > tickers = ","; > > > > > > > > > > while (!ts.AtEndOfStream) { > > > > > tickers += ts.ReadLine(); // Assume one ticker per line in > > > > > .csv > > > > > file > > > > > tickers += ","; > > > > > } > > > > > > > > > > ts.Close(); > > > > > > > > > > > > > > > for (j = 0; j < count; j++) { > > > > > stock = stocks.Item(j); > > > > > > > > > > if (tickers.indexOf("," + stock.Ticker + ",") >= 0) { > > > > > stock.WatchListBits |= 1 << 20; // Add to watchlist 20 > > > > > } else { > > > > > stock.WatchListBits &= !(1 << 20); // Remove from > > > > > watchlist > > > > > 20 > > > > > } > > > > > } > > > > > > > > > > ab.RefreshAll(); > > > > > > > > > > // Your backtest here. > > > > > // Your exploration here. > > > > > } > > > > > > > > > > Mike > > > > > > > > > > > > > > > --- In [email protected], "bistrader" <bistrader@> wrote: > > > > > > > > > > > > I am working on a second JavaScript that I will post when done. I > > > > > > want > > > > > it to do the following. > > > > > > > > > > > > 1. Makes watchlist 20 empty. > > > > > > 2. Reads Input1.csv symbols into watchlist 20. > > > > > > 3. Runs a backtest on MyBacktest.afl with filter at watchlist 20. > > > > > > 4. Then, runs an exploration on MyExploration.afl using current > > > > > > symbol > > > > > loaded in AB. This exploration creates a text file called Output1.csv > > > > > to > > > > > match up with Input1.csv > > > > > > 5. Loops thru Step 1 thru Step4 for a total of 10 times starting > > > > > > with > > > > > Input1.csv and ending with Input10.csv. In the end, there are > > > > > Output1.csv thru Output10.csv. > > > > > > > > > > > > I know how to do Steps 3 and 4. I do not know as of yet how to do > > > > > Steps 1, 2 and 5 in JavaScript. Help is appreciated and thanks!! > > > > > > > > > > > > Bert > > > > > > > > > > > > > > > > > > > > >
