NexusFi: Find Your Edge


Home Menu

 





CountIf Issue


Discussion in EasyLanguage Programming

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




 
Search this Thread

CountIf Issue

  #1 (permalink)
 kevinkdog   is a Vendor
 
Posts: 3,664 since Jul 2012
Thanks Given: 1,892
Thanks Received: 7,359

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 Twitter Started this thread Reply With Quote
Thanked by:

Can you help answer these questions
from other members on NexusFi?
NexusFi Journal Challenge - May 2024
Feedback and Announcements
Pivot Indicator like the old SwingTemp by Big Mike
NinjaTrader
How to apply profiles
Traders Hideout
ZombieSqueeze
Platforms and Indicators
MC PL editor upgrade
MultiCharts
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Spoo-nalysis ES e-mini futures S&P 500
48 thanks
Just another trading journal: PA, Wyckoff & Trends
35 thanks
Tao te Trade: way of the WLD
25 thanks
Bigger Wins or Fewer Losses?
24 thanks
GFIs1 1 DAX trade per day journal
21 thanks
  #2 (permalink)
 ABCTG   is a Vendor
 
Posts: 2,435 since Apr 2013
Thanks Given: 482
Thanks Received: 1,628

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 Twitter Reply With Quote
Thanked by:
  #3 (permalink)
 kevinkdog   is a Vendor
 
Posts: 3,664 since Jul 2012
Thanks Given: 1,892
Thanks Received: 7,359


That is it, thanks!

Follow me on Twitter Started this thread Reply With Quote




Last Updated on December 8, 2020


© 2024 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 - Privacy Policy - Downloads - Top
no new posts