【问题标题】:candlestick chart in matlabmatlab中的烛​​台图
【发布时间】:2013-12-06 14:55:49
【问题描述】:

我有一个 .csv 文件,其中包含一些数据,例如日期(30/10/2013),closePrice(361.08),volume(4500014),openPrice(362.62),highPrice(365),lowPrice(358.65)。该文件包含 2510X6 的数据,我想绘制一个烛台图,有人可以帮我吗?这就是我所做的:

fid = fopen('Amazon.csv');
HDRS = textscan(fid,'%s %s %s %s %s %s',1, 'delimiter',',');
DATA = textscan(fid,'%s %f %f %f %f %f','delimiter',',');
fclose(fid);
outCell = cell(size(DATA{1},1), length(HDRS));

for i = 1:length(HDRS);
    if isnumeric(DATA{i});
        outCell(:,i) = num2cell(DATA{i});
    else
        outCell(:,i) = DATA{i};
    end
end

 candle (outCell{:,5}, outCell{:,6}, outCell{:,2}, outCell{:,4}, 'b', outCell{:,1}); 

运行文件时,我收到一条错误消息Error using candle Too many input arguments。我正在使用数组单元格,因为我有日期并将日期转换为向量我决定使用数组单元格。

【问题讨论】:

    标签: matlab vector plot candlestick-chart


    【解决方案1】:

    我找到了以下方法:

    首先,我观察到您需要列向量格式的日期,而不是cell。实现这一点的唯一方法是将日期转换为某种数字表示。这正是datenum 所做的。示例如下:

    DateString = '11/12/2013';
    formatIn = 'mm/dd/yyyy';
    datenum(DateString,formatIn)
    
    ans = 
    
      735550
    

    以这种格式转换所有日期。接下来,我觉得如果你构造时间序列对象,那么像here所示那样绘制会容易得多。这需要一个金融时间序列对象才能工作。没问题。它可以按here 所示构造。在这种情况下,我相信它可以构造为(虚拟示例):

     dates={'11/12/2013';'11/13/2013'}
     higPrice=[100;100]
     lowPrice=[10;10]
     closePrice=[90;80]
     openPrice=[80;70]
    
     %construct a financial time series object
     tsobj = fints(datenum(dates,formatIn), [higPrice lowPrice closePrice openPrice], {'high','low','close','open'})  %put in correct order
    
     candle(tsobj);  %I get the plot
    

    编辑:我忘了提到,如果我尝试给出除'high','low','open','close' 之外的任何其他名称,它就不起作用。例如,我尝试使用'highPrice','lowPrice','openPrice','closePrice'。我不知道这是什么原因,因为我也是第一次使用candle

    【讨论】:

      【解决方案2】:

      大括号取消引用,如您对candle 的调用中的outCell{:, 5},扩展为Matlab 所谓的“逗号分隔列表”。每当您看到大括号取消引用时,您可以认为它完全等同于输入隐含的单独元素,用逗号分隔 --- 所以如果 size(outCell, 1) 是 3,那么这就好像您输入了 @ 987654324@。这是candle三个输入参数,你以为你只传递了一个。

      我对@9​​87654326@ 本身不熟悉,但是如果它想要一个单列元胞数组作为它的第一个参数,那么从outCell 中得到一个单列元胞数组的方法是用普通切片圆括号解引用:outCell(:, 5)

      另一方面,如果candle 想要一个数字 向量而不是元胞数组,您可以说cell2mat(outCell(:, 5))。另一种方式(第二个例子是大括号取消引用和逗号分隔列表的力量变得明显)是说[outCell{:, 5}]' - 这是一个逗号分隔的列表,包含在方括号内,这意味着水平串联元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多