MATLAB Answers

How to create for-loop for this case ?

1 view (last 30 days)
Hannes Arnar
Hannes Arnar on 28 Jan 2020
Commented: Hannes Arnar on 29 Jan 2020
How would you create a for-loop for this case, I want to make the S and C and R jump on 25 days
close all; clear all; clc;
data1 = xlsread('dataCompanyprices','Sheet1','W4:AP1250');
S = std(data1)*sqrt(252); %Standard deviation for assets
C = cov(data1)*252; %Annual Covariance
r = mean(data1)*252; %Annual asset return
e = ones(1,20); %Unit vector

  2 Comments

Geoff Hayes
Geoff Hayes on 28 Jan 2020
Hannes - what do you mean by jump on 25 days? Where would the 0, 25, 50, 75, etc. fit into the above code? In the data1 array?

Sign in to comment.

Answers (1)

Paresh yeole
Paresh yeole on 28 Jan 2020
Referring from your previous question,
I think this is what you need :
for i=1:(no_of_datapoints/25)
S(i) = std(data1(1+(i-1)*25:i*25))*sqrt(252); %Standard deviation for assets
C(i) = cov(data1(1+(i-1)*25:i*25))*252; %Annual Covariance
r(i) = mean(data1(1+(i-1)*25:i*25))*252;
end

  3 Comments

Hannes Arnar
Hannes Arnar on 28 Jan 2020
wont work
Says :
Array indices must be positive integers or logical values.
Paresh yeole
Paresh yeole on 28 Jan 2020
My solution is for a 1-D array of data points. If you have multiple columns, then you need an extra for loop. If I understand correctly,
for j=1:no_of_columns
%rep
data = data1(:,j);
for i=1:(no_of_datapoints/25)
S(i,j) = std(data(1+(i-1)*25:i*25))*sqrt(252); %Standard deviation for assets
C(i,j) = cov(data(1+(i-1)*25:i*25))*252; %Annual Covariance
r(i,j) = mean(data(1+(i-1)*25:i*25))*252;
% here you will get a matrix of all the three values which correspond to set of 25 points
% for every column
end
end
Hannes Arnar
Hannes Arnar on 29 Jan 2020
Ok, I just want to take out of the data set 25 lines in each iteration, I put that in a new array.

Sign in to comment.

Sign in to answer this question.

Products