RangePeriodを活用した天井圏での逆張りマーチンゲール戦略を自動化!

MQL5を使用して天井圏での逆張りマーチンゲール戦略を自動化するEA(Expert Advisor)を解説します。このEAは、特定の価格範囲(RangePeriod)を基準に天井圏で売り指値を発注し、価格が不利に動いた場合にはマーチンゲール手法を活用して損失を取り戻す構造を組み込むことが可能です。今回はシンプル化のため、売りのみを採用しています。もちろん、最終的には買い戦略も組み合わせたものを使用します。コードの詳細な解説とともに、この戦略の仕組みを深掘りしていきます。


1. EAの概要

  1. 過去の一定期間(RangePeriod)の高値と安値を基準に価格範囲を計算します。
  2. 現在価格がその範囲の上位10%(天井圏)に達した場合、売り指値を発注します。
  3. 損失が発生した場合、マーチンゲール戦略を用いてロットサイズを増加させ、損失を挽回するトレードを行います。

この戦略は、トレンドが反転する可能性が高い天井圏での逆張りを狙い、さらに損失時にはポジションサイズを増やすことでリカバリーを目指すのが特徴です。


2. コード解説

ヘッダー情報

#property copyright "Copyright 2025, Systec"
#property link "https://system-star.com/"

著作権情報とリンクを記載しています。この部分を変更することで、自分のオリジナルコードであることを明示できます。


入力パラメータ

input double LotSize = 0.01; // ロットサイズ
input int RangePeriod = 30; // 過去30本のレンジ期間
input int EntryPeriod = 10; // 過去10本のエントリー基準期間
  • LotSize: 初回トレードのロットサイズ。
  • RangePeriod: 過去の高値と安値を計算する期間。
  • EntryPeriod: エントリー価格を決める基準となるローソク足の本数。

このLotSizeをベースに、損失が発生した際にマーチンゲール(ロットサイズ倍増)を適用する仕組みを後述します。


価格範囲の計算

double highRange = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, RangePeriod, 1));
double lowRange = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, RangePeriod, 1));
double rangeThreshold = lowRange + (highRange - lowRange) * 0.9; // 上位10%の位置
  • iHighest / iLowest: 過去RangePeriod本の中で最も高い値と低い値を取得します。
  • rangeThreshold: 高値と安値の90%ライン(天井圏)を計算します。

指値の条件

if (currentPrice >= rangeThreshold)
  • 条件: 現在価格が上位10%の範囲に達した場合、売り指値を発注します。これは、価格がトレンドのピークに達し、反転する可能性が高いシグナルと見なします。

エントリー価格とリスク管理

double entryPrice = NormalizeDouble(iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, EntryPeriod, 1)) + stopLevel, _Digits);
double takeProfit = NormalizeDouble(entryPrice - avgRange, _Digits); // 利食い
double stopLoss = NormalizeDouble(entryPrice + avgRange, _Digits); // ロスカット
  • entryPrice: エントリー価格は、過去EntryPeriod本の高値に基づいて設定。
  • takeProfit / stopLoss: 過去の平均レンジ(avgRange)を基に利食いとロスカットを設定。これによりリスク管理を強化します。

マーチンゲールの実装

マーチンゲール戦略では、損失が発生した場合にロットを積み重ねて次回トレードに臨みます。このロジックを追加することで、損失回復を効率的に行います。

double currentLot = LotSize;
if (PositionSelect(_Symbol))
{
double lastProfit = PositionGetDouble(POSITION_PROFIT);
if (lastProfit < 0) // 前回のトレードが損失の場合
{
currentLot *= 2; // ロットサイズを倍増
}
}

注文の送信

if (!trade.SellLimit(currentLot, entryPrice, _Symbol, stopLoss, takeProfit, ORDER_TIME_SPECIFIED, expiryTime, "RangeBasedLimitTrader"))
{
Print("OrderSend failed: ", trade.ResultRetcode());
}
  • currentLot: マーチンゲール適用後のロットサイズ。
  • 失敗時の出力: 注文が失敗した場合、エラーコードを出力してデバッグを容易にします。

有効期限の設定

datetime expiryTime = GetEndOfDay();

指値注文の有効期限を本日の23:59:59に設定することで、翌日まで注文が残らないようにします。


3. このEAのメリット

  1. 天井圏での逆張り: トレンドのピークで反転を狙うため、高確率で利益を狙えます。
  2. マーチンゲール戦略: 損失が発生しても次回のトレードで取り返すチャンスを増加。
  3. 自動化: 戦略を自動化することで感情に左右されないトレードが可能に。

4. 注意点

  • リスク管理: マーチンゲール戦略はロットサイズを倍増するため、リスクが大きくなる点に注意が必要です。
  • スプレッドの影響: スプレッドが広い場合、指値や利食い・ロスカットが意図した通りに機能しない可能性があります。
  • バックテスト: パラメータ(RangePeriodEntryPeriod)を最適化するために、十分なバックテストを行ってください。

5. 最後に

今回のEAは、RangePeriodを活用し、天井圏での逆張りとマーチンゲール戦略を組み合わせることで、相場の反転ポイントを狙います。適切なリスク管理を行いながら運用すれば、安定した利益を期待できる可能性があります。自動化により、トレード効率を大幅に向上させるこのEAをぜひお試しください!

ABOUTこの記事をかいた人

当サイトは、システムトレードに関する専門的な知識、技術、経験を皆様と共有することで、真剣なトレーダーの方々にインスピレーション(アイデアの源泉)の供給をいたします。トレーダーの競争力強化に焦点をあて、トレーディングシステムの構築を目的としてその普及に貢献します。 詳細は「概要とサービス内容」をご覧下さい。 ご要望はこちらで承ります。