Trading Articles
Article Categories
Article Tools
CountIf Issue
Updated December 8, 2020
trending_up
3,846 views
thumb_up
4 thanks given
group
1 followers
forum
2 posts
attach_file
1 attachments
Welcome to futures io: the largest futures trading community on the planet, with well over 150,000 members
Genuine reviews from real traders, not fake reviews from stealth vendors
Quality education from leading professional traders
We are a friendly, helpful, and positive community
We do not tolerate rude behavior, trolling, or vendors advertising in posts
We are here to help, just let us know what you need
You'll need to
register in order to view the content of the threads and start contributing to our community.
It's free and simple.
-- Big Mike, Site Administrator
(If you already have an account, login at the top of the page)
(login for full post details)
#1 (permalink )
Posts: 3,464 since Jul 2012
Thanks: 1,827 given,
6,985
received
I am directing this at any Easy Language expert, but especially @ABCTG , since he is the best EL expert I know here...
OK, I am officially stumped.
I tried the countif function on a 5 minute chart of @ES, exchange time, last date of 1081231 (last time of 1520):
Looking at the chart, on the last bar you can easily see that the lowest low of the last 5 bars is 689.0
On Dec 31, 2008 at 1520 Exchange time, the lowest low of the last five 5 minute bars is 689.0 (on second to last bar).
Everyone should agree on that.
Now, if I run this code:
Code
Var:PriceToTest(0);
If date=1081231 and time=1520 then begin
PriceToTest = 689.1;
Value1 = CountIf( (Low of data1<= PriceToTest), 5 );
Print("Value1= ",Value1, " PriceToTest = ", PriceToTest, " LookBack = ", LookBack);
end;
I get
Value1= 0.00 PriceToTest = 689.10 LookBack = 5.00
which is wrong. Value 1 should be equal to 1, since there is one low (689.0) which is below 689.1
Next I change the code to this:
Code
Var:PriceToTest(0);
If date=1081231 and time=1520 then begin
PriceToTest = 689.1;
Value1 = CountIf( (Low of data1<= 689.1), 5 ); //hard code 689.1 here, replacing variable PriceToTest
Print("Value1= ",Value1, " PriceToTest = ", PriceToTest, " LookBack = ", LookBack);
end;
And now it is correct:
Value1= 1.00 PriceToTest = 689.10 LookBack = 5.00
Can someone explain what is going on here? Am I misunderstanding what Countif is doing?
The following user says Thank You to kevinkdog for this post:
Can you help answer these questions from other members on futures io?
Best Threads (Most Thanked) in the last 7 days on futures io
(login for full post details)
#2 (permalink )
Posts: 2,360 since Apr 2013
Thanks: 426 given,
1,578
received
kevinkdog,
you set the value for the variable PriceToTest on the very bar you call the "CountIf" function. Therefore, PriceToTest[1] should equal to 0 (and so should PriceToTest[2] etc..).
When you take a look at the CountIf code you can see that the "Test" input is back referenced within the loop and it appears the iterations with the loop counter > 0 are not true because these bars have "PriceToTest" at 0.
When you use a static value you do not have this problem as your second test confirms.
Regards,
ABCTG
kevinkdog
I am directing this at any Easy Language expert, but especially @
ABCTG , since he is the best EL expert I know here...
OK, I am officially stumped.
I tried the countif function on a 5 minute chart of @ES, exchange time, last date of 1081231 (last time of 1520):
Looking at the chart, on the last bar you can easily see that the lowest low of the last 5 bars is 689.0
On Dec 31, 2008 at 1520 Exchange time, the lowest low of the last five 5 minute bars is 689.0 (on second to last bar).
Everyone should agree on that.
Now, if I run this code:
Code
Var:PriceToTest(0);
If date=1081231 and time=1520 then begin
PriceToTest = 689.1;
Value1 = CountIf( (Low of data1<= PriceToTest), 5 );
Print("Value1= ",Value1, " PriceToTest = ", PriceToTest, " LookBack = ", LookBack);
end;
I get
Value1= 0.00 PriceToTest = 689.10 LookBack = 5.00
which is wrong. Value 1 should be equal to 1, since there is one low (689.0) which is below 689.1
Next I change the code to this:
Code
Var:PriceToTest(0);
If date=1081231 and time=1520 then begin
PriceToTest = 689.1;
Value1 = CountIf( (Low of data1<= 689.1), 5 ); //hard code 689.1 here, replacing variable PriceToTest
Print("Value1= ",Value1, " PriceToTest = ", PriceToTest, " LookBack = ", LookBack);
end;
And now it is correct:
Value1= 1.00 PriceToTest = 689.10 LookBack = 5.00
Can someone explain what is going on here? Am I misunderstanding what Countif is doing?
The following 3 users say Thank You to ABCTG for this post:
(login for full post details)
#3 (permalink )
Posts: 3,464 since Jul 2012
Thanks: 1,827 given,
6,985
received
Last Updated on December 8, 2020
Ongoing