FX TRACK RECORD
The honest FX hit-rate scorecard
Two separate FX track records, graded two different ways, shown side by side and never blended into one flattering number. Every call was published before its outcome and graded by a fixed public rule. Winners and losers both count.
A percentage appears only once a bucket has at least 20 graded calls; below that it reads “accumulating”, because a hit-rate from a handful of calls is noise, not evidence.
How we grade — and why you can trust it
Every call was published before its outcome was known and graded by a fixed public rule. Hit-rate = hits / (hits + misses); neutral expiries are shown separately, never hidden. Rates appear only once a bucket has at least 20 graded calls. No hypothetical backtests are shown here.
The evidence doctrine, in plain terms
Published before the outcome. Every call here was timestamped and recorded before the market resolved it — not scored after the fact.
Graded by a fixed public rule. The same rule grades winners and losers. We never re-read old commentary to decide, in hindsight, whether a call was “kind of right”.
Nothing hidden. Losers are shown. Neutral (expired) calls are shown on their own line and excluded from the rate — they never quietly inflate or deflate it. A percentage appears only once a bucket has at least 20 graded calls.
No hypothetical backtests. Nothing on this page is a simulation over history. Only real, forward, published calls are counted.
Dashboard bias
◆accumulating (1/20)The scheduled directional bias for the dollar index and 12 major pairs, published twice each weekday (06:45 & 14:15 Mountain) and graded by how far price moved in the called direction over the signal's horizon.
0 hits · 1 misses · 9 neutral (expired). Rate counts hits over hits+misses (1 graded); the 9 neutral calls are disclosed, not hidden. 10 resolved in total since 2026-04-17T02:53:46Z.
Data quality: 1534 still open (not yet graded); 1523 excluded — published during a price outage and can never be graded (disclosed, never dropped).
Breakdown by conviction — does higher conviction actually win more?
A rate appears only once a bucket reaches 20 graded calls; below that it reads “accumulating”. Small samples mislead — we won’t show them.
Breakdown by pair
How this track is graded
Confirmed if price moved at least the published threshold in the called direction over the horizon; invalidated if it moved that far against; otherwise neutral (expired). Thresholds: 0.3% for G7 & carry pairs and the dollar index, 0.6% for EM-carry & safe-haven.
Every call — winners and losers — is in the public record: the archive and the RSS feed
Report watchlist calls
◆accumulating (0/20)Structured BUY/SELL watchlist calls published in the daily reports stream, each with a trigger and an invalidation level, graded over a fixed five-trading-day window from publication.
0 hits · 0 misses · 0 neutral (expired). Rate counts hits over hits+misses (0 graded); the 0 neutral calls are disclosed, not hidden. 0 resolved in total since 2026-07-19.
Data quality: 4 still open (not yet graded).
Breakdown by conviction — does higher conviction actually win more?
A rate appears only once a bucket reaches 20 graded calls; below that it reads “accumulating”. Small samples mislead — we won’t show them.
Breakdown by pair
How this track is graded
A hit means price touched the trigger and then closed favourably before ever touching invalidation; invalidated means invalidation was reached first (same-bar ties count against the call); no-trigger means neither happened within five trading days. Fixed window: 5 trading days. Grading rules v1.
Every call — winners and losers — is in the public record: the daily reports
Verify this record yourself
You should not have to take our word for it. Both track records are committed to a public git repository, so GitHub timestamps every graded snapshot — a record we cannot silently edit after an outcome is known.
How to check we didn’t edit the record after the fact
1. The report-watchlist calls live in
data/forecast-ledger.json; the dashboard-bias record is exported
to data/bias-ledger-snapshot.json. Both are committed to git —
browse their history to see exactly when each call and each graded outcome
was written.
2. Each changed bias snapshot is tagged in git with the SHA-256 of its
canonical rows (tags named bias-snapshot-…). To recompute it:
take the rows array from the snapshot file, serialise it with
sorted keys and no whitespace, and SHA-256 the bytes. It must equal the hash
below and the git tag on that commit.
Current dashboard-bias snapshot: 1544 rows · sha256 a98d1c4e456e2566d1b6bdd09cf779dd9d7718a25c20f5d5e053383abf2d89e7