2012-02-15 277 views
-1

tr9sh,感谢编辑问题,但我必须澄清我没有要求计算每日回报。我想要的是通过查找日期的行来计算年度回报,而不输入数据的“价格”。公式如下所示:(price(2001/1/20)/ price(2000/1/21) - 1)Matlab:如何计算每种股票的回报率

'n期股票'的收盘价格被导入到Matlab中,如下所示:

2000年1月1日23.4 78.9 ...

2000年1月2日23.3 67.1 ...

...

2001/1/1 23.2 77.1 ...

2001/1/2 24.1 78.1 ...

每列中的数字是每只股票的价格。如果我想计算每个人的年度回报,我的代码应该如何查看?

我已经试过

Return = (filename(find(2001/1/1)),2)/(filename(find(2000/1/1)),2) - 1 
+0

你是说数据是文本文件的形式,每个条目之间有空格吗? – 2012-02-15 13:52:02

+0

对不起,我没有写清楚..没有空间..它在垫子里。格式 – user1205030 2012-02-15 14:22:32

+0

你需要更清楚。如果您在MATLAB中输入'load filename',那么结果是什么?(其中'filename')是.mat文件的名称? – 2012-02-15 14:24:37

回答

0

我不完全知道您想要什么,但以下解决方案可能适用于您。假设你的数据存储在矩阵X中。然后

close = X(:,2:end); 
ret = close(2:end,:) ./ close(1:end-1,:) - 1; 
dates = X(2:end,1); 
+0

其实它解决了我的问题。谢谢! – user1205030 2012-02-15 15:10:45

+0

很酷。现在,如果我能让你做我(和你自己)的忙 - 坐下来,并确保你明白*为什么这段代码适合你。从长远来看,这会更好! – 2012-02-15 15:20:24

+0

代码没有直接解决我的问题,但它确实帮助我理解并完成了工作。谢谢你的帮助 :) – user1205030 2012-02-15 18:05:29

1

你正在尝试使用“查找”的字符串。下一次尝试正则表达式(http://www.mathworks.nl/help/techdoc/ref/regexp.htmlhttp://www.mathworks.nl/help/techdoc/ref/regexpi.html为不区分大小写的变体)

但我会以不同的方式:读取每一行并提取日期和价格。 完成后:在年/月和最后一天搜索日期(存储在单独的数组中,作为数字,而不是字符)。使用找到的索引,以获得相应的价格阵列价格

顺便说一句,你说它存储在一个mat文件?但你的例子更像是一个文本文件? 对于文本文件,最简单的方法是使用scanf(http://www.mathworks.nl/help/techdoc/ref/fscanf.html)函数获取您的数据

+0

这是mat文件,是日期存储为数字......第一列是日期,第二列到第n列是(n-2)个不同股票的价格。我是否必须使用循环来计算每个股票的回报,还是有一个公式?谢谢!! – user1205030 2012-02-15 14:20:21