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 amibroker@yahoogroups.com, "bistrader" <bistra...@...> 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 amibroker@yahoogroups.com, "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 amibroker@yahoogroups.com, "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 amibroker@yahoogroups.com, "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 amibroker@yahoogroups.com, "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
> > > > >
> > > >
> > >
> >
>


Reply via email to