NexusFi: Find Your Edge


Home Menu

 





CountIf Issue


Discussion in EasyLanguage Programming

Updated
    1. trending_up 4,766 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,737 since Jul 2012
Thanks Given: 1,917
Thanks Received: 7,476

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?
CFTC Opens First COT Report Review in 20 Years -- Asks W …
Traders Hideout
Roland Garros Final Day: $3M on Zverev at 80.5% -- Leban …
Prediction Markets & Event Contracts
Weekend Update: First Qatari LNG Transit Attempted -- IR …
Traders Hideout
Warsh Rate Hike at 40%, Iran June 15 Expires Tonight at …
Prediction Markets & Event Contracts
June 15 Peace Odds Surge From 3.6% to 12.25% After Trump …
Prediction Markets & Event Contracts
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Big Mike in Ecuador
196 thanks
Sober Journey With S&P
27 thanks
30 Sessions
20 thanks
BERN ALGOS algo trading journal
8 thanks
Volume Indicators
8 thanks
  #2 (permalink)
 ABCTG   is a Vendor
 
Posts: 2,448 since Apr 2013
Thanks Given: 494
Thanks Received: 1,642

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,737 since Jul 2012
Thanks Given: 1,917
Thanks Received: 7,476


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