Yen -> Treasuries Backtest Report

Origin

From the 1000x podcast episode "MARKET UPDATE: FED Backstops The Yen, Metals Rip, And Neoclouds Rebound" (2026-08-05): USD/JPY suggested as a leading indicator for US Treasuries, signal = spot minus a moving average, rationale being Japan's status as the largest foreign holder of Treasuries and the yen carry trade. This report tests that claim honestly on free data; a null result is reported as a null result.

Data and sign conventions

Series Source Range used
USD/JPY spot FRED DEXJPUS (fallback yfinance JPY=X) 1971-01-04 to 2026-07-31
10Y Treasury yield (DGS10) FRED DGS10 1962-01-02 to 2026-08-06
IEF (7-10Y Treasury ETF, adjusted close) yfinance 2002-07-30 to 2026-08-07

Sign conventions (stated explicitly, load-bearing throughout this report): - DGS10 is a yield. A falling yield means a rising Treasury price, i.e. a positive return for a Treasury holder. Where DGS10 is used directly (premise test only), the Treasury-return proxy is -delta(DGS10) (sign-flipped daily yield change, percentage points) -- an approximation, not duration-scaled. - USDJPY up = yen weakening (more yen per dollar). USDJPY down = yen strengthening. - The backtest itself trades IEF's real adjusted-close return (dividends/interest included), not the DGS10 proxy.

FRED CSV missing-value markers (.) are dropped, never backfilled. Series are aligned on common trading days (inner join), not forward-filled across gaps. MA warm-up NaNs are dropped.

Premise test: does USD/JPY lead Treasury returns?

No-lookahead alignment: the predictor is known at close of day T; the forward Treasury-return window spans T+1 to T+1+horizon, matching the backtest's execution lag. Overlapping windows (horizon > 1) inflate naive OLS significance roughly 4x at 20 days, so all regressions below use Newey-West/HAC standard errors (statsmodels, maxlags = horizon).

Two predictor specifications are reported: the raw daily USDJPY log return (the most literal reading of "USD/JPY moves"), and the MA(50) signal level (spot - MA(50), the middle of the four windows used in the backtest grid) as a robustness check.

n = 13861 aligned observations, 1971-01-04 to 2026-07-31. Subperiod cutoff: 2022-01-01 (the carry-trade/largest-holder story is largely a post-2022 phenomenon; a full-sample null could bury a real recent regime, and conversely a strong recent result must not be sold as a stable decades-long edge).

Full sample

Predictor: raw daily USDJPY log return

Horizon (days) n beta HAC se t-stat p-value sig
1 13859 0.081970 0.103813 0.79 0.4298
5 13855 -0.006701 0.240215 -0.03 0.9777
10 13850 0.192257 0.341786 0.56 0.5738
20 13840 0.401150 0.505507 0.79 0.4275

Predictor: signal = spot - MA(50)

Horizon (days) n beta HAC se t-stat p-value sig
1 13811 0.000203 0.000155 1.31 0.1895
5 13807 0.001064 0.000664 1.60 0.1092
10 13802 0.002334 0.001323 1.76 0.0778
20 13792 0.003912 0.002629 1.49 0.1367

Pre-2022 (before 2022-01-01)

Predictor: raw daily USDJPY log return

Horizon (days) n beta HAC se t-stat p-value sig
1 12718 0.071291 0.109605 0.65 0.5154
5 12718 0.064824 0.256592 0.25 0.8006
10 12718 0.404742 0.367153 1.10 0.2703
20 12718 0.661356 0.538855 1.23 0.2197

Predictor: signal = spot - MA(50)

Horizon (days) n beta HAC se t-stat p-value sig
1 12670 0.000267 0.000162 1.65 0.0990
5 12670 0.001344 0.000699 1.92 0.0545
10 12670 0.002802 0.001396 2.01 0.0447 *
20 12670 0.004404 0.002771 1.59 0.1121

Post-2022 (from 2022-01-01, the carry-trade regime the podcast describes)

Predictor: raw daily USDJPY log return

Horizon (days) n beta HAC se t-stat p-value sig
1 1141 0.217258 0.322885 0.67 0.5010
5 1137 -0.616307 0.612095 -1.01 0.3140
10 1132 -1.744672 0.695963 -2.51 0.0122 *
20 1122 -1.807026 1.205379 -1.50 0.1338

Predictor: signal = spot - MA(50)

Horizon (days) n beta HAC se t-stat p-value sig
1 1141 -0.000580 0.000540 -1.07 0.2831
5 1137 -0.002253 0.001929 -1.17 0.2429
10 1132 -0.002706 0.003558 -0.76 0.4470
20 1122 0.001152 0.005977 0.19 0.8472

p < 0.05, *p < 0.01, HAC/Newey-West standard errors. Beta sign: positive means the predictor and the (sign-corrected) forward Treasury return proxy move together, i.e. yen weakening this period predicts falling yields (positive Treasury returns) at that horizon.

Backtest grid (16 configurations)

Signal: signal = USDJPY_spot - MA(N), N in {20, 50, 100, 200}. Both possible directions are tested since the podcast didn't specify a sign: yen-weakening -> long Treasuries and yen-strengthening -> long Treasuries. Two position variants: long-or-cash (position in {0, 1}) and long-or-short (position in {-1, 1}). 4 windows x 2 directions x 2 variants = 16 configs, run on IEF (7-10Y Treasury ETF, adjusted close -- chosen over TLT for duration match to the DGS10-based premise test).

No lookahead: signal on close T, trade executes at close T+1, position earns the T+1 -> T+2 return. Transaction cost: 5 bps per unit of position change. Benchmark: buy-and-hold IEF over the same period. In-sample 2002-2017 is used only to pick a config (highest in-sample Sharpe); out-of-sample 2018-present is the only verdict that counts.

Full out-of-sample grid (all 16 configs, never just the winner):

Config MA window Direction Variant OOS CAGR OOS Sharpe OOS Max DD OOS Trades
MA20_yen_weak_long_long_or_cash 20 yen-weakening -> long Treasuries long-or-cash -1.62% -0.28 -27.31% 267
MA20_yen_weak_long_long_or_short 20 yen-weakening -> long Treasuries long-or-short -4.27% -0.59 -38.13% 267
MA20_yen_strong_long_long_or_cash 20 yen-strengthening -> long Treasuries long-or-cash -0.60% -0.11 -14.44% 265
MA20_yen_strong_long_long_or_short 20 yen-strengthening -> long Treasuries long-or-short -2.36% -0.31 -30.21% 265
MA50_yen_weak_long_long_or_cash 50 yen-weakening -> long Treasuries long-or-cash -0.37% -0.04 -20.43% 161
MA50_yen_weak_long_long_or_short 50 yen-weakening -> long Treasuries long-or-short -1.80% -0.23 -24.57% 161
MA50_yen_strong_long_long_or_cash 50 yen-strengthening -> long Treasuries long-or-cash -0.64% -0.13 -13.93% 161
MA50_yen_strong_long_long_or_short 50 yen-strengthening -> long Treasuries long-or-short -2.46% -0.32 -23.31% 161
MA100_yen_weak_long_long_or_cash 100 yen-weakening -> long Treasuries long-or-cash 0.18% 0.06 -21.52% 80
MA100_yen_weak_long_long_or_short 100 yen-weakening -> long Treasuries long-or-short -0.72% -0.07 -22.38% 80
MA100_yen_strong_long_long_or_cash 100 yen-strengthening -> long Treasuries long-or-cash -0.22% -0.03 -9.59% 80
MA100_yen_strong_long_long_or_short 100 yen-strengthening -> long Treasuries long-or-short -1.64% -0.20 -19.29% 80
MA200_yen_weak_long_long_or_cash (in-sample winner) 200 yen-weakening -> long Treasuries long-or-cash 0.41% 0.10 -21.21% 66
MA200_yen_weak_long_long_or_short 200 yen-weakening -> long Treasuries long-or-short -0.25% -0.00 -21.33% 66
MA200_yen_strong_long_long_or_cash 200 yen-strengthening -> long Treasuries long-or-cash -0.29% -0.05 -12.99% 66
MA200_yen_strong_long_long_or_short 200 yen-strengthening -> long Treasuries long-or-short -1.77% -0.22 -22.90% 66
Buy & hold benchmark - - - 0.96% 0.17 -23.92% 1

In-sample-chosen config vs. benchmark

In-sample winner (by Sharpe): MA200_yen_weak_long_long_or_cash -- MA(200), yen-weakening -> long Treasuries, long-or-cash.

In-sample (2002-2017) Out-of-sample (2018-present)
MA200_yen_weak_long_long_or_cash CAGR 2.87% 0.41%
MA200_yen_weak_long_long_or_cash Sharpe 0.76 0.10
MA200_yen_weak_long_long_or_cash Max DD -9.08% -21.21%
MA200_yen_weak_long_long_or_cash Trades 155 66
Buy & hold CAGR 5.03% 0.96%
Buy & hold Sharpe 0.76 0.17
Buy & hold Max DD -10.40% -23.92%

Equity curve (out-of-sample, 2018-present)

Equity curve

Bottom line

This is a curiosity/research project, not a trading recommendation. The methodology guards above (no lookahead, HAC errors, full-grid disclosure, pre/post-2022 split) are there specifically so a lucky single config can't be mistaken for a real edge.