今日のサマリ(2026-05-17 土)
  • SGD_101_v1 インジ強化: 条件①を 10EMA > 20SMA > 50SMA かつ 20SMA > H1 10EMA に拡張、DTosc SK バッファ追加
  • SGD_BB_State 新規インジ作成: BBエクスパンション/中立/スクイーズを3色ドットで可視化
  • SGD_101_EA v1〜v4 を1日で開発: 最終 v4 が Exness MT5 ST で PF 1.85 / +$303 / DD 0.78% 達成
  • Python live_trader を broker パラメータ化: TitanFX と Exness の 2口座並走を開始(FX PC で 2プロセス)

背景: SGD_101_v1 はチャート補助インジで止まっていた

SGD_101_v1 は SMA10_Touch_Reversal を発展させたチャートインジで、青矢印(アンカー)と緑矢印(DTゴールデンクロス発火)を XAUUSD M5 LONG only で表示する。Forward-only BT で F_BB 単独 PF 1.39 / +1,884pips(直近1年)と「使える素材」ではあったが、実トレード EA への落とし込みはまだだった。今日はこれを一気に EA 化して、Exness MT5 でライブ運用ラインまで進めた一日。

1. インジ側の強化

SGD_101_v1: H1 10EMA / 50SMA を条件①に追加

従来の条件① 10EMA > 20SMA に、より長期側のフィルタとして以下を加えた:

  • 20SMA > 50SMA(M5 のミドル&ロング SMA の整合)
  • 20SMA > H1 10EMA(上位足の方向と整合)

H1 EMA は iBarShift で対応する H1 バーインデックスを取得し、当 M5 バーが H1 足の最初の足(時刻一致)なら 1本古い H1 EMA を使う処理を入れた。確定済み足のみを参照する forward-only ルールを守るため。

あわせて、Buffer 2 として DTosc SK 値を公開(プロットせずデータのみ)。EA から iCustom で取得して F3 フィルタに使うため。

SGD_BB_State (新規): 3色ドットで状態を一目化

BB幅 (BBW = (upper-lower)/middle×100) を過去100本のレンジで正規化し、各足に固定高さのドットを打つサブウィンドウ系インジ。初版は「BBW値そのものをライン+点で表示」だったが、ユーザーから「上下動はいらない」指摘を受けて 3色ドット一本化に刷新。

意味BBW条件
黒点スクイーズ下位 20% 以下
灰点中立20-80% の遷移帯
緑点エクスパンション上位 20% 以上

2. SGD_101_EA v1 → v4 の進化

同じ「F_BB(BBエクスパンション帯)」をエントリ条件とした EA を 4世代で進化させた。各バージョンは Magic 番号で分離して並走可能。

VerMagicTP1TP2初期SLF3備考
v1101010120SMA タッチのみ
v21010102503503段階TP+建値SL
v31010103100500ATR×0.5初期SL追加
v41010104100500ATR×0.5SK≤45 or ≥55採用版

Python BT の大量グリッドサーチで「TP1=100/TP2=500/SL=ATR×0.5」が浮上

TP1×TP2×SL の 128 通り組み合わせで PF/EV/pips/DD を比較。理論値ベースの top 3 はこんな並び:

構成WRPFpipsEVDD
TP1=100/TP2=500/SL=ATR×0.511331.9%2.19+2,369+20.96-327
TP1=100/TP2=350/SL=ATR×0.511331.9%2.06+2,109+18.66-327
TP1=75/TP2=350/SL=ATR×0.511334.5%1.92+1,742+15.42-327

SL=ATR×0.5(タイト)が圧倒的に強いのが特徴。タイトSLで損失を最小化し、TP2=500pips の稀な大物で稼ぐ構造。

v3 を「件数維持しつつ WR/PF 改善」したい → v4 に F3 緩和版追加

v3 単独だと WR 31.9% で「グラフがいびつ」(小さい勝ちと時折の大負け)。WR を上げる方向で TP/SL ばかり弄っても EV が下がるトレードオフが続いたので、エントリ側の F3(DTosc SK の OB/OS 判定)を緩和して入れた:

構成WRPFpipsEV
v3 単独11331.9%2.19+2,369+20.96
v3 + F3(SK≤45 or ≥55)10335.0%2.60+2,681+26.03

件数微減(113→103、月8.6件)で WR +3.1pt、PF +0.41、pips/EV ともに改善。これを v4 として実装。

3. v4 の MT5 ストラテジーテスター実測

Exness MT5(XAUUSDz, M5, リアルティック相当)で実走 ST した結果:

指標v2v3v4
取引数1439681
WR70.63%36.46%40.74%
PF1.211.411.85
損益+$131+$196+$303
平均勝ち$9.07$19.39$20.00
平均負け-$16.90-$7.68-$7.19
最大DD1.53%1.24%0.78%
最大連敗5回 (-$156)10回 (-$76)10回 (-$76)
シャープレシオ5.1511.9320.34
リカバリF0.171.183.06

初期SL=ATR×0.5 と F3 の組み合わせで 平均負けが大幅縮小(-$16→-$7)、最大DDが約半分になった。

途中で大ハマりした点(記録): v2 初版は「TP1未達のままホールド → 価格暴落でテスト終了強制決済 -$1,747」というバグを出した。原因は「ManageSMA20Exit が stage 2(残0.01ロット)のみに限定されていた」こと。stage 0/1 でも 20SMA タッチで全決済するよう修正して解消。Python BT の仕様(全 stage で 20SMA 決済)と実装が乖離していた古典的バグ。

4. Exness MT5 並走稼働の準備

FX PC では既に TitanFX MT5 で Python live_trader が稼働中(主要4PT = PT005 / PT006_v2 / PT101_v3 / PT102_v3 など)。これと同じシグナルロジックを Exness MT5(Raw系、低スプレッド+コミッション $6/lot/side)でも回したい。

live_trader.py を BROKER 環境変数で切替対応

BROKER = os.environ.get('BROKER', 'titan').lower()
MT5_PATHS = {'titan': r"...Titan FX...\terminal64.exe",
             'exness': r"...EXNESS_01\terminal64.exe"}
SYMBOL_SUFFIX = {'titan': '', 'exness': 'z'}

要点:

  • mt5.initialize(path=...) で MT5 パスを明示
  • SYMBOLS / 各 PT モジュールの TARGET_SYMBOLS に動的サフィックス(EURUSDEURUSDz
  • ログファイルを broker 別に分離(live_trader.log / live_trader_exness.log
  • default は 'titan' で既存稼働に影響なし

FXBot_Restart_Exness タスクスケジューラ追加

既存 FXBot_Restart と同じ構造(5分tick + ログオン時 + IgnoreNew + RestartCount 3)で、Action を live_trader_exness.py ラッパーに向ける形で新規登録。ラッパーは os.environ['BROKER']='exness' をセットしてから runpy.run_path('live_trader.py') を実行するだけ。

稼働開始時の hiccup(記録)

初回起動で MT5 から (-6, 'Terminal: Authorization failed')。原因は Exness ターミナルがログイン切断中だったこと。MT5 で手動再ログイン + 自動取引ボタンON + Access Point 切替で復旧、14:28 に live_trader_exness プロセス起動成功(PID 9604)。今は土曜なので「Market closed」で約定は失敗するが、シグナル検出は動いており、シンボル変換も正しく NZDUSDz / USDCHFz / XAUUSDz でリクエストできていることを確認。月曜オープン後に正式発注開始の予定。

5. 並走運用 構成図

FX PC (192.168.1.15)
├── TitanFX MT5 ─ live_trader.py (BROKER=titan)   ← 既存、PID 704
│                  PT005/PT006_v2/PT101_v3/PT102_v3 ほか
│
└── Exness MT5  ─ live_trader_exness.py (BROKER=exness)  ← 新規、PID 9604
                   同じ4PT を XAUUSDz 等で稼働
                   +
                   SGD_101_EA_v4 (XAUUSDz M5 チャート常駐)

Magic 番号は既存PT が 10001-80012(4-5桁)、SGD EA が 1010101-1010104(7桁)で完全に桁数が違うため衝突なし。同一 Exness 口座(277675778)で並走しても識別できる。

所感

「インジで矢印は出る、でも EA に落とすのは別作業」というのが今までずっと先送りされていたが、Python BT のグリッドサーチで TP/SL/F3 の最適解を絞り込めたことで、実装側の判断が一気に楽になった。途中の「ManageSMA20Exit が全 stage で発火しないバグ」と「インジ Buffer 経由の SK 取得が動かない問題」は両方ハマりどころで、後者は EA 側に DTosc を自前移植して回避した。

明日(日曜)はマーケット閉場なので、月曜オープン後の最初の発注を観察するのが次のマイルストーン。Exness Raw系のコミッション体系($0.06/0.01lot/side)が PF にどう効いてくるかも実データで確認したい。

関連: 既存 PT 戦略の経緯は 全7戦略 12ヶ月リアルBT / 同じ入口×違う出口 / PT007 出口革命 あたりを参照。今回の SGD 系は「インジ起点で EA 化」というやや別系統で、既存 PT のスナップショット撮影とは独立に開発した。