Notes · John Kingola
How I take problems apart
I check that something is true before anyone relies on it: trading strategies, AI agents, and the systems around them.
Each building block is a finding I keep reusing: what I was looking for, what I found, and the move it makes me take on the next problem. 20 of them, in 5 categories, plus essays that walk through one decision.
Getting the numbers right
Metrics that look correct and aren't, and how I catch them.
- The start is a peak
- Looking for
- Drawdown bugs in quant libraries, checked against hand-computed values on short series.
- Found
- A drawdown is measured from the highest wealth so far, and the starting wealth is the first high.
Found 2026-09-26
- Annualisation is an inference
- Looking for
- Whether annualised Sharpe and volatility match a hand calculation on real trading calendars.
- Found
- Turning a daily number into an annual one means guessing how many periods a year has. Libraries guess silently.
Found 2026-09-26
- A name is not a formula
- Looking for
- Which published formula each risk metric really computes, my own Cernos code included.
- Found
- Many metrics have several published formulas under one name. The label tells you the family, not the member.
Found 2026-09-27
- Flipped inputs pass silently
- Looking for
- Bugs that still produce plausible numbers, in an Expert Advisor audit and across trading libraries.
- Found
- Feed a calculation the right number the wrong way round and nothing crashes. In a signal, you trade the opposite strategy.
Found 2026-09-26
- Snapshot tests pin bugs
- Looking for
- Why correct fixes kept failing the upstream test suites they were sent to.
- Found
- A test that records what the code outputs, not what is right, protects the bug. The fix then looks like a regression.
Found 2026-09-26
Testing whether an edge is real
How I separate a signal from the search that found it.
- A gate must beat no gate
- Looking for
- Whether a liquidity-void entry signal added anything beyond the exits and fees around it.
- Found
- To know what a signal adds, run the same rules without it. A signal that can't beat its own absence adds nothing.
Found 2026-10-02
- Count your own trials
- Looking for
- How many looks my own research took before each result, so it can be discounted like any backtest.
- Found
- A finding reached after many tries deserves the same discount as a backtest picked from many variants.
Found 2026-09-23
- Explaining a move is not predicting one
- Looking for
- Whether order-flow imbalance, which explains most of a BTC move, can predict the next one.
- Found
- A variable can explain most of a price move as it happens and forecast almost nothing about the next one.
Found 2026-10-02
- Pooled numbers hide sign flips
- Looking for
- Whether forecast ambiguity tracks error the same way across data sources.
- Found
- A statistic pooled across segments can describe no segment that exists, and splitting it is where bias gets in.
Found 2026-09-23
- Negative results are results
- Looking for
- Evidence that market makers pull depth from the book just before quotes move.
- Found
- A dead hypothesis still leaves the measuring tool behind, and the tool often finds the real result.
Found 2026-09-22
- Decide the interval before the data
- Looking for
- When to stop collecting order-flow data, decided before looking at it.
- Found
- A result is a number plus an interval. Deciding in advance what width counts as settled stops motivated reasoning.
Found 2026-09-22
Reading risk
Where losses hide in records and strategies that look safe.
- Smoothness hides the tail
- Looking for
- What sits underneath published trading records that look too good.
- Found
- A record that looks too smooth often means the risk hasn't arrived yet, or was averaged away.
Found 2026-09-23
- Looping does not fix a negative edge
- Looking for
- Whether repeating a small losing trade in a loop can make it safe.
- Found
- Repeating a losing bet doesn't spread the risk. Cost grows linearly, risk as a square root, so the loss gets more certain.
Found 2026-09-22
- One regime is one data point
- Looking for
- Whether a result from one session, or one half-year, holds in the next.
- Found
- A result measured in one market regime says nothing about the next, and the sample itself can't tell you.
Found 2026-09-23
Building software that holds up
What only shows up when real people run the code.
- The default is not where it runs
- Looking for
- Why Cernos passed its tests and then failed on first real use.
- Found
- Code leans on defaults it never states, and tests on the developer's machine share them.
Found 2026-09-27
- Trust the live system over the schema
- Looking for
- Which account field really says how much GPU credit you can spend.
- Found
- Documentation describes intent. A running system describes behaviour. Your code has to survive the second.
Found 2026-09-21
- Scope the promise, not the code
- Looking for
- What CreditWatch 1.0.0 could honestly claim on each platform.
- Found
- When a release isn't ready everywhere, narrow what you claim, not what you built.
Found 2026-09-21
- Alerts must not fire on the past
- Looking for
- How runway alerts should behave when someone switches them on late.
- Found
- An alert for a threshold already crossed fires at once, and teaches the user to ignore every alert.
Found 2026-09-21
Working with AI
When a model's output can be trusted, and when it needs a person.
- Agreement is not corroboration
- Looking for
- Whether disagreement between forecasting models is a useful measure of uncertainty.
- Found
- Several sources agreeing is only as informative as their independence.
Found 2026-09-23
- The generator-verifier gap
- Looking for
- Where an LLM loop can run unattended, and where a person has to check.
- Found
- Where checking an answer is easier than producing it, AI can run in a loop. Where it isn't, a person has to check.
Found 2026-10-08
Essays
One decision, walked through end to end.
- Derive exits from costs, don't fit them
- Looking for
- An exit rule for a market-making test that couldn't overfit two trades of data.
- Found
- With two trades of training data, a fitted exit is a search. I built the exit out of measured costs instead.
Found 2026-10-02
- My strategy test failed, and I published it
- Looking for
- Whether the void gate's edge on one session was real, or the only session I had looked at.
- Found
- A gate looked like an edge on the one session I had studied. I registered the test before replaying a fresh one, and all three hypotheses failed.
Found 2026-10-02
- Graph, not grep: what coding agents need from a codebase
- Looking for
- What a coding agent needs from a codebase to change code safely.
- Found
- Grep gives an agent strings. To change code safely it needs callers, callees, and what a change will break. That is why Rig exists.
Found 2026-05-25