【MT5】通貨強弱EAの決済をATR連動へ|トレイリングに下限を設けた理由

作業日記

こんにちは、潤奈です!

今回は、2026年10月6日の通貨強弱EA開発記録です。前回作成した4通貨ランキング型のv3をテストし、損切り・利確を固定pipsからATR連動へ変更しました。

さらに、建値移動とトレイリングもATR連動にしたv4を作成。ただ、こちらはテスト結果が悪化したため、値幅に下限を設ける修正まで進めました。

最終損益だけでなく、途中の下落を見る

朝のv3の分析では、2,014取引の合計が+858.9pipsでした。それでも、途中で下がるところや停滞するところが気になり、取引ログを確認しました。

その後、H4の強弱差に上限を付ける過熱フィルターを追加。建値移動の発動幅を15pipsにしたテストや、H4強弱差の下限を2.0にしたテストも行いました。

ただし、特定の年だけ悪かった時間帯を、すぐに除外したいわけではありません。他の年に取れていた利益まで失わないか、という点も見ています。

夜は、調整に使った2010年〜2019年とは期間をずらして、2019年〜2025年を確認しました。そこでの固定pips版は510取引、合計+104.9pips。最終的にはプラスでも、十分に安定したとは言えない結果でした。

損切り・利確を、そのときの値動きに合わせる

次に考えたのが、相場の変動幅に対して、固定の損切り・利確幅が合っているかという点です。

そこで、値動きの大きさを測るATRを使い、v3の損切り・利確を調整する方式に変更しました。実装の初期設定はATR期間14、損切りがATRの2倍、利確が4倍です。建値移動とトレイリングの幅は、この段階では固定pipsのままです。

以下は、当日の分析出力に残っている結果です。USDJPYのH1を対象とした開発中のバックテストで、実運用成績ではありません。

2019/1/1〜2025/12/31のテスト固定pips決済のv3SL・TPをATR連動にしたv3
取引数510回449回
勝率62.55%64.37%
合計損益+104.9pips+628.7pips
pipsベースのPF1.021.11
累積pipsの最大下落幅561.7pips496.7pips

PFは、利益pipsの合計を損失pipsの絶対値の合計で割った値です。最大下落幅も、確定した取引の累積pipsから算出しています。ロット・手数料などを含む口座損益や、含み損を含む証拠金のドローダウンとは異なります。

ATR版の数値は改善しました。ただし、各回の全入力設定・テスターモデルをそろえた保存資料までは確認できていないため、改善分をすべてATRだけの効果と断定せず、当日の開発比較として扱います。

また、調整期間と比較期間には2019年の重複があります。完全に独立した検証ではありません。後の期間の結果を見て設計を変更している点も含め、最終確認には、期間の重複をなくし、調整に使っていないデータを残す必要があります。

トレイリングまでATR連動にすると、結果は悪化した

損切り・利確をATRに合わせるなら、利益を守る側の幅も合わせた方がよいのではないか。そう考えて、建値移動とトレイリングをATR倍率で計算するv4を作りました。

しかし、2010年〜2019年のテストでは、次の結果になりました。

2010/1/1〜2019/12/31のテストv3:SL・TPのみATR連動v4:建値・追従幅もATR連動、下限追加前
取引数608回598回
合計損益+1,883.6pips+1,197.6pips
pipsベースのPF1.311.18
累積pipsの最大下落幅521.4pips726.1pips

一つの仮説は、ATRが小さい場面では、建値移動やトレイリングの発動が早くなりすぎることです。例えばATRが10pipsなら、1.5倍の建値移動トリガーは15pips、2.5倍のトレイリング開始幅は25pipsになります。

ただ、集計だけで悪化の原因が一つに決まるわけではありません。「ATRに合わせれば必ず良くなる」と考えず、次の修正をテストすることにしました。

MathMaxで、ATR連動の値幅に下限を付ける

10月6日の最後に追加したのが、ATR倍率で求めた距離と固定の最低幅を比べ、大きい方を使う処理です。

建値移動では、最低20pipsとATRの1.5倍を比較します。以下は、当日のv4修正記録からの抜粋です。

double trigger_dist = MathMax(InpMinBreakEvenPips * pips_unit, atr_val * InpBreakEvenAtrMultiplier);

atr_valは価格単位のATRです。最低幅の設定値はpipsなので、pips_unitを掛けて価格単位にそろえてから比較します。

初期設定なら、ATRが10pipsのときは20pips、ATRが28pipsのときは42pipsまで利益が伸びたところで、建値移動の発動条件を満たします。これは発動までの距離で、建値移動後の確保幅は別設定の2pipsです。

トレイリングも同じ考え方です。開始幅は最低35pips、追従幅は最低20pipsとしました。

double start_dist = MathMax(InpMinTrailingStartPips * pips_unit, atr_val * InpTrailingStartMultiplier);
double stop_dist  = MathMax(InpMinTrailingStopPips * pips_unit, atr_val * InpTrailingStopMultiplier);
double step_dist  = atr_val * InpTrailingStepMultiplier;

開始幅のATR倍率は2.5、追従幅は1.5です。更新刻みのstep_distはATRの0.3倍のままで、この日の修正では下限を追加していません。

コードは距離を求める部分だけです。ATR取得、pips換算、保有注文の確認、損切り位置の更新処理などを省略しているため、この抜粋だけでは動作しません。10月7日以降の変更も含めず、10月6日時点の実装を紹介しています。

下限を追加した効果は、次のテストで確認する

下限付きv4は、10月6日23時44分ごろに0エラー・0警告でコンパイルできています。ただし、この日の記録で確認できたのは実装までです。下限追加後のテスト結果は、今回の記事には含めていません。

なお、v4には損失後の再エントリーを一定時間止める機能も追加されていますが、初期設定は0時間で無効です。その効果を確認済みという扱いにはしていません。

今回進んだのは、ATR連動を試し、うまくいかなかった部分に最低幅を設けるところまで。次は基準期間で確認し、良かった数字だけでなく、悪化した期間や取引の変化も見ていきます。

コメント

タイトルとURLをコピーしました