← Blog

The day the quotes stopped

On 8 October the desk called NVDA, filled at 09:31:07, and then the broker stopped answering. For eleven minutes every option quote came back 429 Too Many Requests. The position had to be closed by hand.

Nothing about the research or the signal failed — the call went out at 09:24:45 and every subscriber had it by 09:27:00. What failed was the ability to price what we were holding. This is what we found, including the parts that were our fault.

The bug that turned a blip into eleven minutes

When quotes start failing the sniper is supposed to ease off and let the broker recover. The line that did that was:

interval = min(self.interval * 4, max(1.0, self.interval * 4))

Both sides of that are the same expression. It capped at four times the base poll and never escalated, however long the storm lasted. Underneath it, every quote call was retrying four times. So the desk answered too many requests with roughly four requests per second, for the entire eleven minutes, and kept the limit tripped against itself.

It now escalates 1s, 2s, 4s, 8s, 10s and recovers the moment a good quote arrives. Modelled over the same eleven minutes: 2,648 requests before, 288 after.

The worse one: a position nobody could see

The stop and the trailing stop both compare against the current mark. With no quote there is no mark, so neither can ever fire. The loop that watches an open position handled a failed quote like this:

except BrokerError: LOG.warning(...); continue

No counter, no ceiling. It would have spun like that until the market closed.

That is the opposite of how the rest of this system behaves. A missing signal stands down. A lapsed licence jams. A direction mismatch aborts rather than guesses. Position management now does the same: after sixty seconds with no usable quote it flattens, says plainly that a position which cannot be priced cannot be risk-managed, and tells you.

That buys an exit attempt, not a better fill. If a broker is refusing quotes it may refuse orders too. But the alternative, which we watched happen, is an open position nobody is managing.

Why a $237 stock could not be found

Separately, two subscribers had been unable to price a chain at all. Equity quotes are a different subscription from options data, and on an options-only account the spot price has to be derived by probing option contracts until one answers. That probe sweeps a ladder of candidate prices — and the ladder grew geometrically, so above $200 it stepped in jumps of about $33. Looking for NVDA at 237 it went 220, then 250, and never looked in between. It gave up after 116 requests into a broker that was already rate-limiting.

Two changes. The ladder's stride is capped so consecutive rungs cannot skip over a listed strike band. And more usefully, the operator's desk now publishes the real spot price with every signal, because it has the entitlement to read one and a subscriber may not. Same account, measured:

before: 116 requests, failed  ·  ladder fixed: 24 requests, correct  ·  with the published spot: 17 requests, correct

The stop moved to 25%

The hard stop was 35%. With most of the account deployed on one trade that is roughly a third of it on a single loss, and two consecutive losses is a 54% drawdown — not a tail event at a 23% stop-out rate. It is now 25%, which also makes the first target exactly 1:1 against the stop instead of taking less than it risks.

Being straight about the evidence: the backtester could not settle this. It returned dollar-identical results at 35% and 25% across three thousand simulated months, which is not possible for a stop that is doing anything, so the figure it reports for stop sensitivity cannot be trusted. The change rests on the exposure arithmetic, which does not need a simulator. The backtester itself is now on the list.

What you need to do

Download the current build. The stop change reaches licensed packs on their own, but the execution fixes are in the application and need the update. Subscribers running an older build will keep the old behaviour.

Nothing here is a guarantee. We still publish no win rate and promise no return, and a day like this is a reminder that execution risk is real and separate from whether a call was right. The call on 8 October was fine. The machinery around it was not, in four specific ways, and those four are fixed.