2026-05-06(水)。XAUUSD専用化したPT101は live 投入から44時間で 192件決済 / -¥20,008 と最大の出血源になった。原因を forward-only BT で掘ったところ、シグナルではなく 決済(TRAIL_RATIO=0.75)の早すぎが主犯と判明。代替案として「BB3にTP、届かなければBB2、それも届かなければ90%戻り」の階層TPを実装、派生1 (MAGIC 10111/10112) として現行PT101と並走させてA/B検証を開始した。
この記事のポイント
- 現行PT101 livetrail0.75 の AvgWin は +¥10 = スプレッド以下 → 構造的に勝てない
- 104日 forward-only BT で決済バリアント9種比較、BB階層TP(PF 2.68 / AvgWin $2.72)が最良
- 新ファイル
pt101_bb.py、MAGIC 10111/10112(派生1 決済1)で実装 - MAGIC命名規則を 101_X_Y = PT101_派生X_決済方法Y に確定
- VPS ⇄ FX PC 完全同期+bot再起動、初エントリーまで確認(09:26 XAUUSD LONG @4603.17)
動機 — 現行PT101の何がダメだったか
5/4 朝に XAUUSD 専用化して投入した PT101(MAGIC 10101/10102)。44時間で 96エントリー、 192件決済の決算は次の通り:
| 項目 | 数値 | 所感 |
|---|---|---|
| 総決済 | 192件 | 96エントリー × 2スロット(TP1/SMA) |
| EXPERT 決済(トレール) | 182件 | 大半がトレールで決済 |
| SL ヒット | 10件 | ハードロス |
| EXPERT 平均損益 | +¥10〜+¥11/件 | 🔴 スプレッド+手数料ですら賄えない |
| SL 平均損益 | -¥2,189〜2,192/件 | 勝ち1件あたり 200倍の損失 |
| 合計損益 | -¥20,008 | 口座最大の出血源 |
勝率は 39.6% で悪くない。問題は 勝ち額の絶望的な小ささ。AvgWin = +¥11 は 0.01 lot で計算すると約 0.7 pips。 TitanFX Blade の XAUUSD スプレッドは 1.8 pips、つまり 「たまに勝っても、損益分岐点に届いていない」。
原因は決済ロジックの TRAIL_RATIO=0.75。「ピーク到達後 25% 戻ったらクローズ」という早利確で、BT上の AvgWin もMFEのわずか 8.28% しか確定していない(= ほぼピーク到達直後に逃げる)。 シグナル自体ではなく決済設計が破綻していた。
forward-only BT で決済バリアント9種を比較
過去 104日(2026-01-22〜2026-05-05)の XAUUSD M1/M5/H1 を MT5 から取得し、 look-ahead を一切排除した forward-only walk で 9 パターンの決済ロジックを比較。エントリーは PT101 と完全同一(H1 10MA向き + M5 10MA反発)、変えたのは決済だけ。
| 変種 | N | 勝率 | PF | AvgWin | AvgLoss | Net | MaxDD |
|---|---|---|---|---|---|---|---|
| V0 trail0.75(現行) | 5,211 | 87.2% | 10.37 | $1.80 | $1.18 | +$7,395 | -$124 |
| V1c trail0.10(90%戻り) | 539 | 43.4% | 23.79 | $3.54 | $0.11 | +$794 | -$2.5 |
| V2b 固定TP RR=2 | 69 | 44.9% | 1.66 | $144 | $71 | +$1,770 | -$869 |
| V2d 固定TP RR=5 | 13 | 38.5% | 3.22 | $428 | $83 | +$1,477 | -$283 |
| V_BB 階層 (BB3>BB2>trail90) | 4,950 | 42.5% | 2.68 | $2.72 | $0.75 | +$3,580 | -$98 |
表だけ見ると V0 の Net $7,395 が最大に見えるが、 AvgWin $1.80 はスプレッドコスト $0.18 にギリギリ勝てる程度で、live の現実約定では消える。実際 同期間(5/4 11:57〜5/5 22:44)の検証では BT V0 +$24 / Live actual -$66 の乖離があり、 「紙のPF」と確認できた。
採用 — BB階層TP(V_BB)
5/6 の決定:「BB3 にTP、届かなければBB2、それも届かなければ90%戻り」というユーザー指示の階層TPを採用。
決済優先度
- SL(最優先・固定 / 直近30本の安値±margin)
- BB2_RETEST(一度BB2σをタッチした後、戻ってきたら決済)
- BB3_TP(BB3σに到達したら決済)— エントリー時のスナップショットを MT5 TP として発注
- TRAIL90(ピークから 90%戻り = TRAIL_RATIO=0.10)— BB2未到達のフォールバック
決済理由ごとの寄与(104日 V_BB BT)
| 決済理由 | N | 全体% | Net | 平均/件 | 意味 |
|---|---|---|---|---|---|
| BB3_TP | 577 | 11.7% | +$1,882 | +$3.26 | 大当たり、最良ケース |
| BB2_RETEST | 1,211 | 24.5% | +$2,193 | +$1.81 | BB3に届かず戻りで利確 |
| TRAIL90 | 3,135 | 63.3% | -$48 | -$0.02 | BB2未到達、ほぼ建値撤退 |
| SL | 27 | 0.5% | -$447 | -$16.56 | ハードロス(少ない) |
面白いのは、利益の100%を BB2/BB3 経由(36%のトレード)から取り、 残り63%は TRAIL90 でほぼ建値撤退という構造になっていること。 つまり「打率は低いが、勝ったときだけしっかり取る」型に変質する。 これは PT002/PT005 のような固定TP系に思想が近い。
MAGIC命名規則の確定 — 101_X_Y
派生戦略を継続的に投入していく中で MAGIC番号体系を整理。 「101_派生番号_決済方法番号」に確定した。
| MAGIC | 戦略 | 備考 |
|---|---|---|
| 10101 | PT101 派生0 決済1(TP1スロット) | 現行 / TRAIL_RATIO=0.75 |
| 10102 | PT101 派生0 決済1(SMAスロット) | 現行 / EA管理のみ |
| 10111 | PT101 派生1 決済1(TP1スロット) | 新規 / BB階層、MT5 TP=BB3 |
| 10112 | PT101 派生1 決済1(SMAスロット) | 新規 / BB階層、TP無 |
| (将来)10121/10122 | PT101 派生1 決済2 | 同じBB階層で別パラメータ |
| (将来)10211/10212 | PT101 派生2 決済1 | 新シグナル変種+同決済 |
実装と投入
scripts/pt101_bb.py(新規)
MAGIC_TP1 = 10111 # PT101 派生1 決済方法1 (TP1スロット, MT5 TP=BB3)
MAGIC_SMA = 10112 # PT101 派生1 決済方法1 (SMAスロット, EA管理のみ)
MA_PERIOD = 10
SL_LOOKBACK = 30
TOUCH_TOL = 0.0010
BB_PERIOD = 20
BB_STD_2 = 2.0
BB_STD_3 = 3.0
TRAIL_RATIO = 0.10 # 90%戻り(フォールバック)
TARGET_SYMBOLS = {"XAUUSD"}
主な関数:
compute_bb(m5_df)— M5 closes ベースの動的BB(period=20、 σ=2/3)check_long/check_short— シグナル判定(PT101と同一ロジック、TP=BB3を返す)init_exit_state(entry_price, direction)— エントリー時の状態初期化evaluate_exit(state, m5_df, bid, ask)— tick毎の決済判定。 SL→BB2_retest→BB3→TRAIL90 の順で評価
scripts/live_trader.py(パッチ5箇所)
import pt101_bbALL_MAGICS/ALL_MAGIC_TP1/ALL_MAGIC_SMAに派生1 MAGIC 追加PT101_BB_MAGICS = {pt101_bb.MAGIC_TP1, pt101_bb.MAGIC_SMA}pt101_bb_exit_state = {}状態辞書追加check_entry_pt101_bb()+check_pt101_bb_exit()関数を新規追加し、メインループから呼び出し
同期と再起動
VPS pt101_bb.py SHA256: 0c8e4976ea847fee... (新規)
VPS live_trader.py SHA256: 0d62047f0f87bb80... (パッチ済み)
↓ scp(FX PCとSHA256一致照合済み)
FX PC C:\Users\y2198\fx_bot\scripts\
↓ pythonw.exe (PID 1492, 5/4 19:53起動) を kill
↓ schtasks /Run /TN FXBot_Restart
新プロセス PID 8424 起動 (2026/05/06 09:25:55)
初エントリー確認
2026-05-06 09:26:01 [PT101_BB] シグナル検出: XAUUSD LONG @4602.35
SL=4546.18 TP=BB3(4622.48) lot=0.01
2026-05-06 09:26:02 TP1発注成功: XAUUSD PT101_BB LONG @4603.17
SL=4546.18 TP=4622.48
2026-05-06 09:26:02 SMA発注成功: XAUUSD PT101_BB LONG @4603.17
SL=4546.18 (TPなし)
2026-05-06 09:26:02 === エントリー完了 ===
MT5 でも MAGIC 10111 / 10112 の2ポジが正常に建ち、 同時刻に既存PT101(MAGIC 10101/10102)も TRAIL_RATIO=0.75 のまま並走中。 これでA/B forward test が開始した。
VPS ⇄ FX PC 完全同期
今回の改修と同時に、scripts と backtest の両ディレクトリで VPS と FX PC のドリフトをチェック:
| 環境 | scripts/ | backtest/ | 状態 |
|---|---|---|---|
| VPS /data/fx_bot/ | 16 | 45 | マスター |
| FX PC C:\Users\y2198\fx_bot\ | 16 | 45 | 同期済み |
| 経理PC(BT機) | - | - | オフライン中(後ほど同期) |
backtest 側は VPS にしかなかった BT スクリプト 19本(pt101_bb_bt.py / pt101_xau_bt.py / mt5_pivot.py 等)を FX PC にも配備。 これで「BT を走らせる場所」が FX PC でも整う(実 MT5 データに即座にアクセスできる利点)。
次の検証課題
- 1〜2週間の forward test:派生0 (10101/10102 / trail0.75) vs 派生1 (10111/10112 / BB階層) の実弾比較
- BTの「楽観的な PF 2.68」が live でどこまで再現するかの検証(M1 vs tick の乖離分を引いて評価)
- BB3 到達率(BT 11.7%)/ BB2_RETEST 率(24.5%)/ TRAIL90 率(63.3%)の live 実測との比較
- 勝った方を残し、PT101 派生 0 か 派生1 のどちらかを撤去
- 同じ BB階層TP の考え方を PT102 / PT006 にも適用検討(PT006 は AvgWin +¥25 の問題、PT102 はトレール30%戻りで類似構造)
