matlab fts2mat,[原创]基于MATLAB的通达信股价数据的复权处理(fantuanxiaot版本)

function FT_Candle(hi, lo, cl, op, color, dates, dateform)

%%  Modified by fantuanxiaot

%%  模仿faruto进行修改

%%  以下是一些例子

%   load disney

%   FT_Candle(dis_HIGH(end-20:end),dis_LOW(end-20:end),dis_CLOSE(end-20:end),dis_OPEN(end-20:end))

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end))

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m')

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',dis_nv.dates(end-200:end))

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end))

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',dis_nv.dates(end-200:end),2)

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end)),2)

%   FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end)),17)

%   FT_Candle(dis_HIGH,dis_LOW,dis_CLOSE,dis_OPEN,'m',datestr(dis_nv.dates),17)

%   FT_Candle(dis_HIGH(end-400:end),dis_LOW(end-400:end),dis_CLOSE(end-400:end),dis_OPEN(end-400:end),'m',datestr(dis_nv.dates(end-400:end)),17)

%%  以上是一些例子

%   CANDLE Candlestick chart.

%   CANDLE(HI, LO, CL, OP)

%   CANDLE(HI, LO, CL, OP, COLOR, DATES, DATEFORM)

%   Optional Inputs: COLOR, DATES, DATEFORM

%   Inputs:

%         HI - Column vector of high prices of a security.

%

%         LO - Column vector of low prices of a security.

%

%         CL - Column vector of closing prices of a security.

%

%         OP - Column vector of opening prices of a security.

%   Optional Inputs:

%      COLOR - Three element color vector, [R G B], or a string specifying the

%              color name. MATLAB supplies a default color if none is specified

%              or if it is empty. The default color differs depending on the

%              background color of the figure window. See COLORSPEC in the

%              MATLAB Reference Guide for color names.

%      DATES - Column vector of dates for user specified X-axis tick

%              labels.

%

%   DATEFORM - A scalar dictating the format of the date string tick labels.

%              See DATEAXIS for details on the date string formats.

%

%   See also BOLLING, HIGHLOW, MOVAVG, POINTFIG.

%        Copyright 1995-2006 The MathWorks, Inc.

%        $Revision: 1.9.2.4 [        DISCUZ_CODE_4        ]nbsp;  $Date: 2008/01/10 21:10:22 $

if nargin < 5 || isempty(color)

color ='k';

end

if nargin < 4

error('finance:candle:missingInputs', ...

'Missing high, low, closing, or opening data.')

end

if size(hi, 2) > 1 || size(lo, 2) > 1 || size(cl, 2) > 1 || size(op, 2) > 1

error('finance:candle:invalidInputs', ...

'Please specify input data as column vectors.')

elseif size(hi, 1) ~= size(lo, 1) || size(lo, 1) ~= size(cl, 1) || size(cl, 1) ~= size(op, 1),

error('finance:candle:mismatchInputData', ...

'Number of data must be consistent across inputs.');

end

if nargin == 6 || nargin == 7

%  补充了一下

dates=datenum(dates);

if size(dates, 2) ~= 1

error('finance:candle:invalidDateSize', ...

'DATES must be a column vector.');

elseif size(dates, 1) ~= size(hi, 1)

error('finance:candle:mismatchDatesData', ...

'Number of dates must correspond to number of data.');

end

end

%%  以下作图进行了修改

backg='g';

backr='r';

% Determine if current plot is held or not

if ishold

hldflag = 1;

else

hldflag = 0;

end

m = length(hi(:));

figure(1)

scrsz=get(0,'ScreenSize');

set(figure(1),'Position',[scrsz(3)*0.1 scrsz(4)*0.25 scrsz(3)*0.95 scrsz(4)]*0.7,...

'color','w')

movegui(figure(1),'center')

% Need to pad all inputs with NaN's to leave spaces between day data

tmp = nan;

nanpad = tmp(1, ones(1, m));

hilo = [hi'; lo'; nanpad];

index = 1:m;

indhilo = index(ones(3, 1), :);

plot(indhilo(:), hilo(:), 'color', color)

clpad = [cl(:)';nanpad];

clpad = clpad(:)';

oppad = [op(:)'; nanpad];

oppad = oppad(:)';

% Create boundaries for filled regions

xbottom = index - 0.25;

xbotpad = [xbottom(:)'; nanpad];

xbotpad = xbotpad(:)';

xtop = index + 0.25;

xtoppad = [xtop(:)'; nanpad];

xtoppad = xtoppad(:)';

ybottom = min(clpad, oppad);

ytop = max(clpad, oppad);

% Plot lines between high and low price for day

hold on

% z-data used to stagger layering. This prevents renderer layering issues.

zdata = xtoppad;

zdata(~isnan(zdata)) = .01;

zdata2 = zdata + .01;

% Plot box representing closing and opening price span

% If the opening price is less than the close, box is empty

i = find(oppad(:) <= clpad(:));

boxes(i) = patch([xbotpad(i); xbotpad(i); xtoppad(i); xtoppad(i)],...

[ytop(i); ybottom(i); ybottom(i); ytop(i)], ...

[zdata(i); zdata(i); zdata(i); zdata(i)], ...

backr, 'edgecolor', 'r');

% If the opening price is greater than the close, box is filled

% If the opening price is greater than the close, box is filled

i = find(oppad(:) > clpad(:));

boxes(i) = patch([xbotpad(i); xbotpad(i); xtoppad(i); xtoppad(i)],...

[ytop(i); ybottom(i); ybottom(i); ytop(i)],...

[zdata2(i); zdata2(i); zdata2(i); zdata2(i)], ...

backg, 'edgecolor', 'g'); %#ok

% set tag for use with timeser.m

setappdata(gca, 'plottype', 'Candle ')        % set tag for use with timeser.m

[Highest,hind] = max(hi);

[Lowest,lind] = min(lo);

% If original figure was not held, turn hold off

if ~hldflag

hold off

end

%[EOF]

hold on;

if nargin < 6

text(hind,Highest*1.001,['\leftarrow',num2str(Highest)],'fontname','Times','fontsize',14);

text(lind,Lowest*0.999,['\leftarrow',num2str(Lowest)],'fontname','Times','fontsize',14);

end

if nargin >=6

dateset = dates;

text(dateset(hind),Highest*1.001,['\leftarrow',num2str(Highest)],'fontname','Times','fontsize',14);

text(dateset(lind),Lowest*0.999,['\leftarrow',num2str(Lowest)],'fontname','Times','fontsize',14);

end

% Add support for providing dates.

% Add support for providing dates.

if nargin == 6 || nargin == 7

dateset = dates;

hcdl_vl = findobj(gca, 'Type', 'line');

hcdl_bx = findobj(gca, 'Type', 'patch');

% The CANDLE plot is made up of patch(es) and a line.  hcdl_vl is the

% handle to the vertical lines; it's actually only 1 line object.

% hcdl_bx contains the handle(s) of the patch object(s) that make up the

% empty and filled boxes.  The XData of those objects need to be changed

% to dates so that ZOOM works correctly.

line_xdata = get(hcdl_vl, 'XData');

set(hcdl_vl, 'XData', dateset(line_xdata));

for pidx=1:length(hcdl_bx),   % Need to do loop since there can be 1 or 2 patches.

patch_xdata = get(hcdl_bx(pidx), 'XData');

offset = [-0.25*ones(2, size(patch_xdata, 2)); ...

+0.25*ones(2, size(patch_xdata, 2))] * min(abs(diff(dateset)));

set(hcdl_bx(pidx), 'XData', dateset(round(patch_xdata))+offset);

end

% Change XTickLabel to date string format.

if ~exist('dateform', 'var') || isempty(dateform)

datetick('x',20);

else

datetick('x', dateform);

end

end

set(gca,'fontname','Times','fontsize',10)

hold off

%[EOF]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值