はじめてのEAを作ってみた(2.実際に作ってみた編)

EA開発記録

〜AIくんと一緒にコーディング〜

こんばんは、minovskyです。

前回の記事では、AIくんと一緒にEA(自動売買プログラム)のロジックを決めました。

そしてついに今回は、そのロジックをMetaTrader4(MT4)上で動くEAとして形にする挑戦です。


EAを作る準備

MetaEditorを開くと、左側によく変わらないフォルダ一覧と、グレーの画面。

プログラミングの経験が無いと、まるで未知の世界ですね。

AIくん
AIくん

大丈夫ですよ!MT4のEAは、基本の構造さえ分かれば意外とシンプルなんです。

minovsky
minovsky

よし、一歩ずつやってみよう!

”ファイル(F)” → ”新しいファイル(N)” をクリックします。

MQLウィザードが表示されるので、「エキスパートアドバイザ」が選択された状態で「次へ(N)」をクリックします。

名前と著作者を入力し「次へ(N)」をクリックします。

チェックなしのまま「次へ(N)」をクリックします。

チェックなしのまま「次へ(N)」をクリックします。

ファイルが作成されました。


EAの基本構造を理解する

AIくんがまず教えてくれたのは、EAの「骨組み」でした。

以下がAIくんが出力したMQL4のコードです。

//+------------------------------------------------------------------+
//|                                                 MA_Cross_v01.mq4 |
//|                                     Created by minovsky & AI-Kun |
//+------------------------------------------------------------------+
#property strict

// パラメータ設定
input int ShortMAPeriod = 20;   // 短期移動平均線
input int LongMAPeriod  = 80;   // 長期移動平均線
input double LotSize    = 0.1;  // 取引ロット
input double TakeProfit = 60;   // 利確(pips)
input double StopLoss   = 30;   // 損切(pips)

// グローバル変数
double maShortPrev, maLongPrev;
double maShortCurr, maLongCurr;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print("MA_Cross_v01 initialized!");
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // 移動平均を取得
   maShortPrev = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   maLongPrev  = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   maShortCurr = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   maLongCurr  = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);

   // クロス判定
   bool buySignal  = (maShortPrev < maLongPrev && maShortCurr > maLongCurr);
   bool sellSignal = (maShortPrev > maLongPrev && maShortCurr < maLongCurr);

   // ポジション数確認
   if (OrdersTotal() == 0)
     {
      if (buySignal)
        {
         OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3,
                   Ask - StopLoss * Point * 10,
                   Ask + TakeProfit * Point * 10,
                   "MA Cross BUY", 0, 0, clrBlue);
         Print("Buy entry!");
        }
      else if (sellSignal)
        {
         OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3,
                   Bid + StopLoss * Point * 10,
                   Bid - TakeProfit * Point * 10,
                   "MA Cross SELL", 0, 0, clrRed);
         Print("Sell entry!");
        }
     }
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("MA_Cross_v01 stopped.");
  }
//+------------------------------------------------------------------+

コードの解説

AIくん
AIくん

EAの仕組みを簡単に説明しますね!

部分内容
input外部から変更できるパラメータ設定(MA期間・ロットなど)
iMA()移動平均を取得する関数。現在値と1本前を比較してクロスを判定します。
OrderSend()実際に売買注文を出す関数。Ask/Bidと損切・利確を指定。
OrdersTotal()すでにポジションを持っているかどうかを確認。重複注文を防ぐために使用。
AIくん
AIくん

このコードは「1ポジションずつエントリーして、逆クロスで決済する」シンプル構造です!

minovsky
minovsky

なるほど、こうやってロジックが形になるのか…。思ったより整理されていて理解しやすいな。


実際に動かしてみる!

まずは先ほどのコードをコンパイルします。

画面上部中央の「コンパイル」ボタンをクリックします。

MT4の画面のナビゲーター エキスパートアドバイザに先ほどコンパイルしたEAが表示されています。

MT4のチャート(USD/JPY・1時間足)にEAをセットしてみました。

するとログに「MA_Cross_v01 initialized!」の文字。

minovsky
minovsky

動いてる?

AIくん
AIくん

おめでとうございます!これでEAとしてはとりあえず完成です!


EA開発の“最初の壁”を越えて

こうして、私の最初のEA「MA_Cross_v01」が無事に完成しました。

まだ改良の余地は多いと思いますが、「自分で作って動かせた」ことが何より大きな一歩です。

AIくん
AIくん

EAは作って終わりじゃありませんよ!

これからバックテストで検証しながら、改善をしていきます。

実際に「使える」EAになるまでには、まだまだ長い道のりが待っています。

次は結果を見て、どこを直すかを考えていきましょう。


次回予告:「検証編」

次回は、今回作ったEAを使ってバックテストを行います。

期間・通貨ペア・条件を設定して、実際にどう動くのかを検証。

そして、AIくんと一緒に勝率やドローダウンを分析していきます。

AIくん
AIくん

EAの本当の性格が分かるのはここからですよ!

minovsky
minovsky

初号機の成績、楽しみだな…。


💬 AIくんのひとこと

「コードは“動くかどうか”より、“なぜ動くのか”を理解するのが大事です!
次のステップで検証すれば、ロジックの強みと弱みが見えてきますよ!」

コメント

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