Does the Tokyo-fix gotobi effect still work?
Yes — smaller than the paper that popularised it, and smaller every year since that paper appeared. It is the first sub-daily strategy in thirteen sweeps to clear all six of our gates in both windows, and the only one whose signal is a calendar rather than a chart.
The sweep this came from is #13 in the research log. The strategy it produced is entry #7.
A flow you can read off a calendar
Japanese companies settle invoices on gotobi days — the 5th, 10th, 15th, 20th, 25th and 30th of the month, moved back to the previous business day over weekends and holidays. Importers buy the dollars they owe at the rate their bank fixes at 09:55 Tokyo time, and the banks buy those dollars in the interbank market ahead of the fix. Ito and Yamada (Journal of International Economics, 2017) documented that the client flow at the Tokyo fixing is one-sided and predictable. Bessho, Sugimoto and Suzuki (arXiv 2301.13204, 2023) traded the gotobi version of it: long USD/JPY from 03:00 to 09:55 Tokyo on gotobi days, which they report at a profit factor of 1.46 after spreads over 2018–2020, against 0.51 on matched ordinary days.
Every sub-daily idea in our first twelve sweeps read the market's own state — price shape, volume, session structure, funding, open interest — and the best of them (entry #5) clears the bar in one window and not the next. This one reads none of that. It reads who must buy dollars, and when. The flow exists because of a business custom, not a market regime, and that was the claim under test.
The paper pools its three years and gives no year-by-year breakdown, so whether the effect survived its own publication was an open question. Our first window ends before the paper's sample starts, and most of our second window comes after it.
What was frozen before the run
Nothing here was chosen by us. The days are the custom's, the 09:55 fix is the banks', and the 03:00 entry is the paper's.
- Spec. Long on the five-minute bar closing at 03:00 Tokyo, exit on the bar closing at 09:55, gotobi days, Tuesday to Friday. No stop, no target. The paper's in-sample refinements — a moving-average filter on the entry, a "the morning was profitable" filter on the reversal — were not used.
- Data. Five-minute bid candles, Dukascopy's free feed through 2011 and FXCM's public archive from January 2012, checked bar for bar against each other where they overlap (USD/JPY closes differ by a tenth of a pip at the median). Dukascopy blocked the download part-way through, and the switch was decided on that comparison before any hypothesis ran. The archive has holes, mostly May to August 2026: 27 of 1,028 gotobi days have no entry bar and drop out of both the strategy and the null.
- Costs. 0.006% per side — half a pip at the bottom of the USD/JPY range, a pip at the top — stressed at 0.012%. Rollover is not modelled; for a long USD/JPY held through the New York roll that was roughly zero before 2016 and a credit through most of the second window, so leaving it out is conservative.
- Windows. January 2010 to January 2018, entirely before the paper's sample, and January 2018 to September 2026. EUR/JPY's data starts in 2012, so its first window is six years instead of eight.
- Gates. Net positive in both windows, positive after deleting the best trade in both, max drawdown of 20 or less in sum-of-returns points, and — the sixth — at or above the 95th percentile of a 400-draw null in both windows. For a calendar strategy the null keeps the clock, the exit and the costs and replaces the gotobi days with the same number of random eligible days. It asks the only question that matters here: did the day matter?
- A control and a reverse trade. C1 runs the same clock window on every eligible day, to measure how much of the result is just the Tokyo morning. G2 is the paper's other leg: short from the fix to noon on gotobi days.
- Robustness, for a passer only. The stress cost, and both fills five minutes late — what someone acting on an alert gets instead of a resting order. Entries at 01:00 and 05:00 as a plateau check.
The decision rule was written down first: clear all six gates on USD/JPY and survive the late fills, and it ships as entry #7, on USD/JPY plus any cross that also passes at the stress cost. Anything else is a kill. The whole protocol is in the research log, committed on 8 October 2026 before the run.
What it produced
Returns are the sum of per-trade returns, unlevered, at 0.006% per side. The null column is where the real result lands among 400 random-day draws.
| Cell | Trades | Win % | Profit factor | Return | Net pips / trade | Strip-best | Max DD | Null |
|---|---|---|---|---|---|---|---|---|
| USD/JPY 2010–17 | 490 | 65.1 | 2.74 | +41.7% | 8.1 | +38.8% | 1.1 | 100th |
| USD/JPY 2018–26 | 511 | 61.3 | 1.36 | +11.1% | 2.5 | +10.1% | 3.6 | 100th |
| EUR/JPY 2012–17 | 367 | 62.1 | 1.97 | +19.7% | 6.6 | +18.7% | 1.2 | 100th |
| EUR/JPY 2018–26 | 511 | 61.6 | 1.61 | +16.3% | 4.4 | +14.8% | 1.7 | 100th |
| AUD/JPY 2010–17 | 490 | 55.3 | 1.50 | +25.0% | 4.3 | +21.3% | 3.3 | 100th |
| AUD/JPY 2018–26 | 511 | 54.0 | 1.15 | +7.3% | 1.3 | +5.9% | 3.9 | 98th |
Go down the vetting bar with that table:
- Profitable after deleting the best trade? Yes, in all six cells.
- Two independent multi-year windows? Yes, both positive everywhere.
- More than one instrument? USD/JPY and EUR/JPY. AUD/JPY passes everything except the stress cost, where it turns negative after deleting its best trade in the second window, so under the rule written before the run it does not count toward breadth.
- Net of realistic fees? Yes, and still passing at double the fee on the two pairs that ship.
- Drawdown within reason? The worst cell is 3.9 against a bar of 20.
- Beats random entry timing? 98th to 100th percentile in all six cells; 100th in every USD/JPY and EUR/JPY cell.
The null medians make the case on their own. Random eligible days through the same clock window return +14.2% on USD/JPY in the first window and −1.0% in the second, with 95th percentiles of +21.7% and +5.0%. Gotobi days return +41.7% and +11.1%.
Two trades in the first window and four in the second were held past 09:55 because the exit bar is missing from the archive. A recomputation straight from the bars, with no engine and those days left out, gives USD/JPY 488 trades, +41.5% and a profit factor of 2.74 in the first window, and 507 trades, +10.3% and 1.33 in the second.
The control says the day is what matters
C1 is G1's clock window on every eligible day, gotobi or not:
| Cell | Trades | Profit factor | Return | Net pips / trade | Strip-best | Max DD |
|---|---|---|---|---|---|---|
| USD/JPY 2010–17 | 1,593 | 1.40 | +46.3% | 2.6 | +43.4% | 6.2 |
| USD/JPY 2018–26 | 1,650 | 0.97 | −4.4% | −0.5 | −5.5% | 16.8 |
| EUR/JPY 2012–17 | 1,195 | 1.31 | +25.7% | 2.8 | +24.4% | 4.8 |
| EUR/JPY 2018–26 | 1,650 | 1.12 | +12.7% | 1.0 | +11.2% | 6.2 |
| AUD/JPY 2010–17 | 1,593 | 1.05 | +9.9% | 0.6 | +6.2% | 14.1 |
| AUD/JPY 2018–26 | 1,650 | 0.91 | −15.6% | −0.8 | −17.0% | 21.1 |
In 2010–17 the Tokyo morning itself paid: the yen weakened into the fix on ordinary days too. But gotobi days carried three times the move, 8.1 net pips against 2.6. From 2018 the ordinary-day drift is gone on USD/JPY, at −4.4%, and the gotobi days alone still pay, at +11.1%. What remains is the settlement-day flow, not the time of day.
The reverse trade dies at the null
Shorting from the fix to noon made money on USD/JPY in both windows. It is still killed.
| Cell | Trades | Profit factor | Return | Strip-best | Max DD | Null | Verdict |
|---|---|---|---|---|---|---|---|
| USD/JPY 2010–17 | 488 | 1.48 | +11.8% | +7.9% | 2.3 | 79th | gates 1–5 pass, null fails |
| USD/JPY 2018–26 | 507 | 1.14 | +3.3% | +2.7% | 2.4 | 98.5th | passes |
| EUR/JPY, both windows | 365 / 507 | 1.16 / 0.99 | +3.5% / −0.3% | −2.7% / −1.0% | 4.1 / 4.7 | 83rd / 94.3rd | strip-best fails |
| AUD/JPY, both windows | 488 / 507 | 1.21 / 0.96 | +10.3% / −1.6% | +3.3% / −4.8% | 5.6 / 5.3 | 77.3rd / 89.5th | second window fails |
In the first window random days made nearly as much: the null's median is +8.5% against the real +11.8%. The give-back after the fix is a feature of the Tokyo morning, not of gotobi days, and a strategy that cannot beat its own null in a window is not a strategy, whatever five other checks say. This is the same test that stopped a different candidate of ours from shipping; the page on that is here.
What the paper could not show
It needs the fill at the minute
| Cell | At 0.012% per side | Both fills five minutes late |
|---|---|---|
| USD/JPY 2010–17 | +35.8% · PF 2.38 · strip-best +33.0% | +33.1% · 2.25 · +30.3% |
| USD/JPY 2018–26 | +5.0% · 1.15 · +4.0% | +2.7% · 1.08 · +1.4% |
| EUR/JPY 2012–17 | +15.3% · 1.70 · +14.4% | +14.3% · 1.62 · +13.4% |
| EUR/JPY 2018–26 | +10.2% · 1.35 · +8.7% | +10.6% · 1.36 · +9.0% |
| AUD/JPY 2010–17 | +19.1% · 1.36 · +15.4% | +15.8% · 1.30 · +12.2% |
| AUD/JPY 2018–26 | +1.2% · 1.02 · −0.2% | +2.5% · 1.05 · +1.1% |
USD/JPY stays positive, and positive after deleting its best trade, with both fills late — so the strategy is not killed as execution-fragile. But look at what is left in the second window: a quarter of a pip a trade, against 2.5 on time. This trade wants an order working at the fix, or a fill within the minute. Not an alert acted on at leisure.
It has decayed since the paper
Sum of trade returns by calendar year of entry, in percent:
| 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026* | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| USD/JPY | +5.5 | +8.8 | +3.9 | +9.3 | +3.2 | +2.5 | +5.4 | +3.2 | +3.5 | +1.6 | +2.1 | +2.3 | +3.0 | −1.1 | −0.7 | −0.4 | +0.9 |
| EUR/JPY | — | — | +4.0 | +6.6 | +1.3 | +1.4 | +2.9 | +3.5 | +2.8 | +2.7 | +2.9 | +2.0 | +2.7 | −0.2 | −0.3 | +2.5 | +1.2 |
| AUD/JPY | +1.3 | +9.6 | +2.8 | +2.6 | −2.3 | +6.8 | +1.5 | +2.7 | +2.8 | +1.1 | −1.2 | +1.5 | +2.1 | −0.8 | −1.8 | +1.4 | +2.2 |
*2026 runs to September, with the May–August data hole.
USD/JPY made money in every one of the thirteen years to 2022, then lost a little in each of 2023, 2024 and 2025 — the three years after the gotobi paper appeared in January 2023. That is the decay the pre-registered prior named: a publicised calendar trade gets front-run until it is gone. It is not a collapse. The losses are 0.4 to 1.1% a year, EUR/JPY lost only in 2023–24, and over the last twelve months (October 2025 to September 2026, 46 trades per pair) all three pairs are positive: USD/JPY +1.8% at a profit factor of 1.85, EUR/JPY +2.2% at 3.18, AUD/JPY +3.5% at 2.84. But it is the most important fact on this page, and the entry carries it.
The neighbours are a plateau, not a knife-edge
| Entry (Tokyo) | USD/JPY 2010–17 / 2018–26 | EUR/JPY | AUD/JPY |
|---|---|---|---|
| 01:00 | +46.4% / +17.1% (PF 2.36 / 1.52) | +31.3% / +24.0% (2.22 / 1.75) | +30.8% / +15.0% (1.52 / 1.28) |
| 03:00, registered | +41.7% / +11.1% (2.74 / 1.36) | +19.7% / +16.3% (1.97 / 1.61) | +25.0% / +7.3% (1.50 / 1.15) |
| 05:00 | +30.1% / +3.5% (2.40 / 1.13) | +10.7% / +10.0% (1.56 / 1.44) | +16.0% / +0.8% (1.39 / 1.02) |
All eighteen cells pass the first five gates. The earlier entry does better, and the entry stays at the paper's 03:00 anyway: the neighbour check exists to catch a knife-edge, not to pick a winner after the fact.
What it means for the bar
Twelve sweeps of sub-daily hypotheses read the market's own state, and the best of them clears the bar in one window and not the next — the full account is on the low-timeframe page. The first to clear it in both reads none of that. It reads a business custom, known in advance from the calendar. That is the sense in which "internals beat price shape" generalises: not to more indicators, but to flows with a cause outside the chart.
The edge is real and it is small. Net of the registered cost it is about 2.5 pips a trade on USD/JPY over 2018–26, 1.5 since 2021, and a quarter of a pip if both fills come five minutes late. It lost a little on USD/JPY in each of the three years after it was published. Two things would end it: slow execution, and the decay resuming. Entry #7 says both, and ships as a paper-trade candidate on USD/JPY and EUR/JPY.
How to check it
The harness is committed at scripts/research/sweep13-tokyo-fix.ts and runs on public data with
no keys; --phase vendorcheck prints the Dukascopy-versus-FXCM comparison. The pre-registration
was committed on 8 October 2026 and the results in a later commit, so the git history is the
timestamp. The entry runs in the app on a gotobi_day calendar atom computed from the bar's time
and the holiday list, so live equals backtest by construction, and adopting it seeds a plan with
this exact configuration to re-run.
