テクニカルEA化
MQL5で「過去〇日間の高値・安値(ドンチャンチャネル)」を取得してブレイクアウトEAを作る基本コード
公開 2026.06.17 最終確認 2026.06.17 Technical
有名な「タートルズ」の手法などで用いられるブレイクアウト戦略(過去20日間の最高値を更新したら買い、最安値を更新したら売り)は、MQL5の CopyHigh() および CopyLow() 関数、または iHighest() / iLowest() 関数を使うことで数十行のシンプルなコードで実装可能です。 インジケーター(ドンチャンチャネル)を呼び出さなくて
テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。
Donchian / EA logic
MQL5で「過去〇日間の高値・安値(ドンチャンチャネル)」を取得してブレイクアウトEAを作る基本コード
結論
有名な「タートルズ」の手法などで用いられるブレイクアウト戦略(過去20日間の最高値を更新したら買い、最安値を更新したら売り)は、MQL5の CopyHigh() および CopyLow() 関数、または iHighest() / iLowest() 関数を使うことで数十行のシンプルなコードで実装可能です。
インジケーター(ドンチャンチャネル)を呼び出さなくても、チャートのヒストリカルデータから直接「指定した期間の配列の最大値・最小値」を取得して現在価格(Bid/Ask)と比較するのが、最も計算が軽くバグの少ないプログラミング手法です。
なぜEA運用で重要か
システムトレードにおいて、ブレイクアウト手法は「トレンドの初動に乗る」ための最も強力でクラシックなロジックです。
しかし、初心者はこれを実装する際「既存のドンチャンチャネルのインジケーター(カスタムインジケーター)を iCustom() で呼び出そう」としてしまいます。カスタムインジケーターの呼び出しはメモリを消費し、バックテストが重くなる原因になります。ローソク足の高値と安値という「MT5が標準で持っているデータ」だけでロジックを組めるようになれば、EAの処理速度と堅牢性は飛躍的に向上します。
仕組み・条件
MQL5における過去最高値(High)の取得コード例:
// 過去20本のローソク足(現在の未確定足 Shift=0 を除く)の最高値を取得
int period = 20;
double high_array[]; // 高値を格納する配列
ArraySetAsSeries(high_array, true); // 最新の足をインデックス0にする
// Shift=1(1本前)から20本分のHighデータを取得
if(CopyHigh(_Symbol, _Period, 1, period, high_array) > 0)
{
// 配列の中で最大の要素のインデックスを見つける
int max_idx = ArrayMaximum(high_array, 0, period);
double highest_price = high_array[max_idx];
// 現在のAsk価格が、過去20本の最高値を上回ったら買いシグナル
if(SymbolInfoDouble(_Symbol, SYMBOL_ASK) > highest_price)
{
// 買い注文の処理...
}
}
バックテストやリアル運用で壊れるポイント
- 確定足と未確定足の混同:
CopyHighの第3引数(開始位置)を0にしてしまうと、「現在動いている最中のローソク足の高値」も比較対象に含まれてしまいます。これだと「過去の高値を今の価格が超える」というブレイク判定が基本的にに成立しなくなったり、ダマシが頻発したりします。必ず1(一つ前の確定足)から過去のデータを取得するのが鉄則です。
どう確認するか
このコードを組み込んだEAをストラテジーテスター(ビジュアルモード)で回し、チャート上に標準の「Donchian Channel」インジケーター(期間20)を手動で表示させてください。 EAが「上側のラインをローソク足が突き抜けた瞬間」に正確にBuyエントリーし、「下側のラインを突き抜けた瞬間」にSellエントリー(または決済)しているかを目視で確認します。
自分の検証スタンス
私はブレイクアウト系のEAを作る際、単なる高値更新だけでなく「ATRフィルター(ボラティリティが十分に拡大しているか)」を必ず組み合わせます。 静かなレンジ相場で過去20日の高値を超えても、それはただの「ノイズ(ダマシ)」に過ぎないからです。「価格の更新」と「エネルギー(ボラティリティ)の放出」が同時に起きた時のみエントリーするようコードを洗練させることが、ブレイクアウトEAを長生きさせるコツです。
関連して読む
- ExnessのRaw Spread・Zero・ProをEA目線でどう使い分けるか
- スプレッド固定バックテストがリアルで崩れる理由
- MT5バックテストで手数料を入れ忘れるとPFが盛れる理由
- Exnessのレバレッジ無制限とEAロット計算
- 最大連敗数からロットを決める考え方
- リペイントするインジケーターをEAのシグナルに使う時の回避策
- トレールストップが逆に利益を減らしてしまう相場環境
テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。
参照した公式情報
- Exness official site (2026.06.17 確認)
- MQL5 documentation (2026.06.17 確認)
免責
本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。