【MQL5】ゴールデンクロスEAを作ろう!インジケーター値と注文・決済ロジックの組み合わせ

MQL5 開発講座

こんにちは、潤奈です( ゚Д゚)!

これまでの連載で、「注文」「決済」「インジケーターの数値取得」という、EA(エキスパートアドバイザー)を開発するための3大要素をすべて学んできました。
今回は、これまでの集大成として、「実際に動くゴールデンクロス・デッドクロスEA」を構築します!

今回作成するコードは、MetaEditorにコピペすればそのままMT5のバックテストで稼働させることができます。
パーツをどうやって組み合わせて1つのEAにするのか、バグの起きないプロ仕様の書き方を分かりやすく解説しますね!


1. 今回作成するゴールデンクロスEAの設計図

プログラムを書く前に、EAがどのようなルールで動くのかを整理しておきましょう。
今回は、最もシンプルで王道なテクニカル分析手法である「2本の移動平均線の交差(クロス)」をシグナルにします。

  • 短期移動平均線(期間10)と、長期移動平均線(期間30)を使用。
  • 買いシグナル(ゴールデンクロス):
    短期MAが長期MAを「下から上に」突き抜けた瞬間。
    👉 すでに売りポジションがあればすべて決済し、新しく買いポジションを0.1ロット持つ。
  • 売りシグナル(デッドクロス):
    短期MAが長期MAを「上から下に」突き抜けた瞬間。
    👉 すでに買いポジションがあればすべて決済し、新しく売りポジションを0.1ロット持つ。

⚠️ 超重要:シグナル判定は必ず「確定足」で行う!

EA開発における非常に重要な鉄則があります。それは、「現在動いている足(インデックス0)ではなく、すでに確定した足(1本前と2本前の足)でクロスを判定する」という点です。

現在進行形の足で判定してしまうと、値動きによって「クロスした!やっぱり戻した!」とシグナルが点滅し、1つの足の中で何度も注文と決済を繰り返してしまう大損バグ(チャタリング)が発生します。
そのため、今回は以下のように判定します。

  • ゴールデンクロスの条件
    2本前の短期MA <= 2本前の長期MA かつ 1本前の短期MA > 1本前の長期MA
  • デッドクロスの条件
    2本前の短期MA >= 2本前の長期MA かつ 1本前の短期MA < 1本前の長期MA

2. 登場パーツを合体させる手順

これまで個別に作ってきたパーツを、以下のようにEAのライフサイクルに合わせて配置します。

  1. グローバル領域:
    注文ライブラリ(CTrade)のインクルード、マジックナンバーやロット数の設定、インジケーターハンドル、およびデータ格納用配列の宣言。
  2. OnInit() (初期化):
    短期・長期MAのハンドル作成、格納用配列の時系列化(ArraySetAsSeries)。
  3. OnDeinit() (終了処理):
    作成した短期・長期MAハンドルの解放(IndicatorRelease)。
  4. OnTick() (チック毎の処理):
    CopyBuffer で短期・長期MAの最新3本分のデータを配列に取得します(配列を時系列順に並び替えているため、最新の0番足から3本分コピーすれば、1本前と2本前の確定足を過不足なく取得できます)。確定足データを元に「ゴールデンクロス」または「デッドクロス」を判定。条件が揃ったら、反対のポジションを決済し、新規に発注します。さらに、無駄な連続発注を防ぐための「新バー判定」もここに組み込みます。

3. コピペで動く!完成EAソースコード

MQL5/MT5特有の挙動(環境やタイミングによるポジション同期の不安定さ、毎チック処理が走るOnTickの特性)を考慮し、今回紹介するEAには「新バーの開始時のみ売買ロジックを実行する新バー判定」と、「ポジション情報を確実に同期・取得するための明示的なチケット選択(PositionSelectByTicket)」という、現場で必須となる2大安全対策を組み込んだ「プロ仕様」の設計にしています!

それでは、MetaEditorを開き、新規作成したEAに以下のコードを丸ごと貼り付けてコンパイル(F7)してみてください!


4. MT5の「ストラテジーテスター」で動かしてみよう!

作成したEAをバックテストで走らせる手順を簡単に解説します。

  1. MT5を開き、キーボードの Ctrl + R を押して「ストラテジーテスター」を開きます。
  2. 「設定」タブで、作成した GoldenCrossEA を選択します。
  3. 通貨ペア(例: USDJPY)、時間足(例: 1時間足)、テスト期間を指定します。
  4. 右下の「スタート」ボタンをクリックします。
  5. テスト完了後、「グラフ」や「バックテスト」タブを開くと、EAがゴールデンクロスとデッドクロスでしっかりと自動売買を繰り返している様子が視覚的に確認できます!

5. まとめ&次のステップ

今回は、これまでの連載で学んだスキルをすべて組み合わせて、実際に動く「ゴールデンクロスEA」を作成しました。

  • シグナルの点滅を防ぐため、判定には必ず「確定足(1本前と2本前)」のデータを使う。
  • 反対のシグナルが出たら、既存のポジションを決済(ドテン)してから新しい注文を出す。
  • MQL5のベストプラクティス(グローバル配列、ハンドルの解放、逆順決済ループ)を組み込むことで、エラーの起きない強固なEAになる。

ついにご自身の手で自動売買EAの基盤を作ることができました!おめでとうございます!

次のステップとしては、急激な相場の逆行から資金を守るための「ストップロス(損切り)とテイクプロフィット(利食い)の自動設定方法」について解説します。
これができるようになれば、実戦に耐えうるEAへとさらに進化させることができます!

今回のコードを動かしてみて「エラーが出てコンパイルできない」「バックテストが始まらない」といったトラブルがあれば、YouTubeのコメント欄やXでお気軽にご連絡くださいね!

🎥 YouTubeチャンネル: 潤奈【FXチャンネル】
🐦 X (Twitter): @zyuna32246

コメント

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