用matlab获取yahoo数据库中的股票数据
注意了,由于数据库问题,有些股票的数据是调用不出来的呃,比如:
>>
data2=fetch(y,'002056.ss','CLose','1/1/2011','1/25/2013');
??? Error using ==> yahoo.fetch at 363
Unable to return historical data for given security.
当调用002056时,提示出错;
另外,时间设置也是非常麻烦,有时候时间不变,换成另外一只股票代码后,提出出错;有时同一只股票,换了时间区间,也会出错,搞不懂,建议大家只做参考。
调用语句:
data = fetch(Connect, 'Security')
显示最近的交易日的数据,并且显示数据的各个字段,包括股票名称、收盘价、日期、时间、改变量、开盘价、最高价、最低价、成交量。
例:
y = yahoo;
K>> data=fetch(y,'000001.ss')
data =
Symbol:
{'000001.SS'}
Last: 2328.3
Date: 735315
Time: 0.12569
Change:
4.036
Open:
2321.4
High: 2332
Low: 2315
Volume:
101167296
对上面的日期和时间转化为字符型的时间为
K>> datestr(735315.12569)
ans =
22-Mar-2013 03:00:59
data = fetch(Connect, 'Security', 'Date')
例子
y = yahoo;
data = fetch(Connect, 'Security', 'Fields')
K>>
data=fetch(y,'000001.ss','open')
data =
open:
2328.3
data = fetch(Connect, 'Security', 'Fields',
'Date')
例子
y = yahoo;
K>>
data=fetch(y,'000001.ss','open','25-Jan-2013')
data =
7.3526e+005 2291.3
data = fetch(Connect, 'Security', 'FromDate',
'ToDate')
y = yahoo;
K>> data=fetch(y,'000001.ss','15-Jan-2013','25-Jan-2013')
data =
7.3526e+005 2291.3 2291.3 2291.3 2291.3 0 2291.3
7.3526e+005 2302.6 2302.6 2302.6 2302.6 0 2302.6
7.3526e+005 2320.9 2320.9 2320.9 2320.9 0 2320.9
7.3526e+005 2315.1 2315.1 2315.1 2315.1 0 2315.1
7.3526e+005 2328.2 2328.2 2328.2 2328.2 0 2328.2
7.3525e+005 2317.1 2317.1 2317.1 2317.1 0 2317.1
7.3525e+005 2284.9 2284.9 2284.9 2284.9 0 2284.9
7.3525e+005 2309.5 2309.5 2309.5 2309.5 0 2309.5
7.3525e+005 2325.7 2325.7 2325.7 2325.7 0 2325.7
data = fetch(Connect, 'Security', 'Fields', 'FromDate',
'ToDate')
y = yahoo;
K>>
data=fetch(y,'000001.ss',{'close','open'},'15-Jan-2013','25-Jan-2013')
data =
7.3526e+005 2291.3 2291.3
7.3526e+005 2302.6 2302.6
7.3526e+005 2320.9 2320.9
7.3526e+005 2315.1 2315.1
7.3526e+005 2328.2 2328.2
7.3525e+005 2317.1 2317.1
7.3525e+005 2284.9 2284.9
7.3525e+005 2309.5 2309.5
7.3525e+005 2325.7 2325.7
data = fetch(Connect, 'Security', 'FromDate', 'ToDate',
'Period')
y = yahoo;
K>>
data=fetch(y,'000001.ss',{'close','open'},'15-oct-2013','25-Jan-2013','w')
data =
7.3531e+005 2257.4 2240
7.353e+005 2278.4 2310.6
7.353e+005 2318.6 2273.4
7.3529e+005 2359.5 2325.8
7.3528e+005 2314.2 2421.6
7.3527e+005 2432.4 2428.2
7.3526e+005 2419 2346.5
7.3526e+005 2291.3 2291.3
输入参数详解:
Connect:数据调用的数据库链接对象,这里为“yahoo”
Security:单个字符或者包含多个字符的数组,代表yaohoo服务器可以识别的证券名称,这里要以'000001.ss'的形式进行输入。
注意:Yahoo不支持一次获得多个证券历史数据,只能一次获得一个证券的历史数据。
Fields:证券数据的变量名字段,包括开盘价、收盘价、最高价、最低价、时间、成交量等,离当前时间最近的日期支持的字段有:
· 'Symbol' 股票名称
· 'Last' 截至到目前证券收盘价,有此选项的函数返回一个结构变量。
· 'Date' 日期
· 'Time' 时间
· 'Change' 改变量(相对前一交易日)
· 'Open' 开盘价
· 'High' 当日最高价
· 'Low' 自低价
· 'Volume' 成交量
其中Yahoo数据库中历史数据支持的部分字段为:
· 'Close' 收盘
· 'Date' 日期
· 'High' 最高价
· 'Low' 最低价
· 'Open' 开盘价
· 'Volume' 成交量
·
'Adj Close' 调整后的收盘价
注意:Yahoo支持的全部字段可以通过函数yhfields.mat查询。
Date:具体的某一时间,函数将返回这一时间的数据,如果这一天没开盘,则会出错。
K>>
data=fetch(y,'000001.ss','26-Jan-2013')
??? Error using ==> yahoo.fetch at 296
Unable to return data for given security and date.
FromDate:数据的起始时间点。数据格式与函数datestr
和datenum支持的类型一样。
ToDate:数据的终点时间。
Period:数据的时间类型,包括:
· 'd': daily
日度数据
· 'w':
weekly 周数据
· 'm': monthly 月度数据
· 'v': dividends 股息日数据
·
注意:
1.只要没有输入具体日期,函数都是返回最近一个日期的数据,以结构变量的形式保存。此时输出包括Symbol、last、date、time、change、open、high、low、volume:
K>> data=fetch(y,'000001.ss')
data =
Symbol:
{'000001.SS'}
Last: 2328.3
Date: 735315
Time: 0.12569
Change:
4.036
Open: 2321.4
High: 2332
Low: 2315
Volume: 101167296
2.只要没有指定字段,函数将返回多个字段的数据。
K>>
data=fetch(y,'000001.ss','1/22/2013')
data =7.3526e+005 2315.1 2315.1 2315.1 2315.1 0 2315.1
3.
“Last”表示离当前最近的证券收盘价,因此,其时间已经是默认的设置了,所以,不能再次输入日期,如果同时输入日期,则会出错;而close是某一时期的证券收盘价,这个时间必须由用户输入,否则会出错。
例如:
有具体日期时,输入Last时出错。
K>>
data=fetch(y,'000001.ss',{'Last','open'},'1/22/2013')
??? Error using ==>
yahoo.fetch>isdatafield at 519
Current data field specified but historical data requested.
Error in ==> yahoo.fetch at 63
elseif isdatafield(varargin{1},numinputs)
没有具体日期,用Close时,出错。
K>>data=fetch(y,'000001.ss','Close')
??? Error using ==>
yahoo.fetch>isdatafield at 519
Historical data field specified but current data requested.
Error in ==> yahoo.fetch at 63
elseif isdatafield(varargin{1},numinputs)
4.当时间输入的是区间时,没开盘的日期直接跳过。
K>>
data=fetch(y,'000001.ss','1/22/2013','1/29/2013')
data =
7.3526e+005 2359 2359 2359 2359 0 2359
7.3526e+005 2346.5
2346.5 2346.5 2346.5 0 2346.5
7.3526e+005 2291.3 2291.3 2291.3 2291.3 0 2291.3
7.3526e+005 2302.6
2302.6 2302.6 2302.6 0 2302.6
7.3526e+005 2320.9 2320.9 2320.9 2320.9 0 2320.9
7.3526e+005 2315.1
2315.1 2315.1 2315.1 0 2315.1
K>> datestr(data(:,1))
ans =
29-Jan-2013
28-Jan-2013
25-Jan-2013
24-Jan-2013
23-Jan-2013
22-Jan-2013