How Far Does a Market Shock Travel?
Two market events, one identification problem, and a block-Hawkes experiment.
The previous piece followed the JPY shock end to end: turnover, risk transfer, exposure, funding path. This one starts from that shock and a second, unrelated market event, and asks a different question — not how big was the move, but how far did it actually reach, and can we ever tell how it got there.
A shock’s magnitude is easy to measure and, on its own, incomplete. On 30 July 2026, USD/JPY fell about 2.1% in an hour. On 12 June, SpaceX started trading on Nasdaq and at least five tokenized wrappers had to answer for it on-chain. Neither number says how far the disturbance actually reached, or whether anything that moved afterward was actually caused by it.
The first half of this piece measures the footprint of both shocks. The second half asks a harder question the footprint alone can’t answer: when two markets move together, is one exciting the other, or are both just reacting to the same push? That’s an identification problem, and it’s the subject of a controlled experiment — a block-structured Hawkes process, calibrated and tested against a known truth — that this piece reports as its main technical result.
What I mean by a shock’s radius
Call it a shock’s radius, loosely: the set of markets that show an unusually large response, relative to their own normal behavior, in the window after the event. This isn’t a formal estimator; it’s a way of organizing three questions that turn out to be more useful than “how big was the move”:
- Localization — which markets moved, which didn’t.
- Breadth — did the group of responding markets stay small, or grow.
- Persistence — did the response fade, hold, or reverse.
This maps the footprint, not the transmission mechanism. Later, the Hawkes experiment tests why those are different questions.
SpaceX: large local activity, small ending net route flow
At least five tokenized wrappers quote against SpaceX stock — issuer, redemption terms, and route status for each are mapped in Markets Are Full of Roads. SPACEX (PreStocks) is the one under study here: it names SPCXx as its issuer-designated conversion target, with no holder-executable route into any of the other four.
The listing did not coincide with the volume peak. Daily SPACEX volume here is observed raw on-chain DEX volume, measured in USD notional rather than token units; no separate wash-trading classification is imposed on it. Normalized to a 2026-02-12 → 2026-04-30 baseline, SPACEX volume peaked at about \$21.5 million on 15 April, ran at about 0.47× its own baseline during IPO week itself — below baseline — and fell to roughly 0.02× by late June and 0.01× by August. It isn’t listing-specific, either — Markets Are Full of Roads already ruled that out: PreStocks tokens with no IPO to react to fell on the same schedule, leaving the actual cause unidentified.
Large gross movement is not the same thing as a large persistent net flow: most gross traffic is offset in the reverse direction, and the remaining 303-token net balance is an accounting quantity, not a count of holders who converted.
JPY: huge source move, narrow +60m footprint
USD/JPY fell about 2.1% in the hour after 13:35 UTC on 30 July. That clock was frozen from contemporaneous market and wire reporting before the cross-asset analysis was run. Subsequent official reporting confirmed Japanese intervention on 30 July and a coordinated U.S.–Japan intervention on 31 July; those later confirmations validate the intervention episode at the day level, not the specific 13:35 UTC transaction. Against 25 prior same-horizon windows, that native move maps to a robust standardized score, z-MAD, of about −101 — not a literal 101-standard-deviation Gaussian tail, but a genuine signal: USD/JPY’s typical hourly move is small enough (MAD-scaled denominator on the order of two basis points) that even a real ~2% move produces a large standardized number.
DXY, the broad dollar index, is the only other instrument that moves clearly: down 0.55%, z-MAD near −6.7 — an order of magnitude smaller than the epicenter, but a legible response in the broader dollar complex. Past DXY, the eight-instrument panel goes quiet: nothing else moves clearly beyond noise once Gold and Nasdaq are set aside as confounded — the previous piece works through that confound, and the Hyperliquid funding-path evidence behind it, in full.
In both cases, the observable response narrows substantially away from the headline quantity. SpaceX’s ending net route flow is a fifth of its gross traffic; JPY’s clean footprint is one currency pair and its closest dollar-complex neighbor.
A footprint is not a propagation path
These charts map the footprint. They do not tell us how the footprint formed.
Two markets moving in the same window are consistent with two different mechanisms. One is common forcing — an outside shock \(Z\) hits both \(A\) and \(B\) independently:
\[Z \to A \qquad Z \to B\]The other is true propagation — the shock hits \(A\), and \(A\)’s own activity then excites \(B\):
\[Z \to A \to B\]Contemporaneous co-movement, and even simple lead-lag (A moves a few minutes before B), can look nearly identical under either story. A chart overlay can’t tell them apart. The controlled experiment below tests that distinction directly — and it’s why this article doesn’t claim SpaceX’s listing caused anything in JPY, or that JPY caused anything in crypto.
The Hawkes experiment
Separating those two mechanisms needs more structure than a correlation. A Hawkes process models the arrival times of discrete events — trades, fills, price jumps — through a conditional intensity: the rate of new events given everything observed so far. The proof-of-concept fits this directly at the cluster level, not per individual asset: each economic cluster (a currency complex, a wrapper universe, a sector) is represented by one counting process, with K = 5 clusters in total. The fitted model is
\[\lambda_a(t) = \mu_a + s_a(t) + \sum_b \int B_{ab}\, k(t-u)\, dN_b(u)\]\(N_b\) is cluster b’s event process, \(\mu_a\) is cluster a’s baseline intensity, \(s_a(t)\) is explicit external forcing, \(B_{ab}\) is the conditional excitation from cluster b into cluster a, and \(k(u)\) is a shared temporal kernel — here the simple exponential \(k(u) = \beta e^{-\beta u}\), with \(\beta = 1.0\), a characteristic decay timescale of about \(1/\beta\). For this proof-of-concept, each economic cluster is represented by one counting process; \(B_{ab}\) therefore measures cluster-b-to-cluster-a conditional excitation directly, not a coefficient shared across many individual asset pairs within a cluster. An asset-level block model — many assets per cluster, one shared \(B_{ab}\) per cluster pair — is a natural later generalization, but it is not what’s fitted here.
The test object is a single edge: cluster 0 (the source) into cluster 1 (the target), coefficient \(B_{10}\). The identification question is a hypothesis test — \(H_0: B_{10} = 0\) against \(H_1: B_{10} > 0\) — with external shock forcing entered as its own explicit term, kept separate from the excitation term in every world below.
Controlled data-generating processes
The proof-of-concept doesn’t test the model against real data. It tests it against three synthetic worlds where the truth is fixed by construction, so the method can be graded before it ever touches a real market.
World B and World C can look deceptively similar in a same-window activity chart: both clusters become active around the shock, but only World C contains a \(C_0 \to C_1\) excitation edge. World A is the cleaner source-only null: \(C_1\) receives neither direct shock forcing nor cross-excitation from \(C_0\), so its event process stays at baseline apart from sampling variation. World B is the adversarial case built specifically to fool a naive “both moved, so they must be linked” reading.
Calibration and recovery
Under the source-only null (World A), evaluated on 100 held-out replicates independent of the 200 used to calibrate the threshold, the test rejected 4/100 = 4% of the time [Wilson 95% CI: 1.6%–9.8%] — close to the nominal 5% a well-calibrated test should hit. Under direct common forcing (World B), the harder adversarial case, the false-positive rate was 7/100 = 7% [3.4%–13.7%]: both clusters moving around the same shock pushes the test a little further from nominal, but the interval still comfortably overlaps 5%. When a true \(C_0 \to C_1\) edge of \(B_{10}^{\text{true}} = 0.45\) was actually present (World C), the test detected it 90/100 = 90% of the time [82.6%–94.5%]. Across those same propagation-evaluation replicates, the mean recovered coefficient was \(\text{mean}(\hat{B}_{10}) \approx 0.475\) against the true 0.45 — an average upward bias of about 0.025. Per-replicate \(\hat{B}_{10}\) values were not archived in the frozen output, so no dispersion statistic beyond that mean is reported here (see the Appendix below).
In this controlled, fully-specified setting, the static block-Hawkes design separates common forcing from genuine cross-cluster excitation with useful power. That’s a statement about the identification strategy, not about any real market: neither SpaceX nor JPY was ever fit with this model, and \(\text{mean}(\hat{B}_{10}) \approx 0.475\) describes the simulation, not a claim about how far a real shock travels through real markets.
State-varying excitation remains unresolved
A harder version of the model let the excitation coefficient itself differ between calm and shocked regimes — \(B_{\text{normal}}\) vs. \(B_{\text{shock}}\) instead of one fixed \(B_{10}\). The state-varying extension did not pass its sanity gate. Under the state-null data-generating process (true \((B_{\text{normal}}, B_{\text{shock}}) = (0.45, 0.45)\)), it recovered \((0.325, 0.550)\), creating a spurious difference between normal and shock coefficients where none exists. Under the true state-change data-generating process (true \((0.45, 0.80)\)), it recovered \((0.275, 0.425)\), preserving the sign of the change but substantially under-recovering its size. I therefore leave the state-dependent extension unresolved rather than debug it further here. Full contour and code are in the Appendix below.
Closing
The two empirical cases show bounded observable footprints: SpaceX’s gross activity was five times its ending net route flow, and JPY’s clean cross-market signature stopped at DXY. Those cases motivate an identification problem but do not identify transmission paths. The controlled experiment is where that problem gets an answer: a cluster-level Hawkes model separates explicit common forcing from genuine cross-cluster excitation with useful discrimination at the frozen design point, while the state-varying extension doesn’t yet pass the same recovery standard.
Markets are connected. Both cases here still had boundaries, and telling why two markets moved together from whether they did takes more than a shared chart window.
Appendix
- Hawkes experiment: code and frozen results — gist.github.com/egpivo/911ad78e26a44abc65c9fb86dc6b4aee.
- SpaceX: Dune Analytics (
dex_solana.trades,tokens_solana.transfers), HeliusgetAsset. Baseline 2026-02-12 → 2026-04-30; raw on-chain DEX volume in USD notional, no wash-trading filter. Flow frozen 2026-06-12 → 2026-08-14 and activity 2026-02-01 → 2026-08-14 — the same freeze the 30 August piece uses; window medians are true medians. Stamp:shock-to-migration/projects/spacex/data/FREEZE.txt. - JPY: Dukascopy (USD/JPY), Yahoo Finance (DXY, gold, Nasdaq, Nikkei futures, US 10Y), Binance (BTC, ETH).