Hi everyone, I have 4 rules (A-B-C-D) 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 (A-B-C-D) 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?