5 MIN READ · 25 AUG 2026 · trading

My best trader was a bug. I spent a week killing it.

Five of six orders came back empty. I blamed the market. The market was innocent and my own maths was a hair too cheap.

SB
Steven Battilana Quant · Zurich · ex-ETH

The Hook

Five of every six orders my system sent came back from the exchange with the same answer: no orders found to match.

Before I ran the autopsy, I thought I was being too slow to get filled on the level that I was looking for. I assumed that the market was too fast and evolving too fast, so we kept missing the trades.

It was a rounding error, and it was mine.

The Context

I started to measure the time it took for every single step, in order to better understand whether I was too slow and where I could maybe improve the speed.

The theory was reasonable. On these order books, a quote that has just appeared has about a 26% chance of moving against you within the next second. A quote that has rested for more than thirty seconds has about 0.3%. That is eighty times the risk, from nothing but the age of the price you are looking at. Slowness is a real way to lose a trade.

Once I started measuring the time, it turned out that I’m kind of slow but not too slow.

Then I looked at what the book was doing at the moment of each miss. In 99% of the episodes I checked, the exchange’s own snapshots show a real, funded order sitting at exactly the price I aimed at. It usually stays there for seconds. Other traders lifted that very level during 97% of those episodes, while my orders kept coming back empty.

Seeing that other people got filled at the level I tried to get filled at, after I tried it, was really bad.

There’s nothing wrong with the market.

The Approach

Say you want to buy a dollar’s worth at 67 cents. The code does some sort of maths in order to come up with the correct number of shares. These markets run on a one-cent tick, and a dollar does not divide evenly into 67-cent shares, so the share count gets rounded up. What goes out is an order priced at 66.99988 cents.

As you can see, that’s slightly below 67 cents. The level that we saw on the book was at 67 cents, and we’re slightly below that. That means we don’t get matched with that thing that we saw on the book. It’s basically a rounding error that happened on my end, and that’s why it missed so many trades.

It did not miss everything, which is why it hid for so long. If we had an edge that was large enough, we still got filled, but we never actually detected that we got filled at a slightly worse level. Only when our edge basically had one level left that was worth trying to trade did we start missing a lot. This is when we discovered that, with a slight rounding error, we just end up ever so slightly away from the available level.

Whenever I get an acknowledgement of a missed trade, I usually shoot the exact same trade again a couple of times upon receiving it. That’s why I got so many misses, and then in the end I found out that my own system was failing deterministically instead of just being unlucky.

I fixed the rounding issue, and we still get some misses, but a bit fewer than before.

Then the uncomfortable part. A bug that potentially saves me money, because if my strategy isn’t good and I miss the trade, I essentially don’t realise the losses. Especially with binary options, the losses are steep. I don’t really know how much it cost me at the end of the day. It’s actually hard to say on which side we would have ended up.

The Takeaways

  1. Read the error as being about you. If you get the message back “no orders found to match”, maybe you’re having some sort of issue with the trade that you’re trying to send. The price was getting rounded down so it did not match the level I was aiming at. In that sense the answer was true. There’s nothing wrong with the market.
  2. Measure the layer you suspect, even when it turns out innocent. The week was not wasted, because during that measurement it told me that on the speed side everything is kind of in range, which also nudged me towards checking other possible issues, and then I came across this rounding bug.
  3. Fix the thing that decides whether you have a business. I don’t think this is the most important thing to fix. Having a strategy that works is the bigger problem that needs to be solved.

What comes next

Learning that it was a rounding error, that I wasn’t that slow, was kind of nice, because that basically means the execution is not the issue. It would be more likely that the signal or the strategy I’m using is the issue, so I could turn back my focus on that and try to find a better strategy.

There are still some components that I haven’t measured or had another proper look at. For instance, sometimes, for some reason, the trade execution just gets much slower. The bulk of it is fairly well understood now.

Next: five weeks, and the one number I have been avoiding since July.

What are you blaming instead of yourself?

Get the next episode first

Every week: the progress unfiltered, plus what I can't post publicly. The build, the number, green or red.

Posted 25 AUG 2026 · filed under trading