cumsum that restarts whenever it reaches certain level

1 次查看(过去 30 天)
Good evening I have a matrix A 250*3, i try to do the following: the first time that the cumsum "of raws" is > 0.02 or lower than -0.02, i replace the corresponding value in matrix A with zero and restart the cumsum form the value after the zero. then we repeat this once more: the first time the new cumsum becomes >0.02 or <-0.02 we replace it with zero and restart the cum sum we repeat this untill we arrive to the last raw of the matrix. **with one condition like (cumsum>0.02) i have the following code.. However, i didn't arrive to add the new condition that (cumsum<-0.02).
x = unifrnd(-5,5,[250,2])/100;
cum=cumsum(x);
thresh = 0.02;
while 1
xc = cumsum(x);
k = find(xc > thresh,1,'first');
if isempty(k)
% done
break
end
x(k) = -xc(k-1);
end
Thank you in advance for your help
  2 个评论
Image Analyst
Image Analyst 2014-10-15
Why do you need this unusual thing anyway? Are you sure it's really necessary ?
Dam
Dam 2014-10-15
i m developing a portfolio rebalancing method that sells assets whenever they cumulate 2% of losses and buy assets when they gain 2% "cumulative returns" then repeating this along the investment horizon of for example 1 year(252 days). So, i need to know where the cumulative returns reach 2% ou -2% in order to know the points where to buy and sell assets !!

请先登录,再进行评论。

采纳的回答

Roger Stafford
Roger Stafford 2014-10-15
I think your code only works on one column at a time. It also appears to have the disadvantage that each time your cumulative sum exceeds the threshold, you have to recompute the cumsum for the entire column. I would think a simple for-loop method would be more efficient.
[m,n] = size(A);
for c = 1:n
s = 0;
for r = 1:m
s = s + A(r,c);
if abs(s) > .02
A(r,c) = A(r,c) - s;
s = 0;
end
end
end

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by