〜AIくんと一緒にコーディング〜
こんばんは、minovskyです。
前回の記事では、AIくんと一緒にEA(自動売買プログラム)のロジックを決めました。
そしてついに今回は、そのロジックをMetaTrader4(MT4)上で動くEAとして形にする挑戦です。
EAを作る準備
MetaEditorを開くと、左側によく変わらないフォルダ一覧と、グレーの画面。

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

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

よし、一歩ずつやってみよう!
”ファイル(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.");
}
//+------------------------------------------------------------------+コードの解説

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

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

なるほど、こうやってロジックが形になるのか…。思ったより整理されていて理解しやすいな。
実際に動かしてみる!
まずは先ほどのコードをコンパイルします。
画面上部中央の「コンパイル」ボタンをクリックします。

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

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

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

動いてる?

おめでとうございます!これでEAとしてはとりあえず完成です!
EA開発の“最初の壁”を越えて
こうして、私の最初のEA「MA_Cross_v01」が無事に完成しました。
まだ改良の余地は多いと思いますが、「自分で作って動かせた」ことが何より大きな一歩です。

EAは作って終わりじゃありませんよ!
これからバックテストで検証しながら、改善をしていきます。
実際に「使える」EAになるまでには、まだまだ長い道のりが待っています。
次は結果を見て、どこを直すかを考えていきましょう。
次回予告:「検証編」
次回は、今回作ったEAを使ってバックテストを行います。
期間・通貨ペア・条件を設定して、実際にどう動くのかを検証。
そして、AIくんと一緒に勝率やドローダウンを分析していきます。

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

初号機の成績、楽しみだな…。
💬 AIくんのひとこと
「コードは“動くかどうか”より、“なぜ動くのか”を理解するのが大事です!
次のステップで検証すれば、ロジックの強みと弱みが見えてきますよ!」



コメント