A drawing, not a dashboard
How the data actually works
Every figure on this page was measured today on your machine. Nothing is estimated unless it says so. No decisions have been taken and nothing is being built — this is here so we are looking at the same thing.
Two layers: one true, one fast
The truth is too slow to sweep. The fast thing is only ever a copy. Both, or neither works.
You need both. Layer 1 is true but too slow to sweep. Layer 2 is fast but is only ever a copy. Today's mistake was having Layer 2 with no Layer 1 behind it — so when I put invented prices into it, nothing could catch that except you noticing the numbers looked wrong.
Why a median broke it
Betfair prices sit on rungs, and the gap between rungs changes with the price.
| Price range | One tick is | …which is this much of the price |
|---|---|---|
| 1.01 – 2.00 | 0.01 | 0.5% – 1.0% |
| 2.00 – 3.00 | 0.02 | 0.7% – 1.0% |
| 3.00 – 4.00 | 0.05 | 1.3% – 1.7% |
| 4.00 – 6.00 | 0.10 | 1.7% – 2.5% |
| 6.00 – 10.0 | 0.20 | 2.0% – 3.3% |
| 10.0 – 20.0 | 0.50 | 2.5% – 5.0% |
| 20.0 – 30.0 | 1.00 | 3.3% – 5.0% |
Two things I got wrong here. First, I quoted one tick as 0.694% and applied it everywhere — but as the table shows it runs from about 0.5% to 5% depending on the price, so it has to be worked out per game. Second, and worse: taking the median of a minute's trades put 233,783 prices (4.83%) into the grid that are between the rungs and could never have traded. Your original file had none.
Betting is trading with a later exit
Your point. One clock, from first quote to the final whistle.
This is your point, drawn. A bet is not a different kind of thing from a trade — it is a trade whose exit happens to be full time. So there is one timeline and one engine: pick an entry, pick an exit, and “full time” is simply the last exit available. That is why the trading page and the strategy builder should not be two tools.
What indexing does and does not fix
It makes one game instant. It does not make every game instant.
Bars are on a log scale, or the fast ones would be invisible.
The answer to your question: yes, “back at 120, lay at 15 across all leagues” keeps answering in a second — but only because it is answered from the grid. Asked of the raw trades it is minutes, indexed or not, because that question genuinely needs every game. Indexing makes one game instant; it does not make every game instant.
Where we actually are tonight
Honestly, including the parts that are still wrong.
| ✔ | Fixtures, goals and scores | Merged and verified against your source. Every row accounts for. |
| ✔ | Raw traded prices exist | 83,110,488 trades, untouched, in 33 tables. |
| ✕ | Raw traded prices are queryable | No indexes. One game costs a full table read, ~90s. |
| ✔ | The grid can be rebuilt | Script now exists. Before today nothing could reproduce it. |
| ✕ | The grid holds only real prices | 4.83% are between the rungs. Fix written, not yet run. |
| ✕ | The grid reaches past kick-off | Pre-match only. In-play and full time are in the raw data alone. |
| ✕ | Trading and strategy are one tool | Two pages, two files, two clocks. |
| ✕ | Price staleness is visible | A price with no trade for 11 minutes looks the same as a fresh one. |