[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Top 200 stocks by volume



PureBytes Links

Trading Reference Links

Andrew, Dave,

Instead of exporting into EXCEL you may do the job entirely in 
amibroker.Example:
I have the 101 N100 stocks in WL4 and I select the top50 MA(C*V,250) 
with

// Remove all symbols from WL10, 
// select the top50 MA(C*V,250) from WL4 
// and send them into WL10.
top=50;ORigin=4;destination=10;
g=0;x=0;k=0;topList="";M="";pop=0;
List=CategoryGetSymbols(categoryWatchlist,ORigin);
for(d=1;d<=top;d++)
{
for(i=0;(sym=StrExtract(List,i))!="";i++)
{
SetForeign(sym);
x=MA(C*V,250);
RestorePriceArrays();
g=IIf(x>g,x,g);
}
for(i=0;(sym=StrExtract(List,i))!="";i++)
{
SetForeign(sym);
x=MA(C*V,250);
topList=topList+WriteIf(x==g,sym,"")+WriteIf(x==g,",","");
M=M+WriteIf(X!=G,SYM,"")+WriteIf(X!=G,",","");
}
List=m;g=0;x=0;m="";
}
for(i=0;(sym=StrExtract(topList,i))!="";i++)
{pop=pop+1;}//this is the population of the topList

List1=CategoryGetSymbols(categoryWatchlist,destination);
for(i=0;(sym=StrExtract(List1,i))!="";i++)
{
CategoryRemoveSymbol(sym, categoryWatchlist, destination );
}
for(a=0;a<pop;a++)
{
CategoryAddSymbol(StrExtract(toplist,a), categoryWatchlist,
destination );
}
Filter=1;// EXPLORE any current stock for the n=1 last quotations
AddTextColumn(topList,"top"+WriteVal(top,1.0)+"List");
AddColumn(pop,"topList population",1.0);
//Hit View->RefreshAll

Since all the MA(C*V,250) are positive and there is no threshold, put 
g=0 and x=MA(C*V,250), select ANY stock
and explore for the n=1 last quotations. It takes some 2-3 secs and 
thats it.
Conditional Output:
You may select the conditional top50, asking for example MA(C*V,250)
>300,000,000 by changing g=0 into g=3*10^8;
The result will be 
Results:
Ticker,Date/Time,top50List,topList population,
YHOO,19/12/2003,^NDX,MSFT,INTC,CSCO,AMGN,DELL,EBAY,ORCL,AMAT,QCOM,KLAC
,IACI,YHOO,AMZN,NXTL,,15

[YHOO was by chance my current ticker], which is identical to the

x=MA(C*V,250)>3*10^8;;
Filter=x;
AddColumn(MA(C*V,250),"");

Results:
Ticker,Date/Time,Column 0,
^NDX,19/12/2003,20190236672.00
MSFT,19/12/2003,1559890688.00
INTC,19/12/2003,1325250176.00
CSCO,19/12/2003,990616960.00
AMGN,19/12/2003,616505920.00
DELL,19/12/2003,584637056.00
EBAY,19/12/2003,578834304.00
ORCL,19/12/2003,517092672.00
AMAT,19/12/2003,513522016.00
QCOM,19/12/2003,465589152.00
KLAC,19/12/2003,461961376.00
IACI,19/12/2003,382417632.00
YHOO,19/12/2003,373904512.00
AMZN,19/12/2003,349336864.00
NXTL,19/12/2003,320663040.00

The results are automatically moved to the destination WL for any 
further use.
Dimitris Tsokakis

--- In amibroker@xxxxxxxxxxxxxxx, "dcrotty2003" <dcrotty2003@xxxx> 
wrote:
> Hi Andrew,
> 
> Yes, I did run the ranking using Turnover=MA(V*C,250) in it.
> 
> Another thing I have just done is run this:
> 
> Filter=MA(V*C,250);
> SetOption("NoDefaultColumns", True);
> AddTextColumn( Name(), "Ticker", 77);
> AddColumn( DateTime(), "        Date        ", formatDateTime);
> AddColumn( Close, "   Close   ", 1.3);
> AddColumn(MA(V*C,250), "Turnover", 1);
> 
> ...on a single date and exported the data to a CSV file and on 
sorted
> the 
> volume top to bottom.
> 
> I compared it with the same date on the ~TurnoverTop200 and the 
> value in the ~TurnoverTop200 would catch around 180 stocks when 
> looking at the volume in the csv file. Thanks.
> 
> Dave
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Andrew Perrin" <adjp@xxxx> 
> wrote:
> > Dave
> > Had to think about this one, I noticed you have used Turnover=MA
> (V*C,250) . This is not the turnover calculation used in the 
initial 
> Ranking AFL, did you modify that ranking calculation as well, if not
> that 
> is the reason for the discrepancy.  It does work for me. 
> > 
> > >BTW I would like to do an Explore on single day (say on
> 01/01/2003) 
> > >using for an example: MA(V*C,250) so I can do a sort in AA to 
see 
> what 
> > >the actual Top 200 stocks symbols were. I've tried a few thing 
but 
> I'm 
> > >not sure how to set it up in the AA and what range to set (ie:
> does it 
> > >need to be back 250 days for the 250 day MA) ?
> > 
> > Just set Range From - 01/01/2003 To - 01/01/2003 and explore.  No 
> you don't have to worry about 250 day MA, Amibroker takes care of
> that 
> for you.
> > 
> > Andrew
> > 
> > 
> >   ----- Original Message ----- 
> >   From: dcrotty2003 
> >   To: amibroker@xxxxxxxxxxxxxxx 
> >   Sent: Sunday, December 21, 2003 8:40 AM
> >   Subject: [amibroker] Re: Top 200 stocks by volume
> > 
> > 
> >   Hi Andrew,
> > 
> >   I just did a simple scan to see exactly how many stocks were
> above 
> the 
> >   turnover formula in the rank code ie:
> > 
> >   Turnover=MA(V*C,250)  >= Foreign("~TurnoverTop200","C");
> >   Buy = 0;
> >   AddToComposite(Turnover, "~StockNum", "X" ); 
> > 
> >   ...I found the number of stocks picked on a day varies between
> 170 
> & 
> >   180 or so, rather then 200. Do you know why this would be? 
Thanks.
> > 
> >   BTW I would like to do an Explore on single day (say on
> 01/01/2003) 
> >   using for an example: MA(V*C,250) so I can do a sort in AA to 
see 
> what 
> >   the actual Top 200 stocks symbols were. I've tried a few thing
> but 
> I'm 
> >   not sure how to set it up in the AA and what range to set (ie:
> does it 
> >   need to be back 250 days for the 250 day MA) ?
> > 
> >   Dave
> > 
> > 
> > 
> >   --- In amibroker@xxxxxxxxxxxxxxx, "Andrew Perrin" <adjp@xxxx> 
> >   wrote:
> >   > Dave
> >   > Good to hear you got it working.  I don't run this exact scan,
> but 
> yes I 
> >   do run a ranking scan daily.  I contributed the Turnover Ranking
> as 
> an 
> >   example,  Perhaps of interest to you was a discussion on 
whether 
> this 
> >   particular formula for turnover was the best as opposed to MA(V 
* 
> >   Close ,sov1). 
> >   > see http://groups.yahoo.com/group/amibroker-ts/message/596 
> for 
> >   this discussion
> >   > >Just add MA(V,sov1) * Close >= foreign
> >   > >("~Top200Vol","C"); to my system and that's it. Does that
> sound 
> OK?
> >   > What you suggest sounds right to me
> >   > Andrew
> >   > 
> >   > 
> >   >  
> >   > 
> >   > ----- Original Message ----- 
> >   >   From: dcrotty2003 
> >   >   To: amibroker@xxxxxxxxxxxxxxx 
> >   >   Sent: Saturday, December 20, 2003 4:22 PM
> >   >   Subject: [amibroker] Re: Top 200 stocks by volume
> >   > 
> >   > 
> >   >   Andrew,
> >   > 
> >   >   Excellent!! :-) got it going, thanks for your time and your
> code. I 
> >   didn't 
> >   >   understand how it worked and now that I see it on a chart, 
I 
> doesn't 
> >   >   look like it's necessary to do it month by month as I
> mentioed in 
> my 
> >   >   previous post. Just add MA(V,sov1) * Close >= foreign
> >   >   ("~Top200Vol","C"); to my system and that's it. Does that
> sound 
> OK?
> >   > 
> >   >   Do you run this daily prior to Scaning for signals?
> >   > 
> >   >   Thanks again.
> >   >   Dave
> >   > 
> >   > 
> >   >   --- In amibroker@xxxxxxxxxxxxxxx, "Andrew Perrin" 
> <adjp@xxxx> 
> >   >   wrote:
> >   >   > Dave
> >   >   > to use this AFL, you need to set the APPLY TO -> CURRENT 
> >   >   STOCK       not Filter -> Watchlist -> 1000 stocks.  For 
the 
> current 
> >   stock 
> >   >   selected it is best to use a stock with no data holes ( I 
use
> an 
> >   INDEX ).  
> >   >   I've copied a snippet of code from the AFL below, this is
> what I 
> tried 
> >   to 
> >   >   explain in first comment.  Under user variables are
> >   >   > sWatchlist = 4;  This is the watchlist you want to scan 
not 
> write 
> >   >   results to.  Set this to whatever you mistakenly set the
> filter to 
> >   initially.
> >   >   >  Rank_No = 200;  This is the depth you want to rank to ie.
> the 
> >   200th 
> >   >   highest rank value will be added to the AddToComposite.
> >   >   > 
> >   >   > // 
> >   >   
> >   
> ****************************************************
> >   >   ************
> >   >   > // APPLY TO - CURRENT STOCK - Set to an index (no data 
> holes).
> >   >   > // RANGE - FROM - "set date" TO - "set date",
> >   >   > // SCAN or EXPLORE
> >   >   > // 
> >   >   
> >   
> ****************************************************
> >   >   ************
> >   >   > osInitialize();
> >   >   > #pragma nocache
> >   >   > //#include "afl/AP_Functions.afl";
> >   >   > //////////////////////////////////////////////////
> >   >   > // User Variables - enter here //
> >   >   > /////////////////////////////////////////////////
> >   >   > sWatchlist = 4; // set to desired watchlist.
> >   >   > Rank_No = 100; // set the depth to rank to.
> >   >   > 
> >   >   > 
> >   >   > Hope this Helps,  any problems just ask
> >   >   > 
> >   >   > Andrew
> >   >   >   ----- Original Message ----- 
> >   >   >   From: dcrotty2003 
> >   >   >   To: amibroker@xxxxxxxxxxxxxxx 
> >   >   >   Sent: Saturday, December 20, 2003 9:50 AM
> >   >   >   Subject: [amibroker] Re: Top 200 stocks by volume
> >   >   > 
> >   >   > 
> >   >   >   Hi Andrew, thanks for your reply.
> >   >   > 
> >   >   >   Re: Add To Composite RankValue based on Ranking 
> calculation.
> >   >   > 
> >   >   >   Using the code in the message you wrote, I believe I
> could 
> use 
> >   the 
> >   >   >   composite value as a filter in my systems backtest.
> >   >   > 
> >   >   >   I could run the top 200 volume code over each month for
> the 
> last
> >   >   >   couple of years, setting up watchlists/composites to use
> in 
> >   >   backtesting. 
> >   >   > 
> >   >   >   Then in my system, add a date function for each of the 
> months 
> >   >   >   composites as a volume filter for backtesting over the
> 1000 
> >   stocks.
> >   >   > 
> >   >   >   ie:
> >   >   >   IIf(Year()==2003 AND Month()==11,MA(V,sov1) * Close >= 
> >   foreign
> >   >   >   ("~Top200Vol_11_2003","C"),
> >   >   >   IIf(Year()==2003 AND Month()==12,MA(V,sov1) * Close >= 
> >   foreign
> >   >   >   ("~Top200Vol_12_2003","C"),    
> >   >   > 
> >   >   >   ....etc etc etc 
> >   >   > 
> >   >   >   Nothing's never that easy is it!! ...hoping for a 
simpler
> way.
> >   >   > 
> >   >   >   Anyway down to business :-) I've downloaded the Osaka
> plug-
> in 
> >   and 
> >   >   run 
> >   >   >   the code on a watchlist of 1000 stocks. I get the
> composite 
> come 
> >   up 
> >   >   >   with zero and nothing in my watchlist 4. In the AA
> results all 
> the
> >   >   >   Rank Values are zero.
> >   >   > 
> >   >   >   Any idea what I could be doing wrong? I'm selecting 
Apply
> to -
> >
> >   >   >   Filter -> Watchlist -> 1000 stocks and setting the date
> to the 
> last 
> >   >   >   months worth. I'm using AB Version 4.5.6 and I guess
> there's 
> >   nothing
> >   >   >   to setup in the Settings?
> >   >   > 
> >   >   >   Thanks, Dave
> >   >   > 
> >   >   > 
> >   >   >   --- In amibroker@xxxxxxxxxxxxxxx, "Andrew" 
> <a.perrin@xxxx> 
> >   >   wrote:
> >   >   >   > Dave
> >   >   >   > Take a look at messages 50428 and 50457.  They might 
be 
> >   what 
> >   >   you 
> >   >   >   want
> >   >   >   > 
> >   >   >   > Andrew
> >   >   >   > 
> >   >   >   > --- In amibroker@xxxxxxxxxxxxxxx, "dcrotty2003" 
> >   >   >   <dcrotty2003@xxxx> 
> >   >   >   > wrote:
> >   >   >   > > Hi Mark, and thanks for the reply.
> >   >   >   > > 
> >   >   >   > > Sounds a bit tricky, I have no knowledge of JScript.
> >   >   >   > > 
> >   >   >   > > Would anyone have already coded something similar 
in 
> >   JScript 
> >   >   that 
> >   >   >   > > Mark suggested and I may be able to modify it.
> >   >   >   > > 
> >   >   >   > > Otherwise, any other suggestions on how to do it? 
> Thanks.
> >   >   >   > > 
> >   >   >   > > Dave
> >   >   >   > > 
> >   >   >   > > --- In amibroker@xxxxxxxxxxxxxxx, "Mark H" 
> >   >   <amibroker@xxxx> 
> >   >   >   wrote:
> >   >   >   > > > I haven't tried that, but based on what I read in
> the 
> help 
> >   file, 
> >   >   >   > > you can do an automatic script to accomplish that.
> >   >   >   > > > 
> >   >   >   > > > 1. load the explore formula and settings
> >   >   >   > > > 2. invoke the explore
> >   >   >   > > > 3. save the results to a file
> >   >   >   > > > 4. read the file and choose the top 200 tickers
> >   >   >   > > > 5. clear existing watchlist
> >   >   >   > > > 6. set the 200 tickers to watchlist
> >   >   >   > > > 
> >   >   >   > > > You can even add the backtest steps:
> >   >   >   > > > 
> >   >   >   > > > 7. load the backtest formula and settings
> >   >   >   > > > 8. invoke the backtest
> >   >   >   > > > 9. save the reports to files.
> >   >   >   > > > 
> >   >   >   > > > All these can be done in JScript. After that, the
> whole 
> >   process 
> >   >   >   > is 
> >   >   >   > > just one click away.
> >   >   >   > > > 
> >   >   >   > > > - Mark H.
> >   >   >   > > >   ----- Original Message ----- 
> >   >   >   > > >   From: dcrotty2003 
> >   >   >   > > >   To: amibroker@xxxxxxxxxxxxxxx 
> >   >   >   > > >   Sent: Thursday, December 18, 2003 4:51 PM
> >   >   >   > > >   Subject: [amibroker] Top 200 stocks by volume
> >   >   >   > > > 
> >   >   >   > > > 
> >   >   >   > > >   Hi,
> >   >   >   > > > 
> >   >   >   > > >   From a newbie EOD trader. Instead of 
backtesting 
> using 
> >   >   todays 
> >   >   >   > > index, 
> >   >   >   > > >   is it possible to create a daily list of 200 
only
> stocks 
> from 
> >   >   >   > a 
> >   >   >   > > list 
> >   >   >   > > >   of 1000 filtered by moving average volume and 
my 
> >   system 
> >   >   >   > > backtested on 
> >   >   >   > > >   this list?
> >   >   >   > > > 
> >   >   >   > > >   I know I could do an explore to pick out the top
> 200 
> and 
> >   >   save 
> >   >   >   > it 
> >   >   >   > > to a 
> >   >   >   > > >   watchlist then backtest on the list, but I want
> the list 
> to 
> >   be 
> >   >   >   > > >   changed everyday within the backtest.
> >   >   >   > > > 
> >   >   >   > > >   I don't want if using the rank function to only
> buy top-
> >   down 
> >   >   >   > > stocks 
> >   >   >   > > >   with the highest volume but to buy any of the 
200 
> >   selected 
> >   >   >   > stocks.
> >   >   >   > > > 
> >   >   >   > > >   Thanks for any help.
> >   >   >   > > > 
> >   >   >   > > >   Dave
> > 
> > 
> > 
> >   Send BUG REPORTS to bugs@xxxx
> >   Send SUGGESTIONS to suggest@xxxx
> >   -----------------------------------------
> >   Post AmiQuote-related messages ONLY to: 
> amiquote@xxxxxxxxxxxxxxx 
> >   (Web page: http://groups.yahoo.com/group/amiquote/messages/)
> >   --------------------------------------------
> >   Check group FAQ at: 
> http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
> > 
> > 
> > 
> > ------------------------------------------------
> ------------------------------
> >   Yahoo! Groups Links
> > 
> >     a.. To visit your group on the web, go to:
> >     http://groups.yahoo.com/group/amibroker/
> >       
> >     b.. To unsubscribe from this group, send an email to:
> >     amibroker-unsubscribe@xxxxxxxxxxxxxxx
> >       
> >     c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms 
of 
> Service.


Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Yahoo! Groups Links

To visit your group on the web, go to:
 http://groups.yahoo.com/group/amibroker/

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/