Hi everyone, I have 4 rules (ABCD) to open a trade. The entry would be determined by the rule A and the rest is a confirmation indicator. From this 4 rules I need 3 including the entry rules to be true, the conventional way is to make it like this:
is there a simpler way to check the condition without many or statement?
At first I thought all one could do is shorten the text:
if(A) { if((B && C)  (C && D)  (D && B)  (B && C && D)) { //Open trade here } }
But that made me see that it looks like you want any combination of B, C, D, minimum 2 must be true, so maybe this could work
if(A && (int(B+C+D) >= 2) ) { //Open trade here }
Or if you want a boolean cast
if(A && bool((B + C + D)/2)) { //Open trade here }
[Disclaimer  not tested, please do so]
if(A == true && (B && C == true  C && D == true  D && B == true  B && C && D == true))

You should be able to read your code out loud and have it make sense. You would never write if( (2+2 == 4) == true) would you? if(2+2 == 4) is sufficient. So don't write if(bool == true), just use if(bool) or if(!bool). Code becomes self documenting when you use meaningful variable names, like bool isLongEnabled where as Long_Entry sounds like a trigger price or a ticket number and “if long entry” is an incomplete sentence.

Basically, you want A and at least two of the others.
False is zero, true is one if(A && (B + C + D) >= 2) { //Open trade here }
thanks everyone for the answer, appreciate it,
quick question here!.
If there's 2 conditions which indicate bullish trend and bearish trend, I don't think boolean would be useable. So I use int result that return 1 if bullish 2 if bearish and 0 if there's no trend. If I use >= when 2 logic is correct and the last one isn't the equation would be like this
if(A && (int(B+C+D) >= 4 ) ) { //Open trade here }
the problem is that the last logic could be return 1 and resulting true for the equation above. Is there a way to solve this problem?
thanks everyone for the answer, appreciate it,
quick question here!.
If there's 2 conditions which indicate bullish trend and bearish trend, I don't think boolean would be useable. So I use int result that return 1 if bullish 2 if bearish and 0 if there's no trend. If I use >= when 2 logic is correct and the last one isn't the equation would be like this
the problem is that the last logic could be return 1 and resulting true for the equation above. Is there a way to solve this problem?
You have only 3 inputs (B + C + D), using >= 4 would mean it is always false. (Similarly >= 0 would always be true). Neither of these make sense.
From your explanation, you would need to detect 1 or 2 specifically
if(A) { if(int(B + C + D) == 1) { //Bullish } else if(int(B + C + D) == 2) { //Bearish } else { //3 = something else } }
You have only 3 inputs (B + C + D), using >= 4 would mean it is always false. (Similarly >= 0 would always be true). Neither of these make sense.
From your explanation, you would need to detect 1 or 2 specifically
You are also approaching a situation when maybe a switch is neater
if(A) { int sum = int(B + C + D); switch(sum) { case 1 : //Bullish break; case 2 : //Bearish break; case 3 : //Something else break; } }
thanks everyone for the answer, appreciate it,
quick question here!.
If there's 2 conditions which indicate bullish trend and bearish trend, I don't think boolean would be useable. So I use int result that return 1 if bullish 2 if bearish and 0 if there's no trend. If I use >= when 2 logic is correct and the last one isn't the equation would be like this
the problem is that the last logic could be return 1 and resulting true for the equation above. Is there a way to solve this problem?
Thanks R4tna C for your help,
If I use your code then the result would be like this,
if(A) { int sum = int(B + C + D); switch(sum) { case 1 : if(sum == 3  4) //(1+1+2) > 2 condition correct and 1 not //do this break; case 2 : if(sum == 5  6) //(2+2+1) > 2 condition correct and 1 not //do this break; case 3 : if(sum == 1 2) //do nothing break; } }
is this correct?
Thanks for your answer Dominik, but I don't think using minus would be working. Let's say that with this example, if the D would be bearish then the equation would be like this (1 + 1 + (1)) >=2, the equation would always be false if only 2 of the condition are correct .
Thanks R4tna C for your help,
If I use your code then the result would be like this,
is this correct?
Thanks for your answer Dominik, but I don't think using minus would be working. Let's say that with this example, if the D would be bearish then the equation would be like this (1 + 1 + (1)) >=2, the equation would always be false if only 2 of the condition are correct .
You don't need the inner if statements  in fact they will never be true
case 1 : if(sum == 3  4)
here you see sum == 1 so the if statement will always be false.
Thanks R4tna C for your help,
If I use your code then the result would be like this,
is this correct?
Thanks for your answer Dominik, but I don't think using minus would be working. Let's say that with this example, if the D would be bearish then the equation would be like this (1 + 1 + (1)) >=2, the equation would always be false if only 2 of the condition are correct .
I see...  It was jsut an idea on how to "balance" your conditions based on the direction.
You don't need the inner if statements  in fact they will never be true
here you see sum == 1 so the if statement will always be false.
ah I think I got the Idea how to use switch case.
case 1 :
no 1 on above is referring to the sum of (B+C+D), so in this case if there's 2 bullish and 1 bearish the equation would be like this (1+1+2). The sum of this equation would be the case no like this,
case 4: //2 bullish 1 bearish = rules in line open trade here
is this right?
 Free trading apps
 Over 8,000 signals for copying
 Economic news for exploring financial markets
You agree to website policy and terms of use
Hi everyone, I have 4 rules (ABCD) to open a trade. The entry would be determined by the rule A and the rest is a confirmation indicator. From this 4 rules I need 3 including the entry rules to be true, the conventional way is to make it like this:
is there a simpler way to check the condition without many or statement?