MT5でEAを作りたいけど、プログラミングの知識がなくて諦めていませんか?
「有料EAは高すぎるし、自分で作れたらいいのに…」
「プログラミングって難しそう…」
そんな悩みをよく聞きます。
でも、実はプログラミング未経験でもEAは作れるんです。
この記事では、移動平均線のクロスで売買する簡単なEAの作り方を解説します。
コピー&ペーストで使えるテンプレートも用意したので、手順通りに進めれば30分で動くEAが完成します。
あなただけのEAを作る第一歩を、一緒に踏み出してみましょう。
目次
MQL5でEAを作る前の基礎知識
まずはEAの基本から理解していきましょう。
難しく考える必要はありません。
EAとは何か?
EAは「Expert Advisor(エキスパートアドバイザー)」の略です。
簡単に言うと、あなたの代わりに自動で売買してくれるロボットのようなものです。
たとえば「移動平均線が上向きになったら買い、下向きになったら売る」というルールを設定すれば、その通りに24時間休まず取引してくれます。
手動トレードと比べると、以下のような特徴があります。
感情に左右されず、決められたルール通りに取引できます。
寝ている間も取引できるので、チャンスを逃しません。
ただし、相場環境が変わっても機械的に取引を続けるので、人間の判断が必要な場合もあります。
環境構築の手順
プログラミングと聞くと難しく感じますが、実は環境構築はとても簡単です。
まず、MT5をインストールしていない場合は、公式サイトからダウンロードしましょう。
インストールが完了したら、画面上部のツールバーから「ツール」→「MetaEditor」を選択します。
これがEAを作るための開発ツールです。
日本語表示に変更したい場合は、MetaEditorの「View」→「Languages」から「日本語」を選択してください。
これで基本的な準備は完了です。
MQL5で簡単なEAを作ってみよう
いよいよEA作成の実践に入ります。
初めてのEAとして、シンプルな移動平均クロスEAを作っていきましょう。
移動平均クロスEAの作り方
MetaEditorを開いたら、画面左上の「新規作成」ボタンをクリックします。
表示されたウィンドウで「エキスパートアドバイザー(取引ロボット)」を選択します。
すると、基本的なコードが自動的に生成されます。
以下のコードをコピーして、エディタに貼り付けてください。
#property copyright "Your Name"
#property link "https://www.yourwebsite.com"
#property version "1.00"
#include <Trade\Trade.mqh>
// 外部パラメーター
input int FastMAPeriod = 5; // 短期移動平均期間
input int SlowMAPeriod = 20; // 長期移動平均期間
input double Lots = 0.1; // 取引ロット数
input int TakeProfit = 100; // 利確幅(ポイント)
input int StopLoss = 50; // 損切幅(ポイント)
// グローバル変数
int FastHandle = INVALID_HANDLE;
int SlowHandle = INVALID_HANDLE;
CTrade Trade;
//初期化関数
int OnInit()
{
// 移動平均線のハンドルを取得
FastHandle = iMA(_Symbol, PERIOD_CURRENT, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE);
SlowHandle = iMA(_Symbol, PERIOD_CURRENT, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE);
if(FastHandle == INVALID_HANDLE || SlowHandle == INVALID_HANDLE)
{
Print("移動平均線のハンドル取得に失敗しました");
return(INIT_FAILED);
}
// トレード設定
Trade.SetExpertMagicNumber(123456);
Trade.SetMarginMode();
Trade.SetTypeFillingBySymbol(_Symbol);
return(INIT_SUCCEEDED);
}
//終了関数
void OnDeinit(const int reason)
{
IndicatorRelease(FastHandle);
IndicatorRelease(SlowHandle);
}
//ティック時実行関数
void OnTick()
{
// 新しいバーの確認
if(!isNewBarFormed()) return;
// 移動平均の計算
double fastMA[], slowMA[];
ArraySetAsSeries(fastMA, true);
ArraySetAsSeries(slowMA, true);
int copied1 = CopyBuffer(FastHandle, 0, 0, 3, fastMA);
int copied2 = CopyBuffer(SlowHandle, 0, 0, 3, slowMA);
if(copied1 <= 0 || copied2 <= 0) return;
// ポジションの確認
if(PositionsTotal() == 0)
{
// 新規注文条件の確認
if(fastMA[1] > slowMA[1] && fastMA[2] <= slowMA[2]) // ゴールデンクロス
{
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
Trade.Buy(Lots, _Symbol, ask,
ask - StopLoss * _Point, // ストップロス
ask + TakeProfit * _Point); // テイクプロフィット
}
else if(fastMA[1] < slowMA[1] && fastMA[2] >= slowMA[2]) // デッドクロス
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
Trade.Sell(Lots, _Symbol, bid,
bid + StopLoss * _Point, // ストップロス
bid - TakeProfit * _Point); // テイクプロフィット
}
}
}
// 新しいバーの確認関数
bool isNewBarFormed()
{
static datetime lastBar = 0;
datetime currentBar = iTime(_Symbol, PERIOD_CURRENT, 0);
if(lastBar != currentBar)
{
lastBar = currentBar;
return true;
}
return false;
}
このコードの内容を順番に見ていきましょう。
まず、FastMAPeriodとSlowMAPeriodは移動平均線の期間を設定します。
デフォルトでは短期が5本、長期が20本になっています。
Lotsは1回の取引で売買する数量です。
OnTick()関数が一番重要で、ここに売買ロジックが書かれています。
ゴールデンクロスが発生したら買い、デッドクロスが発生したら売るという単純な戦略です。
EAの動作確認方法
作成したEAを動かすには、まずコンパイルが必要です。
画面上部のコンパイルをクリックしてください。
エラーがなければ、「0 errors, ~」というメッセージが表示されます。
次に、MT5のチャート画面に戻って、「ナビゲーター」ウィンドウを開きます。
「エキスパートアドバイザー」の中に、作成したEAが表示されているはずです。
これをチャートにドラッグ&ドロップすれば、設定画面が表示されます。
パラメーターを確認して「OK」をクリックすれば、EAが動き始めます。
よくあるエラーとその解決方法
EAを作っていると、誰でも必ずエラーに遭遇します。
でも心配いりません。ほとんどのエラーは簡単に解決できます。
コンパイルエラーの対処法
「セミコロンがありません」というエラーが最も多いですね。
これは文末に「;(セミコロン)」を付け忘れているだけなので、付け加えれば解決します。
たとえばこんな行があったとします。
mql5Copydouble Lots = 0.1
これを以下のように修正します。
mql5Copydouble Lots = 0.1;
次によく見るのが「関数が見つかりません」というエラー。
これは関数名のタイプミスが原因なことがほとんどです。
誤:
OnTik
void OnTik()
正:
OnTick
void OnTick()
スペルを確認して修正すれば解決します。
動作確認時のトラブル対応
EAをチャートに設置したのに動かないという場合、まずは右上の「自動売買」ボタンが押されているか確認しましょう。
緑の矢印が表示されていないと、EAは動作しません。
また、「EA取引許可」にもチェックが必要です。
MT5のツール→オプション→エキスパートアドバイザーで設定できます。
ポジションが取れない場合は、ロット数の設定を確認してください。
証拠金が足りないと注文は通りません。
テスト時は小さいロット数(0.1など)から始めるのがおすすめです。
EA作成の基本テンプレート解説
EAには必ず含める必要がある関数があります。
それぞれの役割をしっかり理解しておきましょう。
必須の関数と設定
OnInit()関数は、EAを起動したときに最初に実行される関数です。
int OnInit()
{
// ここに初期設定を書く
return(INIT_SUCCEEDED);
}
変数の初期化や、インジケーターのハンドル作成などを行います。
OnTick()関数は、価格が動くたびに実行される関数です。
void OnTick()
{
// ここに売買ロジックを書く
}
ここが一番重要で、売買の判断をする部分になります。
OnDeinit()関数は、EAを終了するときに実行される関数です。
void OnDeinit(const int reason)
{
// ここに終了時の処理を書く
}
使用したハンドルの解放などを行います。
注文処理の基本
注文を出すにはCTradeクラスを使います。
このクラスを使うために、まずファイルの先頭で以下のように宣言します。
mql5Copy#include <Trade\Trade.mqh>
CTrade Trade;
買い注文の基本形はこんな感じです。
// 買い注文
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
Trade.Buy(0.1, // ロット数
_Symbol, // 通貨ペア
ask, // 注文価格
ask - 50 * _Point, // 損切値(オプション)
ask + 100 * _Point // 利確値(オプション)
);
売り注文はBuyの代わりにSellを使います。
// 売り注文
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
Trade.Sell(0.1, // ロット数
_Symbol, // 通貨ペア
bid, // 注文価格
bid + 50 * _Point, // 損切値(オプション)
bid - 100 * _Point // 利確値(オプション)
);
マジックナンバーは、そのEAが出した注文を識別するための番号です。
OnInit()関数内で以下のように設定します。
Trade.SetExpertMagicNumber(123456); // マジックナンバーの設定
複数のEAを使う場合は、それぞれ異なる番号を設定しましょう。
また、スリッページの設定も可能です。
Trade.SetDeviationInPoints(20); // 20ポイントのスリッページを許容
これらの設定を含めた、より実践的な注文処理の例です。
// 初期化関数での設定
void OnInit()
{
Trade.SetExpertMagicNumber(123456); // マジックナンバー設定
Trade.SetDeviationInPoints(20); // スリッページ設定
Trade.SetMarginMode(); // 証拠金モードの設定
Trade.SetTypeFillingBySymbol(_Symbol); // フィリングタイプの設定
}
// 買い注文関数の例
void OpenBuy()
{
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
if(!Trade.Buy(0.1, _Symbol, ask,
ask - 50 * _Point, // 損切値
ask + 100 * _Point)) // 利確値
{
Print("買い注文エラー: ", Trade.ResultRetcode());
}
}
CTradeクラスを使うメリット:
- 注文処理が簡潔に書ける
- エラーの特定が簡単になる
- バックテストでも安定して動作
特に初心者の方は、この方法で注文処理を実装することをおすすめします。
まとめ:30分でできるMQL5EA作成のポイント
MQL5でのEA作成は、思ったより簡単です。
この記事で解説した手順をまとめると、
- MetaEditorをインストールして開発環境を整える
- テンプレートコードをコピー&ペースト
- パラメーターを自分好みに調整
- コンパイルしてチャートに設置
これだけで、あなただけの自動売買プログラムが作れます。
エラーが出ても、ほとんどは単純なミスが原因。
焦らずに一つずつ確認していけば、必ず解決できます。
コメントを残す