【问题标题】:Matlab: How to calculate return for every stockMatlab:如何计算每只股票的收益
【发布时间】:2012-02-15 13:21:16
【问题描述】:

tr9sh,感谢您编辑问题,但我必须澄清我没有要求计算每日回报。我想要的是通过在不输入数据 'price' 的情况下定位日期行来计算年回报率。公式如下所示:(price(2001/1/20)/price(2000/1/21) - 1)

“n期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

【问题讨论】:

  • 你是说数据是文本文件的形式,每个条目之间有空格?
  • 对不起,我没有写清楚..没有空格..它在垫子里。格式
  • 你需要更清楚。如果在 MATLAB 中输入load filename(其中filename)是.mat 文件的名称,结果是什么?
  • 是的,它是 .mat 文件。第一列是日期,“2nd to n”列是 (n-2) 种不同股票的价格
  • 输入load filename会有什么结果?

标签: matlab stock


【解决方案1】:

我不太清楚您想要什么,但以下解决方案可能适合您。假设您的数据存储在矩阵X 中。那么

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

【讨论】:

  • 酷。现在,如果我能让你帮我(和你自己)一个忙——坐下来,确保你理解为什么这段代码对你有用。从长远来看会更好!
  • 代码并没有直接解决我的问题,但它确实帮助我理解并完成工作。感谢您的帮助:)
【解决方案2】:

您正在尝试对字符串使用“查找”。下次尝试正则表达式(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) 函数来获取数据

【讨论】:

  • 它是 mat 文件,是的,日期存储为数字...第一列是日期,第二列到 n 列是 (n-2) 个不同股票的价格。我是否必须使用循环来计算每只股票的回报,还是有公式?谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2019-09-27
  • 1970-01-01
  • 2021-01-08
相关资源
最近更新 更多