楼主: cgaboyma
3980 7

[原创博文] 请大家帮我看看程序(下载yahoo finance) [推广有奖]

  • 0关注
  • 0粉丝

初中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
101 点
帖子
8
精华
0
在线时间
19 小时
注册时间
2009-6-12
最后登录
2013-12-8

楼主
cgaboyma 发表于 2012-9-10 11:40:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我需要下载从yahoo finance上下载daily stock的数据,包括所有上市公司在DASDQ,NYSE and AMEX。我有一个file里包含了所以的stock symbols,但是有一个难题解决不了。

%macro a (symbols= );

filename in url "http://finance.yahoo.com:80/d/quotes.txt?s=&symbols.&f=sd1t1l1c1oaba5b6j1pv&e=.txt)";
options nodate nonumber nocenter ls=70;
data d;
infile in dsd end=eof termstr=crlf;
input Ticker : $4. TradeDate : $10. TradeTime: $7. Price Change Open ask bid asksize bidsize mktcap pre_close Volume;
run;
%mend a;
%a (symbols=YHOO+IBM+HPQ);

macro里的symbols 我需要写成 A+B+C+....., 有7000多个symbol,我希望可以写个程序把file的里的股票代码自动用加号的形式写出来,每一次不总数不超过1000个。

哪位大牛能指点一下,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Finance Financ Nance YAHOO Finan 上市公司 finance symbols yahoo 程序

沙发
cgaboyma 发表于 2012-9-11 01:11:12
ding

藤椅
bobguy 发表于 2012-9-13 10:43:04
See my post at the link below,
https://bbs.pinggu.org/thread-1303528-1-1.html

板凳
cgaboyma 发表于 2012-9-14 23:38:10
谢谢ls的大牛,看过您之前的帖子。我对您那个帖子里的时间设定有些问题。因为我每天都要update,所以时间end date想设定为(today),begin date想设定为today的前10天。如果这样,怎么样修改您的程序。

报纸
bobguy 发表于 2012-9-15 10:02:26
Change it as below,

data _null_;
  stkname='bidu';
  startdate=today( ) - 10;
  enddate=today( );
  
  ***********do not edit***********************;
  stkname=upcase(stkname);
  m1=month(startdate)-1;
  d1=day(startdate);
  y1=year(startdate);
  m2=month(enddate)-1;
  d2=day(enddate);
  y2=year(enddate);
  filen=catt('filename mkt URL ', "'",'http://table.finance.yahoo.com:80/table.csv?s=',stkname,
             '&a=',m1,'&b=',d1,'&c=',y1,'&d=',m2,'&e=',d2,'&f=',y2,'&g=d',"';");
  call execute( filen);
  call execute(  'data ' || stkname || ';') ;
  call execute(  'length Stkname $4 Date 8 Day $3 Open High Low Close Volume 8;');
  call execute(  "infile mkt dlm=',' firstobs=2;");
  call execute(  "input Date yymmdd10. Open High Low Close Volume; ");
  call execute(  "stkname='" || stkname || "';");
  call execute(  "Day=upcase(strip(put(date, weekdatx.)));");
  call execute(  "format Date date9. Volume comma11.;run;");
  run;

  

  proc print;run;

地板
cgaboyma 发表于 2012-9-18 07:11:20
bobguy 发表于 2012-9-15 10:02
Change it as below,

data _null_;
FILENAME NASDQ URL 'http://www.nasdaqtrader.com/dynamic/SymDir/nasdaqlisted.txt';

DATA NASDAQSTOCKLIST;
INFILE NASDQ DELIMITER = '|' MISSOVER LRECL = 128 FIRSTOBS = 2;
LENGTH SYMBOL $5. SECURITYNAME $55. MARKETCATEGORY $15. TESTISSUE $2. FINANCIALSTATUS $2. ROUND $2.;
INPUT SYMBOL $ SECURITYNAME $ MARKETCATEGORY ~ TESTISSUE $ FINANCIALSTATUS $ ROUND $;
RUN;

data NASDAQSTOCKLIST;
        set NASDAQSTOCKLIST;
        where index (symbol, "AA")>0;
run;

DATA _NULL_;
SET NASDAQSTOCKLIST;

edte=today();
bdte=edte-10;
eday=day(edte);
emnth=month(edte);
eyr=year(edte);
bday=day(bdte);
bmnth=month(bdte);
byr=year(bdte);
CALL EXECUTE("filename "||Symbol||" url '"||'http://ichart.finance.yahoo.com/table.csv?s='
||compress(Symbol)||'&d='||strip(emnth)||'&e='||strip(eday)||'&f='||strip(eyr)||'&g=d&a='||strip(bmnth)||'&b='||strip(bday)
||'&c='||strip(byr)||'&ignore=.csv'||"' DEBUG;");

CALL EXECUTE("data "||Symbol||";");
CALL EXECUTE("infile "||Symbol||" dsd lrecl = 128 firstobs = 2;");
CALL EXECUTE("informat Date yymmdd10.;");
CALL EXECUTE("input Date Open High Low Close Volume AdjClose;");
CALL EXECUTE("format Date yymmdd10.;");
CALL EXECUTE("RUN;");
RUN;

PROC SQL;
DROP TABLE NASDAQSTOCKLIST;
QUIT;
PROC CONTENTS DATA = WORK._ALL_ OUT = CONTENTS NOPRINT;RUN;
PROC SORT DATA = CONTENTS(WHERE = (NOBS > 1000) KEEP = MEMNAME NOBS) NODUPKEY; BY MEMNAME; RUN;
DATA _NULL_; SET CONTENTS;
CALL EXECUTE("PROC SORT DATA = "||MEMNAME||"(KEEP = DATE CLOSE);");
CALL EXECUTE("BY DATE;RUN;");
RUN;
DATA _NULL_; SET CONTENTS END = EOF;
IF _N_ = 1 THEN CALL Execute("DATA OVERALL;MERGE");
CALL EXECUTE(MEMNAME||"(RENAME = (CLOSE = "||MEMNAME||"))");
IF EOF THEN DO; CALL EXECUTE(";BY DATE;RUN;");
END;
RUN;

大牛能帮我看看我上面的code,follow您的方法但是不正确。我想用NASDAQ里面的symbol作为索引然后下载每一个symbol的data,最后合并到一起。谢谢!

7
yugao1986 发表于 2012-9-18 07:58:06
bobguy 发表于 2012-9-15 10:02
Change it as below,

data _null_;
如果是下中国股市的股票,这个stkname该如何赋值呢?单个股票,指数成分股(例如上证50),或者沪深全部A 股?
三人行必有我师

8
bobguy 发表于 2012-9-21 07:55:06
The yahoo web side allows 200 symbols each time.
You can write a macro looping through symbol groups. In this case there are 13 cases. I believe you could do it yourself.

*********************************************************************;

FILENAME NASDQ URL 'http://www.nasdaqtrader.com/dynamic/SymDir/nasdaqlisted.txt';

data nasdaqlisted;
  length Symbol $5;
  infile NASDQ firstobs=2 end=end;
  input;
  Symbol=scan(_infile_, 1, '|');
  group=int(_N_/200);
  if end then do;
   call symputx('n',group);
   delete;
   
end;
run;

%macro symbol(N);

proc sql noprint;
%do i=1 %to &n;
  %global Symbollist&i;
  select Symbol into: Symbollist&i  separated by '+'
   from nasdaqlisted
   where group=&i;
%end;
quit;

%mend;

%symbol(&N);

%macro a (symbols= );

filename in url "http://finance.yahoo.com:80/d/quotes.txt?s=&symbols.&f=sd1t1l1c1oaba5b6j1pv&e=.txt";
options nodate nonumber nocenter ls=70;
data d;
infile in dsd end=eof termstr=crlf;
input Ticker : $4. TradeDate : $10. TradeTime: $7. Price
Change Open ask bid asksize bidsize mktcap pre_close Volume;
run;

%mend a;

%a (symbols=&Symbollist1);
proc print; run;
%a (symbols=&Symbollist2);
proc print; run;
%a (symbols=&Symbollist13);
proc print; run;


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 21:40