我是Matlab编程语言的新手。我编写了一个程序,从YahooFinance获取数据并绘制烛台图表,接下来我想计算一个文件中包含的特定烛台的总数。但是我收到错误Attempt to reference field of non-strcture array
。我的目标是计算任何两支看起来像这样的蜡烛:LINK:我不能在这里张贴图片,因为我需要10rep所以我已经上传了我的dropebox
这是我到目前为止所完成的事情:
clear;
close all;
str = urlread('http://ichart.yahoo.com/table.csv?s=AMZN&a=0&b=1&c=2008&d=0&e=31&n=2014&g=d&ignore=.csv');
i = 0;
[dates,o,h,l,c] = dataread('string',str,'%s%f%f%f%f%*f%*f','delimiter',',','headerlines',1);
dates = datenum(dates);
previousDate = dates-1; %start from previous date
curDate = previousDate+1;
if (previousDate (previousDate.o < curDate.o) && (previousDate.c > curDate.c) )
i = i+1;
end
save('output.txt','i','-ASCII');
如果您打开上面的链接,您会看到.csv文件流式传输到您的浏览器,该文件将包含日期,打开,关闭等...下面的任何数据都与标题相关联,例如:
Date,Open,High,Low,Close,Volume,Adj Close
2014-07-18,354.40,359.68,352.08,358.66,3407400,358.66
2014-07-17,353.44,356.96,351.38,352.45,3636000,352.45
2014-07-16,355.62,359.32,353.00,355.90,3503600,355.90
从这里我想要的是读取该文件中所有数据的程序,并计算出这个数据的记录数量:
检查上一个日期,如果上一个日期开盘价小于下一个日期开盘价且前一个日期收盘数据大于下一个日期,则将其记录到一个文件中。现在让我们看看这个实际操作:这是我.csv文件中的历史数据(c / p这个来获取此数据http://ichart.yahoo.com/table.csv?s=AMZN&a=0&b=1&c=2008&d=0&e=31&n=2014&g=d&ignore=.csv
):
Date,Open,High,Low,Close,Volume,Adj Close
2014-07-18,354.40,359.68,352.08,358.66,3407400,358.66
2014-07-17,353.44,356.96,351.38,352.45,3636000,352.45
2014-07-16,355.62,359.32,353.00,355.90,3503600,355.90
首先,我告诉我的程序前两行:
Date,Open,High,Low,Close,Volume,Adj Close
2014-07-18,354.40,359.68,352.08,358.66,3407400,358.66 <-- 1st line - this is a second date
2014-07-17,353.44,356.96,351.38,352.45,3636000,352.45 <-- 2nd line - this is previous date
现在检查是上一个日期(2014-07-17)开盘价353.44&lt; 354.40&amp;&amp;收盘价352.45&gt; 358.66(上一个日期)然后将其记录到文件(1)中,现在进入第二行,即:
现在做同样的事情,如果条件匹配,则将其记录在文件(2)中。继续这样做,直到程序到达文件末尾。
2014-07-17,353.44,356.96,351.38,352.45,3636000,352.45
2014-07-16,355.62,359.32,353.00,355.90,3503600,355.90
如果这仍然令人困惑,请告诉我!