原帖地址:
Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本]
http://www.matlabsky.com/thread-38988-1-1.html
==============================
通过访问Yahoo和Sina的URL进行股票数据的提取,其中部分函数的实现是基于 郑志勇兄弟( ariszheng @http://www.ariszheng.com/) 的相关函数进行修改优化而成。
这部分东西一直想抽时间弄来着,这段有点犯懒。O(∩_∩)O
历史数据通过YahooData.m函数实现,访问的Yahoo的URL形式为
- url2Read=sprintf(...
- 'http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=%s&ignore=.csv', StockName, ms, ds, ys, me, de, ye, Freq);
可以获取某一股票的日、周、月 的历史数据。
实时数据通过SinaData.m函数实现,访问的Sina的URL形式为
- url2Read=['http://hq.sinajs.cn/list=',StockCode];
测试脚本 SinaYahooDataTest.m
- %% SinaYahooDataTest
- % by LiYang
- % Email:farutoliyang@gmail.com
- % 2013/11/26
- %% A Little Clean Work
- tic;
- clear;
- clc;
- close all;
- format compact;
- %% 获取历史数据测试
- % 历史数据通过Yahoo接口获得 (历史数据为未复权数据,使用时候请注意)
- % Yahoo中证券代码为 (上海 .ss 深圳 .sz),例如招商银行,600036.ss
- StockName = '600036.ss';
- StartDate = today-200;
- EndDate = today;
- Freq = 'd';
- [DataYahoo, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq);
- % K线展示
- scrsz = get(0,'ScreenSize');
- figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
- Open = DataYahoo(:,2);
- High = DataYahoo(:,3);
- Low = DataYahoo(:,4);
- Close = DataYahoo(:,5);
- MT_candle(High,Low,Close,Open,[],Date_datenum);
- xlim( [0 length(Open)+1] );
- title(StockName);
- %% 获取实时数据测试
- % Sina中证券代码为 (sh. 上海 sz.深圳),例如招商银行sh600036
- StockCode='sh600036';
- [DataSina, DataCell]=SinaData(StockCode);
- DataCell
- %% Record Time
- toc;
- DataCell =
- '招商银行_sh600036' '股票名称代码'
- '2013-11-27' '日期'
- '10:28:22' '时间'
- [ 10.8400] '今开盘'
- [ 10.8300] '昨收盘'
- [ 10.7800] '当前价'
- [ 10.8500] '今最高'
- [ 10.7600] '今最低'
- [ 10.7700] '竞买价,即“买一”报价'
- [ 10.7800] '竞卖价,即“卖一”报价'
- [ 11165602] '成交量,单位“股”'
- [ 120618712] '成交额,单位“元”'
- [ 17119] '买一量'
- [ 10.7700] '买一价'
- [ 348053] '买二量'
- [ 10.7600] '买二价'
- [ 509400] '买三量'
- [ 10.7500] '买三价'
- [ 129800] '买四量'
- [ 10.7400] '买四价'
- [ 236600] '买五量'
- [ 10.7300] '买五价'
- [ 36790] '卖一量'
- [ 10.7800] '卖一价'
- [ 50257] '卖二量'
- [ 10.7900] '卖二价'
- [ 158371] '卖三量'
- [ 10.8000] '卖三价'
- [ 143496] '卖四量'
- [ 10.8100] '卖四价'
- [ 33665] '卖五量'
- [ 10.8200] '卖五价'
- function [Data, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq)
- % by LiYang(faruto) @http://www.matlabsky.com
- % 本函数是基于 ariszheng @http://www.ariszheng.com/ 的相关函数进行修改而成
- % 用来通过Yahoo获取股票历史数据
- % 历史数据通过Yahoo接口获得 (历史数据为未复权数据,使用时候请注意)
- %% 输入参数
- % StockName 证券代码(上海 .ss 深圳 .sz)
- % StartDate, EndDate 时间段的开始日与结束日
- % Freq 频率
- %% 测试函数
- % StockName = '600036.ss';
- % StartDate = today-200;
- % EndDate = today;
- % Freq = 'd';
- % [DataYahoo, Date_datenum, Head]=YahooData(StockName, StartDate, EndDate, Freq);
- %% 数据时间区间
- startdate=StartDate;
- enddate=EndDate;
- %字符串变化
- ms=num2str(str2double(datestr(startdate, 'mm'))-1);
- ds=datestr(startdate, 'dd');
- ys=datestr(startdate, 'yyyy');
- me=num2str(str2double(datestr(enddate, 'mm'))-1);
- de=datestr(enddate, 'dd');
- ye=datestr(enddate, 'yyyy');
- % s: 股票代码 (e.g. 002036.SZ 300072.SZ 600036.SS 等)
- % c-a-b: 起始日期年、月、日 (月份的起始索引为0) 2010-5-11 = 2010年6月11日
- % f-d-e: 结束日期年、月、日 (月份的起始索引为0) 2010-7-23 = 2010年8月23日
- % g: 时间周期。d=每日,w=每周,m=每月,v=只返回除权数据
- % 省略所有参数,只制定股票代码时,返回所有历史数据
- url2Read=sprintf(...
- 'http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=%s&ignore=.csv', StockName, ms, ds, ys, me, de, ye, Freq);
- s=urlread_General(url2Read);
- Head = ['Date Open High Low Close Volume AdjClose'];
- Result=textscan(s, '%s %s %s %s %s %s %s', 'delimiter', ',');
- temp = Result{1,1};
- Date_datestr = temp(2:end);
- Date_datestr = Date_datestr(end:(-1):1);
- temp = Result{1,2};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- Open = temp;
- temp = Result{1,3};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- High = temp;
- temp = Result{1,4};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- Low = temp;
- temp = Result{1,5};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- Close = temp;
- temp = Result{1,6};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- Volume = temp;
- temp = Result{1,7};
- temp = cellfun(@str2double, temp(2:end));
- temp = temp(end:(-1):1);
- AdjClose = temp;
- Date_datenum = datenum(Date_datestr);
- Date_double = str2num( datestr(Date_datenum, 'yyyymmdd') );
- Data = [Date_double, Open, High, Low, Close, Volume, AdjClose];
- end
整理所有函数源码打包下载。
Matlab通过Yahoo与Sina获取历史与实时股票数据[faruto版本]
- urlread_General.m
- urlreadwrite_General.m
- urlwrite_General.m
- YahooData.m
- 1.jpg
- 2.jpg
- SinaData.m
- SinaYahooDataTest.m
- SinaYahooDataTest.pdf
- MT_candle.m