,

第12話:ブレーキを緩めたら「入金の二重計上」が見つかった――日曜の総点検

第11話を公開したのが土曜の夜。その翌日の日曜に、記事で「来週の宿題」と書いたことを一気に片付けました。結果として、EAを1本外し、11本の設定を緩め、ライブラリのバグを1つ見つけて直し、最後に「緩めすぎ」を計算で確認して少し戻す、という一日でした。順番に書きます。

1. BB_TrendDoten EURJPY を外した

ワースト2位に挙げた EURJPY 版を、稼働から外しました。9月は無取引、直近1年の検証でも PF 0.99(総利益÷総損失がほぼ1、つまり勝ち負けトントン)で、しかも先週リスク設定だけ上げてしまっていたEAです。代わりの EURJPY 用EAは別プロジェクトで作っているので、それが検証を通るまでこの枠は空けておきます。稼働は11本になりました。

2. DDブレーキを「口座全体」基準のまま緩めた

SessionRevert を止めていたDDブレーキ(証拠金のピークからの落ち込みが一定%を超えると新規停止する安全弁)は、12%・40日停止から 25%・2日停止 にしました。同じ仕組みが EmaVol にも入っていて(15%超でロット半分)、こちらは無効にしました。

理由は、このブレーキが「自分のEAの成績」ではなく「口座全体の有効証拠金」で判定しているからです。11本が同居する口座では、他のEAの含み損で簡単に12%を超えます。SessionRevert が9/17に止まったのも、直接の原因は SmaFlip GBPUSD の損切りと0.21ロットの含み損でした。自分のせいじゃないDDで止まるブレーキは、安全弁というより足かせです。

ここで1つ落とし穴を踏みました。MT5でEAのプロパティ(パラメータ)を変えても、EAは再ロードされず、内部の変数はそのまま残る。SessionRevert の「停止期限」と「ピーク証拠金」は変数に入っているので、ブレーキを25%にしても「停止中、残り827時間」のままでした。結局、チャートから削除して載せ直すことで解消。パラメータ変更で状態がリセットされると思い込んでいた自分への教訓です。

3. 維持率フロアと証拠金の使用上限を緩めた

実はロットを小さくしていた本当の犯人はDDブレーキではなく、全EAに入れている「維持率フロア」(建玉後の証拠金維持率がこの%を割るならロットを縮める)と「余剰証拠金の使用上限」でした。リスクは取ると決めていたので、次のように変更しました。

  • 維持率フロア:150% → 120%(SpikeRider は 200% → 140%)
  • 余剰証拠金の使用上限:60% → 90%(BB は 80% → 90%)
  • SmaFlipMTF の基準資金を SmaFlip と同じにした(先週の変更が、使われていない項目をいじっていて空振りだったため)

証券会社のロスカットは維持率100%なので、120%はかなり攻めた設定です。ここが実質的な上限だと思っています。

4. ピークが「約100万円」になっていた原因

載せ直す前の SessionRevert は、有効証拠金73万円に対して「起動後DD 26.9%」と表示していました。逆算するとピークが約100万円。口座の証拠金が100万円になったことは一度もありません。

ログを遡ったら、9/15 13:29 に3本のEAが同時にこう出していました。「入出金を検知 +280000 → DDピークを 999106 に補正」。入金直前の証拠金は約43万円なのに、補正前のピークがすでに71.9万円(=入金後の証拠金)になっていて、そこにさらに28万円が足されている。入金が二重に計上されていました。

仕組みはこうです。EAは毎ティック「①入出金チェック(負荷を抑えるため10秒に1回だけ履歴を見る)→ ②証拠金がピークを超えていたらピークを更新」の順で動きます。入金の直後のティックでは①がまだ10秒の待ち時間中で飛ばされ、②で「証拠金が急に増えた」のでピークが71.9万円に上書き。8秒後に①が走って、さらに28万円を上乗せ。第8話で「出金でブレーキが誤作動した」のを直すために入れた補正が、入金では逆効果になっていました。

修正は共通ライブラリ側で、入出金を検知したら「前回チェック時点のピーク+入出金額」と「現在の証拠金」の大きい方をピークにする方式に変えました。10秒の窓の中でピークが入金を吸い込んでいても、窓の前の値から計算し直すので二重になりません。出金でも同じ式で動きます。3本を再コンパイルして反映済みです。

5. 8本の再コンパイルと、二重装着の検知

9/12以降コンパイルし直していなかった8本(BB USDJPY、SmaFlip 4本、SmaFlipMTF 2本、SpikeRider)を再コンパイルしました。これで「自動売買がOFFのまま5分経ったらスマホに通知」が全EAで有効になります。あわせて、第8話の事故(同じEAが2つのチャートに載って決済を二重送信)の再発防止として、起動時に「同じ通貨の別チャートに同名のEAがいたら起動しない」チェックを8本に入れました。

ここでも1つ。コマンドラインからコンパイルしただけでは、チャート上のEAは新しいビルドに切り替わりませんでした。プロファイルを別のものに切り替えてから戻す必要があり、そのたびに MT5 は「アルゴリズム取引」ボタンをOFFにします。8/25の事故と同じパターンなので、今回は切り替え直後にボタンを確認して手動でONに戻しました。ログでは OFF が19秒でした。

6. 緩めすぎを計算で確認して、少し戻した

最後に、11本が同時にフルサイズで建てたときの必要証拠金を計算しました(有効証拠金73万円、レバレッジ25倍、全EA同方向の前提)。

EAロット必要証拠金
SmaFlip 4本(基本ロット0.2)各0.21553,849円
SmaFlipMTF 2本各0.10146,730円
BB USDJPY0.16100,333円
SessionRevert(2戦略)0.20125,416円
RegimeTrend+EmaVol各0.0562,708円
SpikeRider(3ユニット)0.35219,478円
合計1,208,514円(維持率60%)

120%フロアで使える証拠金は約61万円。合計121万円に対して半分しか枠がないので、全EA同時は物理的に入りません。しかも常時保有型の SmaFlip 4本だけで55万円を使うので、残りの7本は数万円の枠を分け合うことになります。今日緩めた7本の設定は、SmaFlip が建っている限りほとんど効かない。そしてフロアまで使い切った状態では、全通貨が0.6円逆行するとロスカット圏でした。

「リスクを取る」つもりが「7本分の変更が空振りになる」構成だったので、SmaFlip の基本ロットを 0.2 → 0.15 に戻し気味にしました。これで SmaFlip 4本で約41.5万円(維持率176%)、他の7本に約19万円の枠、ロスカットまでの余裕は約31万円です。

今日のまとめ

  • BB EURJPY を外して稼働11本。DDブレーキ 25%/2日、維持率フロア 120%、SmaFlip 基本ロット 0.15
  • 入金の二重計上バグを共通ライブラリで修正。8本を再コンパイルして通知と二重装着検知を全EAに適用
  • 覚えたこと:パラメータ変更ではEAの内部状態は消えない。プロファイル切替は自動売買をOFFにする。設定を緩める前に証拠金の合計を計算する

ブレーキを緩めたのは、止まる理由を「自分の成績」に限定できていないからで、本当はEAごとに自分の決済損益でDDを見る作りに直すべきです。それは次の改修で。

BANDANAN AI TRADE LAB
このラボの記録は、毎週更新しています
記事の公開はXでお知らせしています。投資助言ではありません。
XでフォロートラックAトラックB

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です