本实验为课程设计需求
下载一支股票2020年2月、3月的日线数据,并用MATLAB绘制日K线图,要求绘制5日均线和20日均线。
使用海王星软件导出的股票数据,导出工商银行 (601398)在19.2.21到20.4.14的数据
filename = '.\601398.txt';
[date,data1,data2,data3,data4] = textread(filename,'%s%f%f%f%f%*[^\n]','headerlines',3);
因为要的是2020年2月和3月的数据,匹配字符串所表示的日期。
%% 处理数据
len = length(date) - 1;
data = [];
% data = [data1(1:len),data2(1:len),data3(1:len),data4(1:len)];
for i = 1:len
t = strsplit(date{i},'/');
if strcmp(t{1},'2020') && (strcmp(t{2},'02') || strcmp(t{2},'03'))
data = [data; data1(i),data2(i),data3(i),data4(i)];
end
end
参考博客http://blog.sina.com.cn/s/blog_6b15ec9e0101iqkn.html
为了用k线图表示开盘价与收盘价之间:升-“红色”、降-“蓝色”、平-“黑色”的关系,需要对数据进行预处理;并且考虑日均线、5日均线、10日均线的区别要处理日期带来的改变。单独写一个函数
function [data2, data3, data4] = daysPlot(data, day)
% 查找二维数组的鞍点(行中最大、列中最小的点)
% Inputs:
%
% Optional Inputs:
% ... ... ...
%
% Outputs:
%
% Example:
% ... ... ...
%
% See also ... ... ...
%
% Copyright 2020-2020 ... ... ...
% $Revision: 1.0.0.0 $ $Date: 2020/04/14 19:05:00 $
%
% 其它说明:... ... ...
if (nargin<1)
error('需要指定参数:A');
end
if (nargin<2 || isempty(day))
day = 1;
end
%%
temp = [];
len = numel(data(:,1));
for i = 1:floor(len/day)
j = 1;
sumi = [0,0,0,0];
while (i-1)*day+j <= len
sumi = sumi + data((i-1)*day+j, :);
j = j + 1;
end
temp = [temp; sumi/(j-1)];
end
data = temp;
%%
% 处理开盘高于收盘
data2=data;
data2(find(data(:,1)>data(:,4)),:)=0;
% 处理开盘低于收盘
data3=data;
data3(find(data(:,1)
调用上一部的daysPlot
函数
%% 作图
% candle(HI, LO, CL, OP)
% 日均线
[data2, data3, data4] = daysPlot(data, 1);
subplot(1,3,1);
candle(data2(:,2),data2(:,3),data2(:,4),data2(:,1),'b');
hold on
candle(data3(:,2),data3(:,3),data3(:,4),data3(:,1),'r');
hold on
candle(data4(:,2),data4(:,3),data4(:,4),data4(:,1),'k');
ylim([5,5.5]);
% 5日均线
[data2, data3, data4] = daysPlot(data, 5);
subplot(1,3,2);
candle(data2(:,2),data2(:,3),data2(:,4),data2(:,1),'b');
hold on
candle(data3(:,2),data3(:,3),data3(:,4),data3(:,1),'r');
hold on
candle(data4(:,2),data4(:,3),data4(:,4),data4(:,1),'k');
ylim([5,5.5]);
% 10日均线
[data2, data3, data4] = daysPlot(data, 10);
subplot(1,3,3);
candle(data2(:,2),data2(:,3),data2(:,4),data2(:,1),'b');
hold on
candle(data3(:,2),data3(:,3),data3(:,4),data3(:,1),'r');
hold on
candle(data4(:,2),data4(:,3),data4(:,4),data4(:,1),'k');
ylim([5,5.5]);
图形如图所示,从左至右分别为日均线、5日均线、10日均线。