2026-05-04(月)。朝 08:00 に live 投入した PT101(M5 10MA反発+トレーリング75%)が、4時間運用で勝率 49.1%・PF 0.45・純損益 -7,828 JPY という芳しくない結果になった。BTでは「+108K pips/3期間安定」と好成績だったので、live と BT の乖離原因を徹底的に再検証することにした。
この記事のポイント
- look-ahead を完全排除したBTでも勝率 99.1% / PF 3.88 と好成績だった
- しかし平均勝ち pips がスプレッド未満(EURUSD で +0.5 pips)── 数字は幻だった
- スプレッド込みBTで全体 PF が 0.98 に転落、live の -7,828円と整合
- XAUUSD のみ PF 1.90 で唯一勝てる戦略と判明(他5通貨は PF 0.01〜1.13 で壊滅)
- トレーリング率スイープで XAU の改善余地あり(trail 0.30 で PF 5.99)── 別途検証予定
- 即時対応:
TARGET_SYMBOLS = {"XAUUSD"}で PT101 を XAU 専用化、live反映済み
朝の live 結果と BT との乖離
5/4 朝、PT101 が現プロセスに未ロードと判明したため即時投入(MAGIC=10101/10102)。08:00:15 に起動して4時間後の状態を確認したところ:
| 指標 | BT (3期間平均) | live (4時間) |
|---|---|---|
| 勝率 | 高水準 | 49.1% |
| 純損益 | +108K pips/3期間 | -7,828 JPY |
| PF | 2以上 | 0.45 |
「BTで安定してた戦略が live で大負け」── これが本記事の出発点。BT に何かバイアスがあるはずと疑った。
look-ahead 排除BT(スプレッド未考慮)
まず BTに look-ahead が混入していないか確認するため、最も厳しい設計で BT runner を新規作成した:
- 各M5バー i で判定に渡すスライスは
m5_df[:i+1]のみ(過去のみ可視) - エントリーは「次のバー i+1 の OPEN」で約定(look-ahead完全排除)
- SL ヒット or トレーリング75% でクローズ
結果(2026-04 1ヶ月、6通貨):
| 通貨 | 件数 | 勝率 | PnL pips | PF |
|---|---|---|---|---|
| EURUSD | 1,544 | 98.7% | +375.5 | 2.00 |
| GBPUSD | 1,750 | 98.8% | +642.3 | 2.64 |
| AUDUSD | 1,697 | 99.0% | +446.8 | 2.42 |
| NZDUSD | 1,470 | 99.2% | +331.2 | 2.34 |
| XAUUSD | 1,518 | 98.9% | +9,594.8 | 4.37 |
| GBPJPY | 1,947 | 99.6% | +1,249.2 | 6.74 |
| TOTAL | 9,926 | 99.1% | +12,639.8 | 3.88 |
look-ahead は無いのに勝率 99.1%、PF 3.88 の好成績。ところが平均勝ち pips が +0.5 pips(EURUSD)程度しかない。EURUSD のスプレッドは約 1.2 pips なので、これではスプレッドで全部飲まれる。
スプレッド込みBT — 真実が明らかに
エントリー価格と決済価格の両方にスプレッド(片側1本)を負荷してBTし直した:
- LONG エントリー:
next_open + spread × point_size(ASK寄り) - SHORT エントリー:
next_open - spread × point_size(BID寄り) - 決済価格: 上記と逆方向にも片側1本のスプレッドを負荷
| 通貨 | 件数 | 勝率 | PnL pips | PF | 評価 |
|---|---|---|---|---|---|
| EURUSD | 594 | 10.3% | -1,147 | 0.03 | 壊滅 |
| GBPUSD | 1,408 | 83.3% | +82 | 1.13 | 微勝 |
| AUDUSD | 343 | 5.2% | -1,370 | 0.01 | 壊滅 |
| NZDUSD | 891 | 54.1% | -461 | 0.32 | 負け |
| XAUUSD | 1,302 | 86.6% | +4,398 | 1.90 | 唯一勝てる |
| GBPJPY | 1,099 | 31.2% | -1,689 | 0.13 | 大敗 |
| TOTAL | 5,637 | 56.8% | -188 | 0.98 | ほぼゼロ |
スプレッドを考慮した瞬間、PF 3.88 が 0.98 に転落(ほぼゼロ)。XAUUSD だけが PF 1.90 で唯一勝てる戦略だった。朝の live 結果(-7,828円)は嘘ではなく、BT がスプレッド未考慮で幻を見せていただけ。
TP / トレーリング率スイープ(XAUUSD)
XAUUSD で Phase A(TPスイープ)と Phase B(トレーリング率スイープ)を実施した。
Phase A: TPスイープ(TRAIL=0.75 固定)
TP_RR を 1.0〜5.0 まで変えても結果はほぼ同じ(PF 1.90〜2.12)。TPはトレーリングが先に発動するため効果が薄いことが判明。
Phase B: トレーリング率スイープ(TP_RR=1.0 固定)
| TRAIL | 件数 | 勝率 | PnL pips | PF |
|---|---|---|---|---|
| 0.30 | 1,302 | 93.5% | +24,079 | 5.99 |
| 0.50 | 1,302 | 92.0% | +15,803 | 4.27 |
| 0.75 | 1,302 | 86.6% | +5,463 | 2.12 |
| 0.90 | 1,302 | 68.7% | -747 | 0.85 |
トレーリング率 0.30 が圧倒的に優れる(PF 5.99、+24,079 pips)。ただし、これは BT runner 内部の補数表記なので、live 側 pt101.py の TRAIL_RATIO 表記とは意味が反転している点に注意。解釈の再確認は別途実施予定。
決定: PT101 は XAUUSD 専用化
VPS 上の scripts/pt101.py を以下のように修正:
# 対象通貨ペア (2026-05-04 XAUUSD専用化)
# 理由: スプレッド込みBTで XAU PF=1.90 / 他5通貨は PF=0.01〜1.13 で実質負け
TARGET_SYMBOLS = {"XAUUSD"}
加えて check_long / check_short の冒頭で対象外通貨を早期 None リターン。
VPSコード → FX PCへ scp(SHA256照合済)→ FXBot_Restart 経由で live_trader 再起動完了(PID 5884 → 4916)。新ロジック稼働中。
既存PT101オープンポジションの扱い
再起動前に既に open していた XAUUSD 以外の8本(EUR/GBP/AUD/NZD 各2ポジ、含み損 -2,452 JPY)は、そのまま放置。決済はトレーリング/SL に任せる。新規エントリーは XAUUSD のみ。
振り返り — 新たな教訓
- BTで PF 3.88 という数字は look-ahead 由来ではなくスプレッド未考慮の幻だった
- 「BTでPF 7以上は look-ahead を疑う」という社内教訓と並んで、「平均勝ち pips がスプレッド未満なら実取引で負ける」を新教訓として記録
- 「PT101 BT +108K pips/3期間安定」は XAUUSD 単独の成果が大半を占めていた可能性が高い
- XAU 依存度の高さは PT101 だけでなく、他戦略(EW_PURE 等)にも当てはまる構造的傾向。千月堂FX全体の「XAU特化路線」と PT101 XAU 専用化は整合する判断
次の検証課題
- TRAIL_RATIO の意味解釈(
pt101.py表記 vs BT runner 内部表記)の確認と、live 側 0.75 を最適値に変更すべきかの再BT - 「他戦略でも同様にスプレッド込み再検証が必要か」のチェック(PT006/PT007 等)
- 次の週次ログで XAUUSD 単独 PT101 の実 PF 推移を確認
