Jump to content

Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.

  • Welcome Guests

    Welcome. You are currently viewing the forum as a guest which does not give you access to all the great features at Traders Laboratory such as interacting with members, access to all forums, downloading attachments, and eligibility to win free giveaways. Registration is fast, simple and absolutely free. Create a FREE Traders Laboratory account here.

andypap

Maximum Value in Array if Condition is True

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

please tag your code with the # key.

it is located at the top of the message window.

 

Tagged code looks like this:

 

//
// this is tagged code
//

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

Share this post


Link to post
Share on other sites

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?

 

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.

Edited by sneo

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
please tag your code with the # key.

it is located at the top of the message window.

 

Tagged code looks like this:

 

//
// 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.

Share this post


Link to post
Share on other sites

guys

 

this is a technical problem i am doing my best to describe...it is not an ethical problem...

if someone knows how it can be resolved and wants to do it can post a solution...

 

i think that this is only a matter of a certain structure of the array in a coupple of lines..

 

it can be viewed as a general routine (tutorial) in arrays because the conditions i am describing in the code can be replaced by any condition and the value assigned in the array by any value...

 

the benefit of this structure is isolating specific conditional instances within a more general condition without refering to bars back....

every time the counter = 1 the array slot will be filled with any desired value as long a the first general condition is true....

the counter doesnot have a fixed length so the array is filled in terms of length assymetrically...

thus you can get an assymetric n = (array size) moving average for example of highs

everytime rsi crosses over 70 ( this is not what i am after anyway) or anything else you can imagine of practical use...

 

so far everything works fine exept the fact that untill in the current run of the general condition , the occurances reach the size of the arrray, the array is bringing forward values from the previous run of the general condition...

 

regards

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Topics

  • Posts

    • ItuGlobal: Our Latest NETELLER VIPs 2025 ITU GLOBAL VIP Members’ Rewards Every calendar year, we choose 2 customers to become our VIPs. They’ve permanently special status with us and they can fund/withdraw Neteller through us, at parallel market rates, whether they open brokerage accounts through us or not.   These are people who funded with the highest amount of Neteller, and who also withdrew the highest amount of Neteller through us.  They would be announced in January each year and added to our list of VIPs. ItuGlobal: Our Latest NETELLER VIPs 2025 Adetoye Oyebanji Babalola: Adetoye O. has started selling large quantities of Neteller to us since the very beginning of our company’s existence. He also sold Perfect Money to us many times, when PM was still available in Nigeria. Besides, he has given us a lot of helpful business advice, which has proven to be invaluable to us. He deserves to become our VIP. Isiaka Adekunle Mohammed: He is a constant buyer. Buying e-currencies and also funding his Instaforex account through us. We thank Isiaka A. for his trust in us and wish him the best in everything he does. Abiodun Lawanson: This is an avid buyer and seller of Neteller. He buys and makes profits and sells back to us. Sometimes when we are not online, he will send an offline message and we will process his order once we come back online. He has thus become our VIP. Source: Ituglobalfx.com.ng  
    • The best and the most sure-fire way to avoid all these forms of nonsense is NEVER to send any money to anyone, no matter the circumstances they claim... Even your closest family members.   Whatever they claim will happen to them, let it happen.   There is nothing new under the sun...   You need to be extremely cruel.... Never send anything of value to anybody, no matter what they claim, even if they claim death.   If you can follow this GOLDEN RULE, you will avoid a lot of regrets, heartaches and disappointments from all areas.   I send money only to people I have promised before.... Or someone I am seeing face-to-face... Or someone I have confirmed beyond reasonable doubts from external/independent sources that they really need the money.   Otherwise, nobody under this heaven can come out of blue (unless my parents or wife), even my siblings and request money.   Over 90% of requests for financial assistance and are fraudulent.   After all, if you die today... The scammers (even in the family) will continue to live without you.   Those who are merciful, kind-hearted and soft-hearted are the easy preys and targets of these scoundrels - 419 scammers.   They like gullible people and hate tough/cruel people.   Do not allow anyone to cause you to feel guilty for what you don’t do… Those dubious people want to make you feel guilty for not helping. But you don’t need to feel guilty as long as you’re not the cause of their problems or the issues they have.   It is better to lose customers/friends/family members/anyone's goodwill and keep your money, than to lose their goodwill and also lose your money.   Because that is what will happen at last... I have lost count of how many people that are currently regretting giving out loans, just because they want to retain goodwill.   When you're trying to please people, you end up displeasing yourself... And you will discover that those who are encouraging you to be kind and generous are themselves wicked and stingy.   Esin o dede l’oro... Araye lo ko esin loro. (It's humans being that taught the horse how to be cruel).   The best way to avoid falling for scam is NEVER to send anything of value to anyone, no matter who the person is to you or how they relate to you on this planet...   And never try to get anything for free or reap where you don't sow and never try to get rich quickly.   Follow this: You will escape/avoid all scams, lies, pretenses, fakeries, headaches, sorrow, regrets, high BP, later in your life.   Ignore this rule at your own PERIL.   Have a nice day. PS: And scammers will be using AI also for impersonations, phishing attempts and deepfake tricks. Just delay indefinitely and make independent calls, research and investigation before you part with anything of value. If you can't go through the rigors, just ignore the deals. I hope the Western World will soon pass legislation to regulate AI and deal with those who use it for evil.  To get free, winning trading signals, please visit: https://t.me/predictmag 
    • C Citigroup stock watch, pullback to the 68.43 gap support area, with bullish indicators at https://stockconsultant.com/?C
    • HDSN Hudson Technologies stock, strong rally, watch for a bottom breakout at https://stockconsultant.com/?HDSN
    • GLD SPDR Gold Shares ETF watch for a top of range breakout above 273.3 at https://stockconsultant.com/?GLD
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.