CountIf Issue - futures io

# Discussion in EasyLanguage Programming

Updated
1. trending_up 3,846 views
2. thumb_up 4 thanks given
3. group 1 followers
1. forum 2 posts
2. 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)

# CountIf Issue

(login for full post details)
kevinkdog

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?
 Big Mo Indicator for NT8NinjaTrader NT8 Order Management StrategyThe Elite Circle Multi Time Frame High/Low/Median levelsNinjaTrader help with take profit several targetsTradeStation How do I create Strategy with the Second Entry indicatorNinjaTrader

Best Threads (Most Thanked)
in the last 7 days on futures io
 Is anyone actually making money?123 thanks ApexTraderFunding.com experience and review11 thanks Artificial Intelligence (AI) and Chat GPT7 thanks Dax market profile (FDAX, TPO)7 thanks Want your NinjaTrader indicator created, free?7 thanks

(login for full post details)
ABCTG

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) kevinkdog      Posts: 3,464 since Jul 2012 Thanks: 1,827 given, 6,985 received That is it, thanks!

 futures io > CountIf Issue

Last Updated on December 8, 2020

Upcoming Webinars and Events

## NinjaTrader Indicator Challenge!

Ongoing

 Copyright © 2023 by futures io, s.a., Av Ricardo J. Alfaro, Century Tower, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada), info@futures.io All information is for educational use only and is not investment advice.There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
no new posts