Matlab获取Yahoo Finance 免费数据

来源:互联网 发布:普奇神父知乎 编辑:程序博客网 时间:2024/06/05 06:12

Yahoo和Google免费提供了全球金融市场各种证券的日交易数据。以下以Yahoo Finance为例,演示基于Matlab 的网络免费金融数据获取方法。

编写函数yahooprice.m ,执行以下任务:从yahoo finance网页读书数据,利用textscan进行语法分析,抓取价格数据并输出。函数有三个输入变量:StockName=证券代码,StartDate=数据起始日期,EndDate=数据截止日期。返回三类格式的价格数据,分别为常规数据、dataset数据和fts数据。

代码如下:

function result = yahooprice(StockName,StartDate,EndDate)% Purpose: get Yahoo Finance data% Written by: sundros@163.comresult=[];start_date=datenum(StartDate,'mm/dd/yyyy');end_date=datenum(EndDate,'mm/dd/yyyy');mS= num2str(str2num(datestr(start_date,'mm'))-1);dS= datestr(start_date,'dd');  yS= datestr(start_date,'yyyy');mE= num2str(str2num(datestr(end_date,'mm'))-1);dE= datestr(end_date,'dd'); yE= datestr(end_date,'yyyy');url=sprintf('http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=&ignore=.csv',...StockName, mS, dS, yS, mE, dE, yE);[str status]=urlread(url);if status    data=textscan (str, '%s  %s  %s  %s   %s  %s  %s', 'delimiter', ',');    data=[data{:}];    data=flipdim(data(2:end,:),1);    Date=data(:,1);    Num=str2double(data(:,2:end));    categories={ 'OPEN' 'HIGH' 'LOW' 'CLOSE' 'VOLUME' 'ADJCLOSE'};    fts=fints(Date,Num,categories,[],StockName);    priceset=dataset({Num,categories{:}},'ObsNames',data(:,1));    result.Price=priceset;    result.Date=Date;    result.Num=Num;    result.fts=fts;    fprintf(1,'[%s] download success\n',StockName);else    fprintf(2,'[%s] download error\n',StockName);    return;end


示例:

StockName='000300.ss',StartDate='01/01/2012',EndDate='07/17/2015'result = yahooprice(StockName,StartDate,EndDate)Date=datenum(result.Date);cl=result.Num(:,4);plot(Date,cl)datetick('x',2)title(StockName)xlabel('Date')ylabel('Close')legend('Close','Location','northwest')chartfts(result.fts)






0 0
原创粉丝点击