本帖最后由 qdwxzzy 于 2013-7-24 10:48 编辑
在论坛找了些帖子,然后去通达信的网站下载了数据,尝试读取sh000004.day的数据,代码如下
clear all;
fn='sh000004.day';
file_id=fopen(fn,'r');
raw_data = [1:8];
while feof(file_id) == 0
% 这就是大名顶顶的fread了,数据类型是int32,每次读入10个数
% raw_array每次都是10x1的矩阵,ele_count为读入的数的个数(正常情况下应为512)
[row_array, ele_count] = fread(file_id, 8, 'int32') ;
if ele_count < 8 % elecount < 8代表数据不够,已经到了文件的结尾
break ;
else
% 将10x1的row_array转置一下,变为1x512的矩阵
row_array = row_array' ;
% 然后,将row_array追加到raw_data中
raw_data = [raw_data; row_array] ;
end
end
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
raw_data(:,2:5)/100
%创建stockdatainfo。.mat
stockdatainfo(:,1) = raw_data(:,1); %时间
stockdatainfo(:,2:5) = raw_data(:,2:5)/100; %开盘价,最高价,最低价,收盘价
%stockdatainfo(:,6) = raw_data(:,7); %成交量
%stockdatainfo(:,7) = round(raw_data(:,6)/10); %成交额
zzy=[raw_data(:,1),raw_data(:,2),raw_data(:,3),raw_data(:,4),raw_data(:,5)]
% 关闭文件
fclose(file_id);
显示如下,感觉数据不对的样子,有懂的请指点下,比较奇怪的是如果我把开盘价那些都除以100,在显示数据的时候,所有的都变成了小数...
20130624 170756 170761 161778 162293
20130625 161196 162609 151973 161410
20130626 161319 162569 159559 161724
20130627 162131 163940 160462 160725
20130628 159587 163558 158626 162240
20130701 161166 164173 160678 164149
20130702 164158 166201 163216 166144
20130703 165579 166742 163587 166516
20130704 165601 168827 164712 167728
20130705 167464 168935 167041 167489
20130708 165154 165154 162189 162509
20130709 162163 163556 161405 163379
20130710 163122 167311 162848 167255
20130711 167392 172761 167309 171218
20130712 170958 171587 168762 169188
20130715 169319 171496 168940 170803
20130716 170654 171401 169312 171328
20130717 171017 172342 169110 169340
20130718 168846 169278 167008 167947
20130719 168055 169029 165189 165408
20130722 164438 167360 163887 167299
20130723 167721 171216 167422 170769