NexusFi: Find Your Edge


Home Menu

 





CountIf Issue


Discussion in EasyLanguage Programming

Updated
    1. trending_up 4,937 views
    2. thumb_up 4 thanks given
    3. group 1 followers
    1. forum 2 posts
    2. attach_file 1 attachments




 
Search this Thread
  #1 (permalink)
 kevinkdog   is a Vendor
 
Posts: 3,740 since Jul 2012
Thanks Given: 1,918
Thanks Received: 7,489

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?


Follow me on X Started this thread Reply With Quote
Thanked by:

Can you help answer these questions
from other members on NexusFi?
requesting .nrd replay files from 2026 spy and qqq
The Elite Circle
Datafeed for Atas
Platforms and Indicators
EA
Platforms and Indicators
Trump Media to sell instant access to market-moving soci …
Traders Hideout
No book, only a stair: journaling fills where price move …
Cryptocurrency
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Mes vs MNQ
6 thanks
NexusFi site changelog and issues/problem reporting
5 thanks
BERN ALGOS algo trading journal
3 thanks
Johnnys Journal
2 thanks
TopStep Trader disappointment
2 thanks
  #2 (permalink)
 ABCTG   is a Vendor
 
Posts: 2,448 since Apr 2013
Thanks Given: 494
Thanks Received: 1,643

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 View Post
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?


Follow me on X Reply With Quote
Thanked by:
  #3 (permalink)
 kevinkdog   is a Vendor
 
Posts: 3,740 since Jul 2012
Thanks Given: 1,918
Thanks Received: 7,489


That is it, thanks!


Follow me on X Started this thread Reply With Quote




Last Updated on December 8, 2020


© 2026 NexusFi®, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
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.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Downloads - Top
no new posts