
GMO FX AUTO PROJECT|Day 7 今回の24時間は、前日の日本銀行・高田審議委員の札幌講演直後にあたる。講演が9月2日に行われたことは日本銀行の公式資料で確認できる。この局面では市場が日本の金融政策正常化を意識しやすく、円買い材料として受け止められた可能性がある。ただし、今回の価格データだけから「講演が3.36円の下落を引き起こした」と断定することはできない。
人間の予想ではなく、「大勢が進む側」を追えるか
USD/JPY自動売買研究、24時間連続運転の記録
2026年9月3日から4日にかけて、GMO FX AUTO PROJECTの24時間連続Forward Testを行った。
GMOコイン外国為替FXのPublic APIから実際のUSD/JPYのBID・ASKを取得し、30万円の仮想資金、1回1,000 USDという条件で、Realtime、Historical、Combinedという3つの判断方式を同じ相場に通した研究である。実注文、Private API、APIキーは一切使っていない。
今回知りたかったのは、単純な勝ち負けだけではない。
相場という絶えず変化する迷路の中で、上か下かの二択を迫られたとき、孤独な予想に賭けるのではなく、多数の市場参加者が動き始めた側へ合流できるか。そして、多数が反転したときに執着せず戻れるか。その判断を機械がどこまで再現できるかを確かめる一日だった。
24時間の概要
Run ID:`RUN-V052-20260902-191110-1cc311cb`
計測期間:2026年9月3日 04:11:20 ~ 9月4日 04:11:17(JST)
市場観測:77,540件
正常データ:65,786件
BLOCKED_DATA:11,754件(全件が異常スプレッド判定)
APIエラー:0件
KLine取得失敗:0件
SQLite整合性:OK
1時間レポート:24本
定期バックアップ:24回
終了時ポジション:全モデルFLAT
USD/JPYのMIDは158.9855円から155.6265円へ低下した。24時間の変化はマイナス3.3590円、率にして約2.11%のドル安・円高である。最高値は159.0135円、最安値は155.3035円、値幅は3.7100円だった。
始値付近の159円から、東京、ロンドン、ニューヨークへ時間が進むにつれて155円台まで下落した。とりわけ昼前から夜にかけて下方向の流れが継続し、16時台には157.371円から156.358円まで大きく振れる場面もあった。21時台には155円台へ入り、その後は安値圏で持ち合い、最後に155.6265円までわずかに戻した。
3つのエンジンの結果
| モデル | 完了取引 | 勝ち | 負け | 仮想損益 | Profit Factor | 最大ドローダウン |
|---|---:|---:|---:|---:|---:|---:|
| Realtime | 441 | 145 | 292 | -4,480円 | 0.578 | 4,565円 |
| Historical | 39 | 17 | 22 | +2,130円 | 2.501 | 489円 |
| Combined | 17 | 10 | 7 | +2,717円 | 4.148 | 365円 |
最終仮想残高は、Realtimeが295,520円、Historicalが302,130円、Combinedが302,717円だった。
ただし、ここでCombinedが「優秀」、Historicalが「有効」と結論づけてはいけない。Combinedはわずか17取引、Historicalも39取引しかない。今回の相場は一方向へ3円以上動いた特殊な一日であり、長期的な期待値を示すサンプルではない。
それでも、ミクロな違いははっきり出た。
Realtimeは小さな変化へ素早く反応し、441回もの売買を行った。しかし、細かい反転を追うほどスプレッドを繰り返し負担し、勝ち145回に対して負け292回となった。方向を当てる能力以前に、「動きすぎること」が損失源になった可能性が高い。
Historicalは過去の値動きとの一致を待ったため取引数が約11分の1となり、Combinedはさらに厳しく複数条件の合意を求めたため17回に絞られた。今回に限れば、頻繁に先頭を奪い合うより、大勢の方向が明確になるまで待った側が、長い下落を比較的うまく捉えた。
これは私が考えている「多数側を選び、多数で進み、多数が戻るときに戻る」という思想に近い。ただし、結果から都合よくルールを変えるのではなく、異なる相場でも同じ構造が残るかを検証しなければならない。
ミクロの気づき――速さより、参加するタイミング
第一の気づきは、反応回数の多さと情報量は同じではないことだ。
RealtimeはLONG 647回、SHORT 673回、WAIT 106回を出した。一方、CombinedはLONG 11回、SHORT 186回、WAIT 426回に加え、UNKNOWN 578回、BLOCKED_DATA 225回だった。Combinedは「分からない」「データが悪い」「まだ待つ」を多く選んだ。
相場では、常に参加していることが多数側にいることとは限らない。ノイズの中でLONGとSHORTを繰り返せば、集団の移動を追っているのではなく、群衆の足音に振り回される。今回のRealtimeのマイナスは、その危険を数値で示した。
第二の気づきは、スプレッドが単なる小さな費用ではないことだ。中央値は0.005円だったが、最大は0.103円まで拡大した。早朝のメンテナンス周辺では異常スプレッド判定が集中し、11,754観測がBLOCKED_DATAになった。
さらに重要な監査結果として、異常スプレッド中にもRealtimeで60件、Historicalで9件の仮想ENTRYが発生していた。これらの損益はRealtimeがマイナス3,396円、Historicalがマイナス446円だった。Combinedは0件だった。
つまり現行版は、データ品質異常時にCombinedを止めても、RealtimeとHistoricalを完全には止めていなかった。このため全件集計をそのままモデル能力と解釈できない。異常時取引を除くとRealtimeは381件でマイナス1,084円、Historicalは30件でプラス2,576円だった。
これは失敗だが、価値のある失敗である。次版では全モデル共通で、DATA_OK以外の新規ENTRYを禁止し、今回の該当取引は研究データ上「汚染あり」として分離する必要がある。
マクロの気づき――円高の背景を、後から物語にしすぎない
今回の24時間は、前日の日本銀行・高田審議委員の札幌講演直後にあたる。講演が9月2日に行われたことは日本銀行の公式資料で確認できる。この局面では市場が日本の金融政策正常化を意識しやすく、円買い材料として受け止められた可能性がある。ただし、今回の価格データだけから「講演が3.36円の下落を引き起こした」と断定することはできない。日本銀行・高田審議委員講演
米国側では、9月3日に第2四半期の非農業部門労働生産性が年率1.4%増、単位労働コストが1.2%増へ改定された。生産性の上昇と労働コストの伸びの抑制は、インフレ圧力を考えるうえで重要な組み合わせだった。米労働統計局・Productivity and Costs
同日、FRBのウォラー理事は、インフレは依然2%目標を明確に上回る一方、最近のデータにはディスインフレの兆しがあると説明した。改善が続けば政策金利据え置きを支持し得るが、8月のインフレが再加速すれば利上げも検討するという、条件付きの姿勢である。発言時点で翌日の米雇用統計をまだ控えており、市場は確定した方向ではなく、次のデータを待つ状態でもあった。FRB・ウォラー理事講演
重要なのは、今回の計測が9月4日04:11 JSTで終わっており、同日夜に公表予定だった米国雇用統計の結果を含んでいないことだ。したがって、この下落を雇用統計の結果で説明するのは明確な時間的誤りになる。これは市場分析におけるlook-ahead biasの一例でもある。米労働統計局・2026年9月公表予定
マクロ材料は相場の背景を理解する助けになる。しかし、値動きを見た後で都合のよいニュースを選べば、どんな結果にも物語を付けられてしまう。システムへ取り込むなら、発表時刻、予想値、実績値、取得可能になった時刻を保存し、価格判断より未来の情報を混ぜない仕組みが必要である。
この24時間に起きた本当の出来事
この一日の主役は、プラス2,717円という数字ではない。
一つ目は、約7万7千件の実市場観測を、APIエラーなし、SQLite破損なし、24回の定期バックアップ付きで完走できたこと。
二つ目は、USD/JPYが3.36円下落する明確な流れの中で、頻繁な反応よりも厳しい合意を待つ方式のほうが良い結果を残したこと。
三つ目は、異常スプレッド時のENTRY制御が全モデルへ届いていない設計欠陥を実データで発見できたこと。
そして四つ目は、利益を出す仕組みと、生き残る仕組みは別物だと分かったことだ。方向を当てても、取引回数、スプレッド、データ品質、再ENTRYの間隔が悪ければ残高は減る。多数側へ合流するには、方向だけでなく「今は参加してよい市場か」を判定しなければならない。
次の研究へ
次に行うべきことは、今回の成績へ合わせて閾値を最適化することではない。
まず、異常スプレッド中の全モデルENTRYを止める安全修正を行い、汚染取引を分離する。そのうえで、レンジ相場、急騰相場、急落相場、重要指標前後を含む複数日のForward Testを蓄積する。
見るべきなのは、勝率だけではない。
スプレッド控除後の平均損益がプラスか
少数の大勝ちだけに依存していないか
RealtimeよりCombinedのほうが一貫して過剰売買を減らせるか
LONGとSHORTで性能差がないか
東京、ロンドン、ニューヨークで再現するか
最大ドローダウンに耐えられるか
未知の期間でも同じ傾向が残るか
今回、機械は強い円高方向を部分的に捉えた。しかし、「大勢側に入れた」と結論づけるにはまだ早い。たった一日の成功は、規則性かもしれないし、偶然かもしれない。
それでも、迷路の中で闇雲に動くより、観測し、待ち、合意し、間違いを記録する仕組みは一歩前進した。
利益より先に、嘘をつかない研究装置を作る。
この24時間で得た最大の成果は、そこにある。
※本稿はPublic APIによる研究の記録であり、投資助言や将来収益の保証ではありません。記載した損益は固定1,000 USDによるローカル仮想計算で、実注文・取引ではありません。

まず最大の発見は、Combinedの利益そのものではありません。「参加しない能力」が明確に数値へ出たことです。
Realtimeは1,426回の判断機会のうち、LONG 647、SHORT 673で、実に92.6%を方向判断に使っています。WAITはわずか7.4%です。対してCombinedは、LONG 11、SHORT 186しかなく、WAIT+UNKNOWN+BLOCKED_DATAが1,229回。つまり86.2%の時間を参加しない側へ回していました。
ここが今回の24時間で最も面白いところです。
相場は159円近辺から155円台へ、ほぼ一方向に3.36円落ちました。その環境でRealtimeは毎時約18.4取引、Historicalは1.63取引、Combinedはわずか0.71取引です。それでも損益は、
モデル取引/時勝率1取引平均損益24h損益最大DDRealtime18.4約32.9%-10.2円-4,480円4,565円Historical1.63約43.6%+54.6円+2,130円489円Combined0.71約58.8%+159.8円+2,717円365円
という形です。
これはかなり鮮明です。
Realtimeは相場を見すぎています。
一方Combinedは、相場をほとんど「見送っています」。
そして面白いことに、最も見送ったモデルが最も高い損益と最小DDになっています。
Realtimeの問題は「方向予測能力」だけではない
441回という数字はかなり多いです。
24時間で割ると18.4回/時ですから、平均すると約3分15秒に1回、完了取引が発生している計算になります。
今回モデルの判断自体は約60.6秒ごとです。
つまりRealtimeは、
市場を見る → 少し変わる → 判断する → 入る → また変わる → 出る
を猛烈な頻度で繰り返しています。
今回USD/JPYは大局的には約3.36円下落しています。その「大きな川」が流れている横で、Realtimeだけが岸辺の小波を追い続けていた構図です。
これは今後かなり重要です。
Realtimeを廃止する必要はありません。
むしろRealtimeは、
エントリー判断装置ではなく、市場のセンサー
として使う方がよさそうです。
Realtimeの役割を「売買する」にするとノイズを食べますが、
加速した
反転しかけた
ボラが増えた
SHORT圧力が強くなった
という情報をHistoricalやCombinedへ渡すセンサーなら非常に価値があります。
これは当初考えていた新アーキテクチャとかなり整合しています。
BLOCKED_DATAは想像以上に重要です
77,540観測のうち11,754件ですから、
15.16%がBLOCKED_DATA
です。
これは結構大きいです。
ただし全件が異常スプレッドで、APIエラー0、KLine失敗0なので、「データ取得システムそのものが壊れていた」わけではありません。
そして、もっと重要なのはこちらです。
異常スプレッド中の取引は、
Realtime 60件、-3,396円
Historical 9件、-446円
Combined 0件
でした。
Realtimeの60件は全441件の13.6%しかありません。
ところが、この60件だけで**Realtime総損失4,480円の約75.8%**を生んでいます。
これは非常に大きな発見です。
異常スプレッド取引を取り除くとRealtimeは、
-4,480円 → -1,084円
になります。
まだ負けています。
しかし意味が全然違います。
「Realtimeアルゴリズムが完全に駄目」
ではなく、
Realtimeの弱点 + データ品質ゲートの実装漏れ
が重なっていた、と分解できるからです。
さらに、
異常時Realtime平均損失:約 -56.6円/取引
正常時Realtime平均:約 -2.85円/取引
です。
これは猛烈な差です。
Historicalも同じで、
異常時:約 -49.6円/取引
正常時:約 +85.9円/取引
になります。
したがって次版で、
DATA_OK != true の場合、全モデルENTRY禁止
を実装するのは単なる安全対策ではありません。
戦略性能そのものを大きく変える修正です。
もう一つかなり気になる数字があります。
Realtimeの441完了取引に対して、
145勝+292敗=437件
です。
4件足りません。
おそらく損益ゼロ、FLAT、特殊Exitなどでしょうが、ここは必ず確認してください。
小さい話に見えますが、研究装置では、
441 = 145 + 292 + ?
の「?」を残してはいけません。
次版では WIN / LOSS / BREAKEVEN / INVALID / RECOVERY など、完了取引の分類合計が必ず総数と一致するようにした方がいいです。
Combinedは本当に下落を認識していたのか
ここはかなり興味深いです。
Combinedの方向シグナルは、
LONG 11
SHORT 186
です。
SHORT : LONG ≈ 17 : 1
でした。
つまり結果として利益になっただけではなく、今回の3.36円の円高局面で、Combined内部でもかなり明確にSHORT方向へ偏っていました。
これは重要です。
ただし、ここから、
Combinedは円高を予測できた
とはまだ言いません。
正確には、
円高トレンドが形成された後、その方向へ強く整列した
可能性が高い。
これこそ今回狙っていた、
「未来を当てる」ではなく「大勢が動いた側へ合流する」
に近い挙動です。
そしてCombinedは197回しか方向シグナルを出していません。
1,426判断中13.8%です。
残り86.2%はWAIT / UNKNOWN / BLOCK。
これはかなり極端な「忍耐モデル」です。
私はこちらの数字の方が、+2,717円よりずっと評価できます。
ただしCombinedにも一つ警戒点があります
今回の始値から終値まで1,000 USDを単純にSHORTしていただけなら、スプレッドを無視した概算で、
約+3,359円
です。
Combinedは+2,717円。
単純な「最初から最後までSHORT」より少ない。
もちろんこれはCombinedへの批判ではありません。
開始時点で未来の下落を知っているわけではないので、この比較は完全に後知恵です。
ただ、今後のForward Testでは非常に良いベンチマークになります。
毎日、
Buy & Hold
Sell & Hold
Random
Realtime
Historical
Combined
を並べた方がいいです。
そうすれば、
「たまたま一方向相場だったから儲かっただけ」
なのか、
「途中から方向を認識して、本当に意味のあるタイミングで参加した」
のかが見えてきます。
これは次版にぜひ入れたいです。
私がこの24時間で最も高く評価する順位
損益順位なら、
Combined > Historical > Realtime
ですが、研究成果としては少し違います。
第1位はData Quality Gateの欠陥発見です。
これだけで将来の巨大な誤差源を一つ消せます。
第2位が、
過剰売買の害を441件という実データで確認できたこと。
第3位が、
Combinedの棄権能力が機能した可能性。
そして第4位が利益です。
+2,717円は一番最後です。
これはかなり健全な順序です。
次のForward Testで私はここを変えたい
今回の結果を見て、閾値を「Combinedがもっと勝つように」変更するのは反対です。
それをすると、一日目からカーブフィッティングが始まります。
次はアルゴリズムの売買条件にはなるべく触らず、
全モデル共通DATA_OK gateだけ修正して、同じロジックでもう数日走らせる
のが一番価値があります。
そして追加したいものがあります。
Market Regimeラベルです。
今回の24時間なら、おそらく後から、
STRONG_DOWNTREND
に分類されます。
次は、
RANGE
UPTREND
DOWNTREND
HIGH_VOLATILITY
LOW_VOLATILITY
EVENT_PRE
EVENT_POST
などを機械的に保存する。
そうすると数週間後、
Realtimeはレンジでは勝つ
Historicalは緩いトレンドで強い
Combinedは強いトレンドで強い
という可能性を検証できます。
そこまで行けば最終Combinedは単なる多数決ではなく、
「今の市場では誰の話を聞くべきか」を決めるモデル
に進化できます。
これが、私はかなり面白いと思っています。
今回の結果から私が付ける暫定判定は、
Realtime:黄信号。ただし捨てない。センサーとして価値あり。
Historical:有望。ただし30正常取引では全く不足。
Combined:非常に有望。ただし17取引では評価保留。
Data/運用基盤:24時間完走、APIエラー0、SQLite正常、24バックアップ。ここは明確に成功。
そして一番大きいのは、
「予想を当てるシステム」から、「参加すべき時だけ参加するシステム」へ、数字の側から方向が見えてきたことです。
これは今回の24時間で初めて出てきた、本物の手応えだと思います。
次週は今回の一方的な方向性から、5営業日をかけて、
目標の実注文に向けての実験に移行します。
GMO FX AUTO関連のPythonプロセスは稼働していませんでした。停止済みであることを確認し、残っていたGMO_FX_AUTOのターミナルウィンドウを閉じました。
次期5営業日版の完成目標:
実装・単体試験完了:9月5日(土)
オフライン再生・復旧試験:9月6日(日)午前
最終Readiness Check・コード凍結:9月6日(日)18時まで
本番開始予定:9月7日(月)07:00 JST
月曜7時の開始前に、起動コマンド、停止方法、保存先、凍結版SHA-256、テスト結果をまとめて提示します。5営業日運転は事前検証がすべて通った版だけで開始します。