Welcome to the Traders Laboratory Forums.
Coding Forum Collaborate, receive help, or discuss coding related issues.

Reply
Old 05-08-2010, 05:46 AM   #1

Join Date: Dec 2008
Location: athens
Posts: 54
Ignore this user

Thanks: 0
Thanked 4 Times in 3 Posts

Maximum Value in Array if Condition is True

hi

i am dealing with a coding problem i dont know how to resolve efficiently

what i want to do is

first: to reset all the values of the array before last time a condition was true to the minimum value.

then : to get the maximum value of the array.

i am using a for down to loop to fill the array whitch has a fixed length
and two conditions.

counter = counter + 1 ;
if rsi(c,14) crosses over 50 then
counter = 0 ;

if c > average(c,1000) then
if counter = 1 then begin
for nn = 20 down to 1 begin
array[nn] = array[nn-1] ;
end;
array[nn] = c ;
end;

now the array has twenty elements some of whitch
are stored from the previous time that
the c was greater than the average when the counter equals 1 .

what i mean by that is the if the array evey time the condition (c> average) will start
it will carry over values from the previous time that the condition was true.

how can i sort this mess out ?

regards
andypap is offline  
Reply With Quote
Old 05-08-2010, 09:09 AM   #2

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,477 Times in 912 Posts

Re: Maximum Value in Array if Condition is True

Quote:
Originally Posted by andypap »
....
how can i sort this mess out ?

regards

step one:

draw out the array as in posts #34 ~ #36
http://www.traderslaboratory.com/for...uage-5785.html


step two:

draw a flow chart to illustrate HOW the variables get assigned to which array cell,
and how the re-assignments change the array.

.
__________________



Only an idiot would reply to a stupid post

Last edited by Tams; 05-08-2010 at 09:16 AM.
Tams is offline  
Reply With Quote
Old 05-16-2010, 05:33 AM   #3

Join Date: Dec 2008
Location: athens
Posts: 54
Ignore this user

Thanks: 0
Thanked 4 Times in 3 Posts

Re: Maximum Value in Array if Condition is True

well i dont exactly understand what you mean but thatks for the reply anyway


i will try to explain further what is the problem i am dealing with.

when the close just became greater than the average and this represents the basic condition
every time rsi crosses over 50 (second condition)the counter reset to 1 and the value of the close is stored in array[0]...

the array has 20 elements...

in the following senario

the first time rsi crosses over 50 after c > average
array slot[0] stores the close of that bar and the rest of the 19 slots
are carying over the closing value of the bars where counter = 1 from the
previous time that the close > average.

what i want to do is
every time the first condition becomes true to reset all the array values to
a dummy value (-1) and then every time counter = 1 start filling the array
with the close...

note i dont want to resize the array(dynamic array).

then i want to get the max value of the array slots.

note that in case of the scenario aformentioned
the array will be
array[0] = c;
array[1] to array[19] = -1
max value of array = array[0]

when the second ocurrance that counter = 1 will happen while c > average
then the array will be
array[0] = c of first ocuurance
array[1] = c of second occurance
array[2] to array[19] = - 1
if array[0] > array[1] then
max value of array = array[0] else array[1]

my problem is coding the above efficiently the way a pro would have done it so the code will be precize and 100% accurate

my efforts so far require a lot of lines and i am 80% accurate..

for example i am using the maxlist to get tha max value by naming all the array slots one by one

value1 = maxlist(array[0],array[1] ......array[19]) ;

regards
andypap is offline  
Reply With Quote
Old 05-16-2010, 09:45 AM   #4

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,477 Times in 912 Posts

Re: Maximum Value in Array if Condition is True

please tag your code with the # key.
it is located at the top of the message window.

Tagged code looks like this:

Code:
//
// this is tagged code
//

array[0] = c; 
array[1] to array[19] = -1 
max value of array = array[0]
__________________



Only an idiot would reply to a stupid post
Tams is offline  
Reply With Quote
Old 05-16-2010, 09:46 AM   #5

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,477 Times in 912 Posts

Re: Maximum Value in Array if Condition is True

flow chart
Flowchart - Wikipedia, the free encyclopedia

__________________



Only an idiot would reply to a stupid post
Tams is offline  
Reply With Quote
Old 05-16-2010, 08:59 PM   #6

Join Date: May 2008
Location: Singapore
Posts: 59
Ignore this user

Thanks: 22
Thanked 32 Times in 16 Posts

Re: Maximum Value in Array if Condition is True

let me rephrase to check your requirements:
1. you want to obtain value of close for period where the condition Close > Average is met.
2. reset function occurs where condition RSI > 50

would the following solution suffice?

Code:
inputs:
PeriodReq(20),
PeriodRSI(14);

variables:
RSI50C(0),
MyVar(0);

if Close > Average(C,1000)
then begin
RSI50C = IFF(RSI(C,PeriodRSI) > 50, Close, 0);
end
else
RSI50C = 0;
end;

MyVar = Highest(RSI50C,PeriodReq);
This will create a rolling fixed array that will:
1. return Close if conditions (a) C > Avg and (b) RSI > 50 are met
2. return highest Close over the past 20 periods

ps: i did not test the code out on tradestation. probably may have some syntax error. but probably you need just the basic structure.

Last edited by sneo; 05-16-2010 at 09:25 PM.
sneo is offline  
Reply With Quote
Old 05-17-2010, 02:12 PM   #7

Join Date: Dec 2008
Location: athens
Posts: 54
Ignore this user

Thanks: 0
Thanked 4 Times in 3 Posts

Re: Maximum Value in Array if Condition is True

this is the code that i am using



vars : cnt(0),avg(0),maxval(0), ii(0) ;

arrays ; carr[10](0) ;

avg = average(c,1000) ;


cnt + cnt + 1 ;
if rsi(c,14) crosses over 50 then
cnt = 1 ;


if c > avg then begin
if cnt = 1 then begin
for ii = 10 downto 1 begin
carr[ii] = carr[ii-1];
end;
carr[0] = c ;
end ;
end ;

if c < avg then
for ii = 10 downto 1 begin
carr[ii] = -1 ;
end;

maxval = maxlist(carr[0],carr[1],carr[2],carr[3],carr[4],
carr[5],carr[6],carr[7],carr[8],carr[9]);



here is a scenario of how the code should opperate

suppose that
while the condition c > average is true there are only 5 instances where cnt = 1


the 5 first slots of the array should hold the closing price of those instances and the remaining slot( array[5] to array[9] the dummy value..

then when c < average the array should reset all its slots to the dummy value

then when c > average again the array should start populating again every time cnt = 1

note that
the array will populate all the slots with a closing price only if the
ocurrances of cnt = 1 are greater than 9 in the current run of the close been greater than the average...



sneo (thanks for the input)
this is not about periods back...
it is an array of 10 insctances of a condition(cnt = 1) within a broader condition(c>avg) that might ocurr or not if the broader condition will switch(c<avg) before the sum of instances of the instance condition(cnt=1) will reach 10 ...

i hope this will clarifie everything

regards
andypap is offline  
Reply With Quote
Old 05-18-2010, 10:34 AM   #8

BlowFish's Avatar

Join Date: Mar 2007
Location: In Da House
Posts: 3,292
Ignore this user

Thanks: 129
Thanked 1,054 Times in 702 Posts

Re: Maximum Value in Array if Condition is True

Quote:
Originally Posted by Tams »
please tag your code with the # key.
it is located at the top of the message window.

Tagged code looks like this:

Code:
//
// this is tagged code
//

array[0] = c; 
array[1] to array[19] = -1 
max value of array = array[0]
This will preserve your indents and make things easier for people to read.
BlowFish is offline  
Reply With Quote

Reply

Thread Tools
Display Modes Help Others By Rating This Thread
Help Others By Rating This Thread:


All times are GMT -4. The time now is 09:36 AM.
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
CS to VB integration by DeskLancer
©2006-2011 Traders Laboratory, All Rights Reserved.