Today at the open, I was watching the ES futures flop back and forth across the big, round number of 900. I have qualitatively observed that price tends to stop and vacillate across big, important levels such as this. Illiniry on Twitter asked me if there was any statistical basis for this. Good question!

I busted out Think Desktop and made a simple indicator. Over the last 20 day period, I counted how many 1min candles touched a given price level on ES. Here’s an overview of what the price action looked like over that 20 days (this is a 5min chart since I couldn’t get the 20 day 1min all on one screen, but you get the picture):

As you can see, we were in a general uptrend, between roughly 810 and 900 on the ES. Here are the results of the 1min candle touch testing for the various price levels:

My initial observations are these:

The biggest touch point was near 855, which also happens to be near the midpoint of this range. So that could just be because we spent more time near this level than at the levels near the end points, so we got more touches. It also appears that the local mid-points between even 5-point levels were more often peaks than the actual 5 point levels themselves, though the peak was usually not significant. Note that the low number of touches at 900 is because we only got there yesterday 😛 This will be interesting to revisit 20 days from now.

However, there were well defined spikes near 840, 855 and 870, with deep troughs on either side. This lends weight to these round numbers being significant. Note that these levels are also close to standard fib ratios between 800 and 900, which makes some sense.

One odd thing is that 850 was actually a low frequency level. Totally counter-intuitive!

In conclusion, 20 days is not enough time to do a significant test, but I’m limited to Think Desktop’s abilities for now. This cursory study was quick and easy to do, and answers a few questions while creating some new ones. It seems to point toward major round numbers acting as a magnet, though a 5-point range definition of “round” appears to be too small and in the noise.

Leave a comment with your thoughts!

### Like this:

Like Loading...

*Related*

Tags: es, random, round_numbers

This entry was posted on May 5, 2009 at 2:01 pm and is filed under Trading System Development. You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.

May 5, 2009 at 5:22 pm

wow great tool, can u share the indicator or how you got them into that chart?? I am thinking excel. But if you shared this info that would be great

May 5, 2009 at 6:03 pm

Tim,

There was a lot of manual work in this. I used a simple ToS study to sum the counts, and keyed them into Excel by hand and plotted them after some sorting. I have since had a few ideas on how to automate it more by using a ToS strategy to my own nefarious purposes. I’ll post the indicator later since you’re interested, and I’ll follow up with the automated method when I get to it. I’m personally interested in how we act around this 900 ES level, so I’ll be revisiting it as I said.

If only somebody would pay my mortgage so I could write tools and indicators all day long. 😉

May 5, 2009 at 6:47 pm

Cool post, thanks for the shout out 🙂 It’s obviously very tough to do any kind of meaningful analysis with the limited amount of historical data there. The idea of counting how many times a round number is traded though is an easy way to determine if it’s better than random. As soon as I get better at writing indicators in EasyLanguage, I would like to test this.

May 6, 2009 at 7:12 am

Here’s the code for the indicator I used on a 1 min, 20 day chart. I put in various values of level and deltas, and then just read the numbers off the right hand side of the indicator window, keyed into Excel. Automated method to follow (sometime):

declare lower;

declare fullrange;

input pricelevel1=900;

input delta=2.5;

def pricelevel2=pricelevel1+delta;

def pricelevel3=pricelevel1-delta;

def pl1=pricelevel1;

def touch1=if low<=pl1 and high>=pl1 then 1 else 0;

plot Sum1=totalsum(touch1);

def pl2=pricelevel2;

def touch2=if low<=pl2 and high>=pl2 then 1 else 0;

plot Sum2=totalsum(touch2);

def pl3=pricelevel3;

def touch3=if low<=pl3 and high>=pl3 then 1 else 0;

plot Sum3=totalsum(touch3);

May 6, 2009 at 2:22 pm

Very interesting stuff. I wonder how the results would change as you did them on individual stocks where a single person has more influence on the direction rather than a large diverse group of market participants. I suspect you’ll find this effect even more pronounced.

May 6, 2009 at 10:23 pm

I looked through my tick data quickly and there appears to be about a 6% increase in the volume traded at even dollar levels as compared to the average (on ES). Interestingly, volume is down more at the .25 mark then other prices. This is for Jan 2006-Oct 2007, total volume of about 577 million contracts.

Interestingly, multiples of 5 are less common than numbers offset by 2 from 5 (ending in 2, 3, 7, and 8), which occur about 8% more than average. An offset of 4 (ending in 4 or 9) is the next most common (+6%), then an offset of 1 (+4%), with multiples of 5 actually being the least common integer prices (only +3%).

Studying the frequency of prices mod 10 shows that prices ending in 7, 8, and 9 are the most common (10% above average). The dropoff from 9 to 9.25 is huge (+11% to -3%). Multiples of 10 are just barely above average (+0.85%).

Multiples of 25 are actually traded 1.5% less than average. Looking at the data, it actually appears that round numbers repel trading rather than attracting it. The graph of frequency with respect to price mod 25 definitely drops at multiples of 5 (except for 15). Looking at a graph of frequency mod 100 also suggests that round numbers repel prices, but that nearly round numbers attract prices.

This actually suggests that round numbers are seen as important barriers, and that once they are broken then people quickly trade on the other side without recrossing. You can actually see that in your graph too, which has dips at 850, 860, and 875 (and even 840 and 870 are lower than their immediate neighbors).

If I have time I will put the graphs up on my blog, since they look fairly interesting. Note that I’m doing a slightly different test than you are. I’m looking at the volume traded at each price, while you are looking at how many minutes had a trading range that included a price. That could easily change the results (though if my theory is correct then it should be similar).