The 155 signals we did not publish
Most signal products only show you what they publish. It is comfortable: an engine that talks a lot looks competent, and nobody can audit what it kept quiet. We do the opposite, because the silence is half the work — and because a number you cannot contradict is worth nothing.
Between 4 and 25 July 2026, our engine assembled emission candidates and then refused to publish them 155 times. Not by accident: every refusal passes through a chain of checks, and each one is written to the database with its reason and its quantified value. Here is the breakdown, straight out of the table.
The real breakdown, unrounded
| Reason for refusal | Count |
|---|---|
| Market regime unfavourable to a crisis bet | 78 |
| Final confidence below the floor (57%) | 38 |
| Rule's Bayesian weight below the floor (0.35) | 27 |
| Speculative positioning already extreme (COT) | 9 |
| Other (rules in contradiction, move already priced) | 3 |
| Total | 155 |
Of those 155, 146 actually blocked emission and 9 were merely observed — we come back to that below, and it is the most important point in this article.
Three weeks is short. These figures prove nothing about the engine's quality: they describe its behaviour. We publish them because an abstention mechanism you cannot inspect is a claim, not a guarantee.
Why market regime dominates
The most frequent reason deserves an explanation, because it is counter-intuitive. A rule like "Middle East conflict → gold rises" is a crisis bet: it assumes the market will run for shelter. That bet only makes sense if the market is already nervous. When the VIX sits at 18, investors do not flee — they absorb the headline and move on. The bet becomes a coin flip dressed up as analysis.
So the crisis gate refuses those signals until volatility reaches a floor, and that floor is recalibrated nightly from the data rather than set by hand. Nearly all 78 refusals in the period are crisis bets made in a calm market: crisis bet in panic regime (VIX=18.6), in stress regime (VIX=17.5). The stored reason contains the exact VIX value at the moment of refusal, which lets the decision be replayed afterwards.
The confidence floor, and what it costs
A signal whose calibrated confidence falls below 57% is not published. That threshold is not round by accident: it was chosen, pre-registered, then measured — and it survived the measurement, which was not a given.
This floor has a cost we accept: it makes the engine quiet. Our actual cadence is about 0.78 decisions per week, well below the two per week we aimed for. The obvious temptation would be to lower the floor: the counter would climb immediately, the page would look livelier, and the edge would leave with it. We wrote down that we would not do that, and the low counter is published as-is on the Truth Table.
The Bayesian weight: when a rule loses the right to speak
Every rule carries a weight per (asset × direction) pair, revised at each resolution. A rule that is regularly wrong on one asset sees its weight fall, and below 0.35 it stops emitting on that pair — even when its condition is met. The 27 refusals in this category name the rule and the asset: Bayesian weight 0.13 < 0.35 for WTI.
It is a measured form of self-censorship. A rule can be good on gold and poor on oil; the per-pair weight takes away its voice where it failed, without deleting it where it holds.
The admission: nine of those refusals refused nothing
Here is the part a sales deck would leave out. The positioning veto — the one that spots an already crowded trade from positions reported to the CFTC — currently runs in observation mode. Its nine firings carry an explicit [observation, non-blocking] marker:
[observation, non-blocking] Extreme speculative positioning (COT BTC net +3500, P98 over 104 weeks) — crowded trade on the up side
In plain terms: the engine saw the bet was crowded, wrote it down, and let the signal through anyway. Why? Because a gate that blocks must first prove it blocks the right signals. In observation mode we measure what it would have prevented, and it only switches to blocking if that measurement justifies it. The switch is automatic and nightly, driven by outcome rather than intuition.
It is slower. It is also the only honest way to add a filter: a gate added "because it seems prudent" degrades an engine just as surely as a missing gate, and without anyone noticing.
What this mechanism does not prove
Let us be precise about the limits, because that is where most communication goes off the rails:
- 155 abstentions over three weeks demonstrate no performance whatsoever. They show that a refusal mechanism exists, works, and leaves a trace. Nothing more.
- A refusal is not inherently a good decision. A gate may well block signals that would have won. That is exactly why every instrumented gate measures its own counterfactual.
- Our gates do not decide on win rate but on expected gain normalised by volatility. A filter that blocks six small losses and four large gains shows 60% "accuracy" while losing money. We fixed that bias in our calibration loops and we are not going back.
Why we publish this
An engine that never emits is useless. An engine that always emits is a noise generator. What separates the two is not visible in the list of published signals: it is in the list of the ones that were not, with the reason next to each.
That list is live on the Truth Table, under "What we refused to trade". It includes the refusals that bother us.
GeoPulse observes geopolitical events and measures what they do to markets. We do not promise prediction: we publish our decisions, our abstentions and our mistakes, timestamped and sealed. Create a free account.
GeoPulse
Follow the markets with GeoPulse
GeoPulse correlates geopolitical events with financial markets using AI analysis of every event.
Create a free account