cumsum that restarts whenever it reaches certain level

조회 수: 1 (최근 30일)
Dam
Dam 2014년 10월 14일
댓글: Dam 2014년 10월 15일
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
  댓글 수: 1
Dam
Dam 2014년 10월 15일
Thank you very much it is really simpler to proceed in this way! regards

댓글을 달려면 로그인하십시오.

추가 답변 (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