NexusFi: Find Your Edge


Home Menu

 





CountIf Issue


Discussion in EasyLanguage Programming

Updated
    1. trending_up 4,848 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,738 since Jul 2012
Thanks Given: 1,918
Thanks Received: 7,485

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?
Ninjatrader users - good CONNECTIONs post and article fr …
NinjaTrader
Iran and Israel Stand Down: What $9M in Peace Contracts …
Prediction Markets & Event Contracts
Wood Mackenzie Drops $200 Oil Forecast -- Airspace Expir …
Prediction Markets & Event Contracts
CFTC Rewrites the Rulebook -- Kalshi Cracks $1B Non-Spor …
Prediction Markets & Event Contracts
Sundays Verdict: Lebanon Locked at 99.85% as Iran June 7 …
Prediction Markets & Event Contracts
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
NexusFi site changelog and issues/problem reporting
15 thanks
Darmok and Jalad at Tanagra
3 thanks
Big Mike in Ecuador
1 thanks
30 Sessions
1 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,738 since Jul 2012
Thanks Given: 1,918
Thanks Received: 7,485


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