

Hello,
I have a 200 by 18 array (called num1) and am trying to find some values
that meet certain criteria.
What I am hoping to do is
1. Starting from i=1, If num1(i, 15) is positive
2. starting j=i,see if num1 (j, 18) is positive. If negative, increase i
by 1 and repeat.
3. If positive, increase j by 1 until num1 (j, 18) is negative . Let's call
this num (m, 18)
4. Record values in other columns at rows j and m.
5. The next scan starts from i=m until length(num1) is complete.
Below is what I have. Say num1 was positive at (2, 18) and turns negative at
(5, 18), instead of keeping only Rows 2 and 5 for the buydate, buyprice,
selldate, sellprice, the code records values at rows 2,3,4, 5 and moves on.
Please let me know where in the loop is not coded correctly.
for i=i:length(num1)
if num1(i, 15)>0 ##15 = 120 day derivative %
j=i
for j=j:length(num1)
if num1 (j, 18)>0
m=j+1;
for m=m:length(num1)
if num1(m,18)<0
buydate(k,1)=num1(j,1); ## 1 = date
buyprice(k,1)=num1(j,5); ## 5 = close price
selldate(k,1)=num1(m,1); ## 1 = date
sellprice(k,1)=num1(m,5); ## 5 = close price
k=k+1;
i=m+1;
break;
else
m=m+1;
endif
endfor
break;
else
j=j+1;
endif
endfor
endif
endfor

Sent from: https://octave.1599824.n4.nabble.com/OctaveGeneralf1599825.html


Hello,
I have a 200 by 18 array (called num1) and am trying to find some values
that meet certain criteria.
What I am hoping to do is
1. Starting from i=1, If num1(i, 15) is positive
2. starting j=i,see if num1 (j, 18) is positive. If negative, increase i
by 1 and repeat.
3. If positive, increase j by 1 until num1 (j, 18) is negative . Let's call
this num (m, 18)
4. Record values in other columns at rows j and m.
5. The next scan starts from i=m until length(num1) is complete.
Below is what I have. Say num1 was positive at (2, 18) and turns negative at
(5, 18), instead of keeping only Rows 2 and 5 for the buydate, buyprice,
selldate, sellprice, the code records values at rows 2,3,4, 5 and moves on.
Please let me know where in the loop is not coded correctly.
for i=i:length(num1)
if num1(i, 15)>0 ##15 = 120 day derivative %
j=i
for j=j:length(num1)
if num1 (j, 18)>0
m=j+1;
for m=m:length(num1)
if num1(m,18)<0
buydate(k,1)=num1(j,1); ## 1 = date
buyprice(k,1)=num1(j,5); ## 5 = close price
selldate(k,1)=num1(m,1); ## 1 = date
sellprice(k,1)=num1(m,5); ## 5 = close price
k=k+1;
i=m+1;
break;
else
m=m+1;
endif
endfor
break;
else
j=j+1;
endif
endfor
endif
endfor

Sent from: https://octave.1599824.n4.nabble.com/OctaveGeneralf1599825.html
Did you try single stepping through the code to see where it goes wrong?
 DAS


I did and was still unable to debug myself.
What I did notice though was that let's say the m was found, and I made the i=m+1 such that next scan starts from then next row from the last row . I see that the i is still the previous i when a new scan starts (it finally becomes m+1 after the next loop). I'm thinking the scan is exiting from the wrong loop, but don't know where that is exactly.
Hello,
I have a 200 by 18 array (called num1) and am trying to find some values
that meet certain criteria.
What I am hoping to do is
1. Starting from i=1, If num1(i, 15) is positive
2. starting j=i,see if num1 (j, 18) is positive. If negative, increase i
by 1 and repeat.
3. If positive, increase j by 1 until num1 (j, 18) is negative . Let's call
this num (m, 18)
4. Record values in other columns at rows j and m.
5. The next scan starts from i=m until length(num1) is complete.
Below is what I have. Say num1 was positive at (2, 18) and turns negative at
(5, 18), instead of keeping only Rows 2 and 5 for the buydate, buyprice,
selldate, sellprice, the code records values at rows 2,3,4, 5 and moves on.
Please let me know where in the loop is not coded correctly.
for i=i:length(num1)
if num1(i, 15)>0 ##15 = 120 day derivative %
j=i
for j=j:length(num1)
if num1 (j, 18)>0
m=j+1;
for m=m:length(num1)
if num1(m,18)<0
buydate(k,1)=num1(j,1); ## 1 = date
buyprice(k,1)=num1(j,5); ## 5 = close price
selldate(k,1)=num1(m,1); ## 1 = date
sellprice(k,1)=num1(m,5); ## 5 = close price
k=k+1;
i=m+1;
break;
else
m=m+1;
endif
endfor
break;
else
j=j+1;
endif
endfor
endif
endfor

Sent from: https://octave.1599824.n4.nabble.com/OctaveGeneralf1599825.html
Did you try single stepping through the code to see where it goes wrong?
 DAS


Hello,
> I have a 200 by 18 array (called num1) and am trying to find some values
> that meet certain criteria.
>
> What I am hoping to do is
> 1. Starting from i=1, If num1(i, 15) is positive
> 2. starting j=i,see if num1 (j, 18) is positive. If negative, increase i
> by 1 and repeat.
> 3. If positive, increase j by 1 until num1 (j, 18) is negative . Let's call
> this num (m, 18)
> 4. Record values in other columns at rows j and m.
> 5. The next scan starts from i=m until length(num1) is complete.
it seems your logic is inspired by some spreadsheet calculator.
It may help to build your data into different variables (num1(:,15)
and num1(:,18) actually seem to be vectors of different semantic).
Have you tried to vectorize your operations? This may reduce the code
complexity and also the execution time. If you are interested in sign
changes you could try something like
s = sign(x); % x could be your num1(15)
d = diff(s);
n = find(d); % at this index positions you have sign changes in x
Best Regards
Torsten
>
> Below is what I have. Say num1 was positive at (2, 18) and turns negative at
> (5, 18), instead of keeping only Rows 2 and 5 for the buydate, buyprice,
> selldate, sellprice, the code records values at rows 2,3,4, 5 and moves on.
> Please let me know where in the loop is not coded correctly.
>
> for i=i:length(num1)
> if num1(i, 15)>0 ##15 = 120 day derivative %
> j=i
> for j=j:length(num1)
> if num1 (j, 18)>0
> m=j+1;
> for m=m:length(num1)
> if num1(m,18)<0
> buydate(k,1)=num1(j,1); ## 1 = date
> buyprice(k,1)=num1(j,5); ## 5 = close price
> selldate(k,1)=num1(m,1); ## 1 = date
> sellprice(k,1)=num1(m,5); ## 5 = close price
> k=k+1;
> i=m+1;
> break;
> else
> m=m+1;
> endif
> endfor
> break;
> else
> j=j+1;
> endif
> endfor
> endif
> endfor
>
>
>
> 
> Sent from: https://octave.1599824.n4.nabble.com/OctaveGeneralf1599825.html>
>


Dr.Ing. Torsten Finke
[hidden email]


