21 views (last 30 days)

Show older comments

Hello -

I am fairly new to MATLAB and struggling with a question and not sure where to begin, so I apologize for not having sample code here to start with.

There is a 7524 x 3 matrix m file attached which has columns of: 1) MATLAB date; 2) an asset value; and 3) an asset drawdown stream. Each row is a trading day.

I am trying to do the following:

Loop through each row and find ranges of values between zeros in column 3, given a certain threshold. For example, if the threshold is -.05, I would like to find and assign a variable to this range between zeros (new highs for the asset in column 3). If, between zeros (new highs), there is not a value <= -.05, disregard and move to the next. I would like to assign a unique variable name for all instances that meet this criteria (i.e. instance 1, instance 2, etc...) and then save to disk.

I am struggling thinking through how to accomplish this, so any help would be very appreciated!

Please let me know if further clarification is needed.

Star Strider
on 23 Nov 2019

I am not certain what you want.

Try this:

D = load('spxDrwDwnData.mat');

A = D.spxDrwDwnData;

Thr = -0.05; % Threshold Value

Lv = A(:,3) <= Thr; % Logical Vecttor

TranPos = strfind(Lv.', [0 1])+1; % Transition From Logical 0 To Logical 1

TranNeg = strfind(Lv.', [1 0])+1; % Transition From Logical 1 To Logical 0

for k = 1:numel(TranPos)

Vct{k} = A(TranPos(k):TranNeg(k),1); % Dates Corresponding To Regions Between Zeros

Instance{k} = k*ones(TranNeg(k) - TranPos(k) + 1, 1); % Instance Numbers

end

figure

plot(A(:,1), A(:,3)) % Plot Data

hold on

plot(A(TranPos,1), A(TranPos,3), '+g')

plot(A(TranNeg,1), A(TranNeg,3), '+r')

for k = 1:numel(Vct)

plot(Vct{k}, -Instance{k}*0.01, 'LineWidth',2) % Plot ‘Instance’ Vectors

end

hold off

grid

axis([726790 727200 -0.1 0]) % Zoom For Detail (Optional)

The plot is a graphic depiction of what the code does, with the data yoou provided. See if the ‘Instance’ numbers do what you want them to do.

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

Start Hunting!