TDC Ventures — Forecast Track Record

9 of 11 = 82% in range — every call scored, misses included  |  Last: LME copper cash/3M spread → forecast $120–650 backwardation (c: $300), actual +$180.50 (1 Sep) — HIT  |  Next: Pakistan scrap import (4 Sep 2026) · Turkey shredded scrap CFR (4 Sep 2026)
Every forecast we publish, scored against what actually printed. Updated monthly.

Not trading advice.

Aggregate stats

As of 2 September: eleven forecasts resolved, two open. The newest resolution is our first spread forecast — a call on the gap between copper’s cash and three-month settlements. It landed in range, and the range was so wide that we do not think the result proves much. We explain why below rather than banking it as a win.

MetricValue
Fully resolved11 (15 sub-components: 12 scored, 3 lapsed and excluded)
Open, not yet at target2 (both target 4 September)
Declared but unscored (no observation)0
Hit rate — published-benchmark basis (the number we quote)9 of 11 = 82% (81.8% exact)
Hit rate including our transaction-basis leg9 of 12 = 75%
Direction accuracy7 of 11 = 64% (63.6% exact; 7 of 12 = 58.3% including the transaction leg)
Mean absolute error vs central — price forecasts$3.09/t ($4.44/t including the transaction leg). The spread forecast’s error is shown separately below — see “Why the spread call is not in the average.”
Median absolute error$1.78/t ($1.79/t including the transaction leg)
MAE excluding outliers$1.39/t
August 2026 hit rate2 of 4 = 50%
August 2026 mean absolute error$7.30/t
Best callTurkey Shredded CFR (Kallanish), 2026-06-01 — $0.50/t (+0.12%)
Worst call, published-benchmark basisPakistan CFR Port Qasim, 2026-07-17 — $12.23/t (+3.14%)
Worst call, any basisPakistan Shred 211, transaction basis, 2026-08-06 — $18.00/t (+4.64%). On the spread forecast our central was off by $119.50 (39.8%) — a different unit, described in full below

Signed errors, all ten scored on published benchmarks: +$0.50 · +$0.64 · +$0.75 · +$1.21 · +$1.76 · −$1.79 · +$2.00 · −$2.50 · −$7.50 · +$12.23.

Eight of ten landed in range and seven of ten errors were $2.00/t or less. The outliers dominate the average, and they break in opposite directions — one range broken to the upside, one to the downside — which is why we do not quote an error average without also showing the median.

Why we quote 80% and also show 72.7%. Our 6 August Pakistan shred call declared two resolution bases: an index forecast scored against a published benchmark anyone can look up, and a transaction forecast scored against observed dealt levels. The index leg hit; the transaction leg produced the worst miss on our book. We quote the benchmark basis as the headline because it is independently checkable, and we publish the transaction basis alongside it because excluding an inconvenient leg would make the headline meaningless.

On our known bias. Through late July every error but one was positive — we were forecasting systematically too low, and we said so at the time. August broke that pattern in both directions at once: one call missed $18 high, another $7.50 low. The bias is no longer one-directional, which means the correction is no longer simply “lean the range up.”

By market

MarketScoredIn rangeNotes
Turkey Shredded Scrap CFR43Best call on the book ($0.50/t). One miss came from a publisher re-basing its whole European chain, not from a market move.
Pakistan Scrap Import CFR Port Qasim31Both misses are the extremes of our record: +$12.23 and, on the transaction basis, +$18.00.
Turkey HMS 1&2 80:20 CFR22Both legs in range, errors +$2.00 and +$1.76.
Pakistan HMS 80:20 CFR Port Qasim11Proxy-derived spread call, +$0.75.
LME copper cash/3M spread11Our first spread call. In range, but the central was 39.8% high and the range was very wide — see below.
Dark markets (rails, PNS, windmill plates)3All three excluded from the headline. See “Calls we threw out” below.

Recent resolutions

Target dateMarketBasisForecast rangeActualHitError $/t
2026-09-01LME copper cash/3M spreadLME official settlements$120–650 backwardation (c: $300)+$180.50 (1 Sep)−$119.50 (spread, not a price — see below)
2026-08-06Pakistan shred 211Index (MB-STE-0887)$406–420 (c: $413)$414.21 (7 Aug)+$1.21
2026-08-06Pakistan shred 211Transaction basis$383–396 (c: $388)$406.00 (19 Aug)+$18.00
2026-08-06Turkey shreddedKallanish$390–400 (c: $395)$392.50 (6 Aug)−$2.50
2026-08-06Turkey shreddedFastmarkets MB-STE-0095$390–400 (c: $395)$387.50 (6 Aug)−$7.50
2026-08-06Pakistan PNSdark market — lapsed$382–398 (c: $388)$376 (9 Mar, last pre-target)stale−$12.00
2026-08-06Pakistan windmill platesdark market — lapsed$432–460 (c: $440)$440 (30 Jun, last pre-target)circular$0.00
2026-07-28Pakistan R65 railsdark market — lapsed$432–455 (c: $443)$440 (2 Jul, last pre-target)circular−$3.00
2026-07-28Pakistan HMS 80:20Proxy-derived$378–396 (c: $388)$388.75 (28 Jul)+$0.75
2026-07-17Turkey HMS 80:20Kallanish$362–370 (c: $366)$368.00 (16 Jul)+$2.00
2026-07-17Turkey HMS 80:20Fastmarkets MB-STE-0417$359–367 (c: $363)$364.76 (16 Jul)+$1.76
2026-07-17Pakistan CFR Port QasimFastmarkets MB-STE-0887$385–394 (c: $390)$402.23 (17 Jul)+$12.23
2026-06-01Turkey shreddedKallanish$426–430 (c: $428)$428.50 (4 Jun)+$0.50
2026-06-01Turkey shreddedFastmarkets MB-STE-0095$418–425 (c: $421)$421.64 (3 Jun)+$0.64
2026-06-01Pakistan CFR Port QasimFastmarkets MB-STE-0887$420–426 (c: $422)$420.21 (5 Jun)−$1.79

Why the spread call is not in the average

On 18 August we forecast the gap between the LME copper cash settlement and its three-month settlement for 1 September. We said the gap would stay in steep backwardation, come off its 17 August peak of $535, and not collapse back to the $25–70 range it held through July. We put the range at $120–650 and the central at $300, with confidence marked Low.

It printed $180.50 — cash $14,395.50 against three-month $14,215.00. That is inside our range, so it scores as a hit. We do not think it should be read as one.

Three reasons, all of which cut against us:

  1. The central was wrong by $119.50, or 39.8%. Getting the shape right and the size that wrong is not a good forecast.
  2. The range was $530 wide on a quantity whose actual span over the fortnight was $56 to $290. A range that wide will contain most outcomes. The width produced the result, not the judgement.
  3. The date decided it. On 21 August the same spread printed $56.00 — $64 below our own floor. Had the target fallen four business days earlier, this would have been a clean miss. It then travelled $99 → $189 → $254 → $165 → $180.50 before settling on our target date.

We are not putting this error into our headline accuracy average, and we want to be explicit about why — because the reason could look self-serving. A $119.50 error on a $300 spread between two delivery dates for the same metal is not the same kind of number as an $18.00 error on a $388/tonne cargo price. Averaging them together would move our reported error from $4.44/t to $14.03/t, and that jump would describe a change of unit, not a change in how well we forecast. So the spread call counts in our hit rate and our direction accuracy — those are just ratios — and its error is reported separately, in full, right here. Both averages are shown above.

This is now a permanent rule, not a one-off decision about an inconvenient number. Every forecast we write is tagged as either a price forecast (a traded level) or a spread forecast (a gap between two quoted things). Price and spread errors are averaged separately and always shown together. The rule cuts both ways, which is the point: a spread call with a flatteringly small error is kept out of the headline average too. We set it before we knew whether the next spread call would help us or hurt us.

What we are changing. A single settlement date is close to a coin flip on a quantity this volatile. Our next spread forecast will resolve against an average across the target week rather than one day’s print, so the result measures the call instead of the timing.

One thing that did work. When we wrote the forecast we specified, in advance, that it could only be scored against the exchange’s own published cash and three-month settlements — and that no market commentary could supply either number, even if the official prints were hard to retrieve. That mattered: a widely circulated commentary table dated “1 September” turned out to carry 28 August’s settlements, which would have produced a spread of $165.00 and an error of $135.00 against a date that never printed it. Naming the resolution source before the outcome exists is the cheapest discipline on this page, and this is the second time it has paid.

Our worst call, in full

On 30 July we forecast Pakistan shred 211 CFR Port Qasim on two bases: an index central of $413, and a transaction central of $388 with a range of $383–396.

The index leg hit at +$1.21. The transaction leg missed at +$18.00 — observed transaction levels reached around $406/t CFR Port Qasim on 19 August, ten dollars above the top of our range.

We had named the mechanism ourselves. Our primary upside case was a mill-restocking wave and we sized it at +$5–10/t. It delivered roughly double. Getting the driver right and the magnitude wrong is still a miss.

The standing rule we adopted: a transaction-basis central is only as fresh as the transaction series beneath it. Ours rested on observed levels from earlier in the summer while the published index had already moved. Where a benchmark and a transaction series disagree, the benchmark is the one with a refresh schedule. Since 18 August, every forecast on a market without a published index is written as a spread to a live anchor rather than off a standalone transaction level.

The 6 August Turkey miss

Our $390–400 range was correct on one publisher and wrong on the other, on the same grade and the same date: Kallanish printed $392.50 (in range, −$2.50), Fastmarkets $387.50 (out, −$7.50).

The cause was not a market move. Fastmarkets re-based every leg of its European deep-sea chain by the same amount on the same date. A publisher re-basing is not price transmission, and a forecast that declares a single publisher as its resolution basis will be scored on that publisher’s methodology decisions as well as on the market. We now declare both legs as separate sub-components before the print exists, so neither can be dropped after the outcome is known.

Calls we threw out

Three dark-market forecasts — rails, PNS and windmill plates — resolved by lapsing when no qualifying transaction appeared inside the window. All three are excluded from our headline statistics, and we think the reason matters more than the exclusion.

Two of them scored against the very observation their central tendency had been derived from. One produced a $0.00 “perfect” error that measures nothing except the size of its own anchor; the other scored against a level 150 days older than its target. A scoring rule that manufactures a perfect hit is broken, so we flagged both, excluded them, and changed the rule rather than banking a flattering number.

How we score

  • Scoring window: the first published print on or after the target date. No pre-target interim scoring — an early print that happens to flatter a call is not a resolution.
  • Hit: actual falls inside the forecast range. Partial: within $1/t of a boundary. Miss: more than $1/t outside.
  • Error: signed, against central tendency. Positive means the market printed above our central.
  • Resolution basis is declared in writing before the target print exists. Where two publishers assess the same grade, both are named as separate sub-components in advance, so neither can be selected after the fact.
  • Lapsed calls on markets with no published index are excluded from the headline and shown separately, with the reason.