← Station / Broadcasts

The Gold Edge That Died One Minute Late

A research gap is not an alpha gap

BROADCAST · · Postmortem · 11 min read

I have a crude-oil arb running across Hyperliquid, NYMEX, and India's MCX, and the obvious next move was to point it at gold. The backtest printed a clean +0.4%-a-morning edge at 70% hit. It was real for about an hour — until I checked whether you could fill at the price the edge depended on. You couldn't. The teardown: a research gap that wasn't an alpha gap, a look-ahead bug that wasn't the killer, a stale opening print that was, and the moment I realised my live strategy fills on the exact same field.

I run a small paper-trading system that arbitrages crude oil across three venues: a Hyperliquid HIP-3 perpetual, the NYMEX front-month future, and India’s MCX CRUDEOIL contract. The edge it hunts is structural — MCX closes overnight and over the weekend while the other two keep trading, so when Mumbai reopens at 09:00 IST it has to catch up to wherever crude moved while it was shut. Most mornings the gap is under 1% and the system does nothing. Occasionally it’s wide, and there’s a convergence to trade.

It works, in the narrow sense that it does what it’s told and the one real fill it has booked is a small honest win. So the obvious question was what else has this shape. Hyperliquid’s HIP-3 venue lists gold, silver, platinum, copper. MCX has some of the deepest gold and silver futures in the world. COMEX prices both. Three venues, the same overnight asymmetry. If the crude trade is real, gold should be the bigger, cleaner version of it.

It isn’t, and finding out why taught me more about the live system than the live system had on its own.

Why gold should have been the better trade#

On paper gold is the stronger candidate, for three concrete reasons.

The reference leg is cleaner. Hyperliquid’s oil and copper markets track a blend of front and next CME contracts, rolling between the 5th and 10th business day of each month — a slow contaminant in any basis calc, because for a week a month the perp carries a different contract-month exposure than MCX. Gold and silver on the venue are spot markets, XAU/USD and XAG/USD. No roll, no blend.

The contract is deeper. MCX gold turns over thousands of crores a day, well past crude. Tighter spreads, better fills, less of the fee drag that quietly kills small edges.

And the funding leg is benign. Crude on Hyperliquid runs persistently negative funding, which is its own problem; gold sits around +5% APR, small and ignorable. One fewer thing fighting the trade.

I went in expecting gold to be crude-but-better. The point of the exercise was to confirm that and wire it up.

Where the literature stops#

Before building anything I went looking for whether the question was already answered. There’s a substantial academic literature on Indian gold price discovery — and almost all of it is daily-frequency, spot-versus-futures cointegration, finding futures lead spot and the market is “efficient” in that sense. None of it touches the intraday open. The one paper using synchronous intraday data across COMEX, MCX and TOCOM, finding cross-market information impounds within about five minutes, runs on data from 2011.

I caught myself about to cite it to declare the open efficient, and stopped. A 2011 result about a market that has since absorbed a transaction tax, a regulatory merger, an order of magnitude more electronic flow, and two import-duty regime changes is not evidence about 2026. The same paper that found the strongest cross-market linkage also found it broke after India’s 2013 commodity transaction tax — the literature telling you, in its own voice, that this relationship is regime-dependent and does not extrapolate. A search of the preprint databases for anything on the modern MCX gold open returned nothing.

So this was a real research gap. The discipline I nearly skipped: a research gap is not an alpha gap. Something goes unstudied either because the data is hard to get — in which case structure may be hiding — or because practitioners already arb it and there’s nothing left to publish, in which case it’s empty. For the plain two-venue MCX-versus-COMEX basis, my honest prior is the second; Mumbai desks have traded that intraday for years. The only genuinely novel leg was the third one — a 24/7 crypto-native spot perp as the overnight reference, new enough that nobody’s wired into it. That was the part worth testing. The rest I had to find out for myself, because the literature had tapped out around the time I was in school.

The data was all there, which I confirmed rather than assumed after wrongly claiming the perp leg was too new to backfill. Hyperliquid serves hourly candles back to the perp’s late-December inception; MCX gold’s six-month contract carries continuous one-minute history from a single token; USD/INR and COMEX backfill years. About a hundred trading-day opens, no scraping. I built the panel — MCX gold one-minute aligned to each 09:00 open, the international legs as hourly references, split at the 13 May 2026 duty hike because that’s a structural break in the basis level.

The backtest, and the number I didn’t believe#

The first run was the kind of result you distrust on sight. The opening gap — MCX’s open against where the overnight move said it should be — averaged about 0.5%. Entering at the open in the direction of the move and exiting thirty minutes later returned +0.4% per trade at a 70% hit rate, net of a generous cost assumption, across 104 mornings. Silver, run later, printed +1.0%.

That annualises to a printing press, which is the problem. Liquid futures do not hand out 0.4% a morning at 70%. Something was feeding it.

The tell was in the same output, contradicting the headline. The basis gap itself didn’t converge: mean absolute gap 0.50% at the open, 0.50% thirty minutes later. The thing I was supposedly trading — MCX closing the distance to the world — wasn’t happening, yet a naked directional position made money. Those two facts can’t both be innocent.

The look-ahead bug wasn’t the killer#

First suspect was look-ahead, because there usually is some. I’d built the international reference by interpolating the hourly series down to the minute, to line it against the one-minute MCX bars. That’s the bug: to get the interpolated value at the 03:30 open, pandas blends the 03:00 and 04:00 bars — and 04:00 is thirty minutes after the open. The fair value I was scoring the open against had been told where the market would be half an hour later.

I tore the interpolation out and replaced it with a strict as-of lookup — the international value at any timestamp is the last hourly bar at or before it, never after. No future, by construction.

The edge survived. It barely moved. That was the moment it got interesting: the obvious bug was real and was not the explanation. Killing it would have been a satisfying place to stop, with a cleaner backtest and the same false result.

The killer: a price nobody could trade#

The test that broke it was the cheapest one available — does the edge survive entering one minute late?

enter atnet P&L / trade, exit T+30
the 09:00 open print+0.40%
one minute later (T+1)+0.03%
five minutes later (T+5)0.00%

The entire edge lived at the opening print and was gone sixty seconds later. That signature has one cause: the price it depends on isn’t a price you can transact at.

The raw bars say it plainly. On 29 January, gold moved +4.69% overnight while MCX slept; the previous MCX close was ₹167,800. Watch what the 09:00 one-minute bar does to catch up:

09:00 one-minute barMCX pricevs prev close
open — the first printed tick168,000+0.12%
close — the same minute172,104+2.6%
+1 minute173,697+3.5%
+5 minutes176,782+5.4%

The first tick sits where yesterday left off — +0.12%, as though nothing happened overnight. Sixty seconds later the same bar has closed at +2.6%, on real volume; five minutes in it’s +5.4%, fully caught up to the +4.69% the world moved while Mumbai was shut. The backtest had been “buying” at that +0.12% first tick and marking the position against a market already +2.6% within the minute. There’s no liquidity at the first tick — you cannot fill there.

So the honest answer to the research question is the boring one the 2011 paper guessed and couldn’t prove for 2026: the MCX gold open is efficient. It impounds the overnight move inside the first minute. The gap was the distance between an unfillable first tick and reality.

Silver, deeper in the same grave#

Silver reproduced it and then made it worse. Same collapse — +0.99% at the open print, +0.00% a minute later. But silver runs about three times gold’s volatility, so its overnight gaps are bigger, and bigger gaps hit MCX’s 3% daily price band. On the most extreme mornings the market doesn’t reprice, it locks. Here’s 5 February:

2026-02-05 silverMCX pricevs prev close
prev close277,998
09:00 open print266,500−4.1%
09:00 → 09:05, frozen at the band260,304−6.4%

The market gapped down through its 3% limit and then froze — five straight minutes pinned at 260,304 on a few dozen lots a minute, nobody filling anywhere near it. Nine of 101 silver opens were circuit-locked like this, and they carry the largest apparent edge in the backtest. Silver’s bigger number wasn’t a bigger opportunity; it was a bigger illusion, built from stale prints on top of frozen markets.

The same field in the live book#

Then the part that justified the whole detour. My live crude strategy locks its paper fill like this:

fill_price = float(bars.iloc[-1]["open"])   # cli.py:562

The open of the 09:00 one-minute bar — the exact field I’d just proven was an unfillable stale print for gold. If crude behaved like gold, every fill the live system had booked, including the win I was quietly pleased about, was struck at a fantasy price, and the track record was inflated by the artifact I’d just spent an afternoon killing.

So I checked crude the same way — open print against where the bar actually closed:

dateovernight, in the open printwhere the bar closed
2026-05-22+1.70%+1.57%
2026-05-25−4.51%−5.90%
2026-05-26+1.71%+1.43%
2026-05-19−4.15%−4.18%

Zero of eight crude opens were stale. Crude’s opening print already carries the overnight move — even on the −4% and −6% mornings, the open is right there with it, not pinned at the prior close. The fill is real. The +₹222 win stands. I don’t have a clean causal story for why crude’s open reprices and the metals’ doesn’t — some mix of session mechanics and how each contract’s auction prints — but for trusting the live book the whether matters more than the why, and the whether is now measured rather than assumed.

What it actually was#

The headline after the first run would have been “a clean +0.4%-a-morning gold edge, 70% hit, 100 trades.” The headline after the work is: there is no edge, the apparent one was an unfillable opening print, and the same pass incidentally validated the live strategy it was threatening to discredit. Three things to keep, in descending order of what they cost to learn.

A research gap is not an alpha gap. The literature genuinely hadn’t measured the modern MCX gold open, and the absence felt like opportunity. It wasn’t — the market was efficient at the open the whole time, and nobody had published it because there’s nothing to publish and the desks that care already know. The empty shelf meant unknown, not unclaimed.

The obvious bug is rarely the interesting one. The interpolation look-ahead was real and worth killing, but stopping there would have shipped the same false edge with a tidier backtest. The look-ahead was a decoy; the killer was a data-quality assumption I never questioned — that the field labelled open was a price.

The cheapest test decides. “Does this survive a one-minute-late entry” was ten lines and ended the project — and was the same test that, run on crude, cleared the live book. Backtests fail in expensive, multi-week, subtle ways; the line between a tradeable edge and a marketable one is almost always a question you can answer in an afternoon, if you’re willing to ask whether the price you’re filling at is a price at all.

I’m not building the gold strategy. The rig that proved it shouldn’t exist is about a hundred lines, runs on either metal with a flag, and will screen the next HIP-3 commodity with an MCX twin in ten minutes. That’s the deliverable — not an edge, but the machine that kills bad ones fast, and a live strategy I now trust for a reason instead of out of habit.

// Discussion

Comments are powered by GitHub Discussions via Giscus. Sign in with your GitHub account to add a reply, or discuss on X.

Keyboard Shortcuts

// navigate
1 2 3
Manifest · Station · Archive
Cycle sheets
// go to (press g, then…)
g h
Home
g s
Station
g a
Artifacts
g e
Telemetry
g n
Now
g w
Watching
g r
Reading
g u
Uses
g m
Playlist
g c
Contact
g o
Colophon
// station
[ ]
Switch stream (blips / broadcasts)
/
Focus search
// reading a post
Older · newer post
k j
Older · newer post
// general
t
Cycle theme
?
Toggle this panel
Esc
Close panel