FX自動売買

【初心者必見】MT4でEAを自作してみよう!EA自作方法を分かりやすく解説!

MT4のEA(自動売買)についてお調べですね?

EAとは、MT4上で自動売買をするためのシステムであり、初心者からプロの方まで広く利用されています。

今回は「MT4でEAを自作方法」「実際に導入する方法」を徹底解説していきます。

この記事を読めば、MT4ででEAを作る方法が分かり、実際に導入することができるようになりますよ。

EAの導入自体は約5分程度でできるので、ぜひ参考にしてくだいね。

1.EA(エキスパート・アドバイザー)とは

EA(エキスパート・アドバイザー)とは

EAは、設定されたプログラムに従って自動的に売買してくれるソフトのことで、自動売買ソフトとも呼ばれています。

【EA(エキスパート・アドバイザー)でできること】

EAで行うことができる基本機能は以下の通りです。

売り・買い注文

プログラムされたルール通りに注文を行う。

24時間トレード

EAを起動している間は、トレードを行うことが可能。

相場が開いており、EAを起動されていれば、24時間いつでも自動でトレードが行われます。

例えば、移動平均線を利用したEAであれば、「移動平均線がゴールデンクロスをしたから買い」のようにトレードを行います。

【ゴールデンクロス】

インジケーターの短期線が、長期線を下から上に突き抜けること。

このサインは買いの勢いが強まる前兆なので、買い注文で利益を上げやすいと言われています。

【デットクロス】

インジケーターの長期線が、短期線を上から下に突き抜けること。

このサインは売りの勢いが強まる前兆なので、売り注文で利益を上げやすいと言われています。

MT4にはデフォルトでいくつかのEAが備わっていますが、外部からEAを導入したり、自作することも可能です。

2.MT4でEAを自作する2つの方法

MT4でEAを自作する2つの方法

EAは、自分の時間を全く使わずに稼ぐことができる、非常に便利なシステムです。

自分が寝ている間や仕事をしている間に稼げると思うと、利用してみたい!と思いますよね。

でも「EAを自作する方法が分からない」というあなたのために、MT4でEAを自作するための方法をまとめてみました。

MT4でEAを自作する方法は、以下の2つです。

プログラミング初心者でもできるように解説しているので、一緒にEAを作っていきましょう。

方法1.プログラミング知識不要!EAを自作する方法

実際に自分でEAを自作してみたいけど、プログラミングに関して全く知識が無いという方は多いのではないでしょうか。

MT4ではプログラミング知識が無くても、ストラテジー作成ツールを利用してEAを自作することが可能です。

【ストラテジー作成ツール】

あらかじめプログラムされた機能を組み合わせることで、自分だけのEAを作成する有料のツール。

利用したい機能を選択するだけでEAを作ることが可能。

利用できるプログラムが多いほど、ソフトの値段が上がる傾向にある。

MT4で利用できるストラテジー作成ツールは、以下の3つです。

ツール1.EAつくーる

ツール2.MT4EAエディター

ツール3.EAつくる君

ツール1.EAつくーる

EAつくーる

EAつくーるは、市販のインジケーターを利用して自動売買を自作できるツールです。

14,800円の初期費用が掛かりますが、作成したEAの著作権を得ることができるため、自作EAを販売することもできます。

そのため、すごく良いEAのアイデアがあるけど、プログラミングの仕方が分からないという方におすすめの作成ツールです。

サポート体制もしっかりとしており、利用方法で分からないことがあっても、運営のサポートで即時解決することができます。

お財布に余裕がある方には、「EAつくーる」がおすすめです。

ツール2.MT4EAエディター

ツール2.MT4EAエディター

MT4EAエディターは、自動売買に不可欠な複雑な取引条件を比較的簡単に作ることが可能です。

複数のインジケーターを組み合わせて取引条件に設定も可能なため、複雑なEAでも簡単に自作することができます。

インジケーターを利用してEAを自作できる作成ツールの中ではかなり安く(8,500円)、利用しやすいのが特徴です。

EAの取引条件にインジケーターのシグナルを入れたい方におすすめです。

ツール3.EAつくる君

ツール3.EAつくる君

EAつくる君では、指標などを利用してEAを自作することが可能です。

EAつくる君は約7,400円と低額ですが、インジケーターを利用することができないというデメリットがあります。

インジケーターは利用できませんが、利用できる指標やサンプルの数は一定数あるため、絶対にインジケーターを利用したい方でなければ困ることはないでしょう。

また、作成マニュアル等も初心者用に詳しく作られているため、簡単なEAであれば数分で作成することが可能です。

とりあえずEAを作ってみたい。という方は、EAつくる君を利用してみてはいかがでしょうか。

方法2.MT4でプログラミングして自作する方法

方法2.MT4でプログラミングして自作する方法

MT4のEAを自作には、MQL言語(Meta Quotes Language)を利用します。

【MQL言語(Meta Quotes Language)とは】

メタトレーダー4の開発用のプログラミング言語。

C言語をベースに開発されている。

C言語やjavaなどの言語を習得している方であれば、すぐに習得できる難易度です。

以下の3つのステップで、MT4でプログラムしてEA自作することが可能です。

ステップ1.メタエディターを起動する

ステップ2.プログラムする

ステップ3.チャートに表示する

プログラム初心者の方は、「補足:プログラミングに必要なコード辞典」を利用しコピペで作成していきましょう。

ステップ1.メタエディターを起動する

MT5の画面上部のボタンをクリックして、メタエディターを起動させます。

メタエディターを起動する

使用しているFX業者によっては、メタエディターの言語が英語の場合があるので設定を変更しましょう。

初期設定が英語の場合は、メタエディター画面上部のViewからLanguagfをクリックして、一覧からjapaneseをクリックしてください。

メタエディターを起動する

言語を選択すると、メタエディターが再起動されて使用言語が日本語に変わります。

メタエディターを起動する

※初期設定で既に日本語の場合は、この設定は必要ありません。

EAのプログラムを組むには、新規作成からエキスパートアドバイザーを選択し、次へをクリックします。

EAのプログラムを組むには、新規作成からエキスパートアドバイザーを選択し、次へをクリックします。

次にEAの名前を入力する(EAの名前は自分で好きに決めることが可能です)。

次にEAの名前を入力する(EAの名前は自分で好きに決めることが可能です)。

名前と著作者を入力したら「次へ」をクリックしましょう。

エキスパート・アドバイザー設定

何もチェックを入れずに「次へ」をクリックすれば、メタエディターの起動は完了です。

ステップ2.プログラムする

ステップ2.プログラムする

EAを自作するには、以下の4つの項目を設定しなければいけません。

項目1.利用するパラメーターの宣言

項目2.パラメーターの変数の設定

項目3.パラメーターの詳細設定

項目4.エントリーとエグジットの設定

まず初めに、利用するパラメーターを以下のように宣言します。

// パラメーターの設定//
extern int Fast_MA_Period = 5;// 短期移動平均線の期間設定
extern int Slow1_MA_Period = 25;// 長期移動平均線の期間設定
extern int Slow2_MA_Period = 30;// 長期移動平均線の期間設定
extern int Slow3_MA_Period = 35;// 長期移動平均線の期間設定
extern int Slow4_MA_Period = 40;// 長期移動平均線の期間設定
extern int Slow5_MA_Period = 45;// 長期移動平均線の期間設定
extern int MA_Shift = 0; // 移動平均を右にシフトする設定
extern int MA_Method = 0; // 移動平均方法の設定
extern int RSIPeriod = 14; //RSI の期間設定
extern int LC = 300;//損切のPoint

extern double Lots = 1.0; // 取引ロット数
extern int Slip = 10; // 許容スリッページ数
extern string Comments = ” “; // コメント

次に、パラメーターの変数の設定を行います。

// 変数の設定//
int Ticket_L = 0; // 買い注文の結果をキャッチする変数
int Ticket_S= 0; // 売り注文の結果をキャッチする変数
int Exit_L = 0; // 買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0; // 売りポジションの決済注文の結果をキャッチする変数

double Fast_MA_2= 0; /*2 本前のバーの短期移動平均線に変身したiCustom 関数
を代入する変数*/
double Slow1_MA_3= 0; /*2 本前のバーの長期移動平均線に変身したiCustom 関数
を代入する変数*/
double Slow2_MA_3= 0; /*2 本前のバーの長期移動平均線に変身したiCustom 関数
を代入する変数*/
double Slow3_MA_3= 0; /*2 本前のバーの長期移動平均線に変身したiCustom 関数
を代入する変数*/
double Slow4_MA_3= 0; /*2 本前のバーの長期移動平均線に変身したiCustom 関数
を代入する変数*/
double Slow5_MA_3= 0; /*2 本前のバーの長期移動平均線に変身したiCustom 関数
を代入する変数*/

double Middle_MA_2=0;

パラメーターの詳細設定を行い、パラメーターを決定しましょう。

int start()
{

Fast_MA_2= iCustom(NULL,0,”Custom Moving Averages”,Fast_MA_Period,MA_Shift,MA_Method,0,2);
Middle_MA_2=iCustom(NULL,0,”Custom Moving Averages”,Middle_MA_Period,MA_Shift,MA_Method,0,2);
Slow1_MA_3 = iCustom(NULL,0,”Custom Moving Averages”,Slow1_MA_Period,MA_Shift,MA_Method,0,3);
Slow2_MA_3 = iCustom(NULL,0,”Custom Moving Averages”,Slow2_MA_Period,MA_Shift,MA_Method,0,2);
Slow3_MA_3 = iCustom(NULL,0,”Custom Moving Averages”,Slow3_MA_Period,MA_Shift,MA_Method,0,3);
Slow4_MA_3 = iCustom(NULL,0,”Custom Moving Averages”,Slow4_MA_Period,MA_Shift,MA_Method,0,3);
Slow5_MA_3 = iCustom(NULL,0,”Custom Moving Averages”,Slow5_MA_Period,MA_Shift,MA_Method,0,3);
RSI_2 = iCustom(NULL,0,”RSI”,RSIPeriod,0,2);
RSI_1 = iCustom(NULL,0,”RSI”,RSIPeriod,0,1);

最後にエントリーとエグジットの条件を入れればEAの完成です。

プログラムが完了したらコンパイルを押して、新しいEAとしてMT4に保存しましょう。

自作EAの名前の設定

ステップ3.EAを起動する

まずは、MT4の上部の項目にあるツールを選択します。

ツールの項目にあるオプションを選ぶ

次にその中のオプションを開き、Expert Advisorの設定を行いましょう。

Expert Advisorの動作条件を設定します。

Expert Advisorの項目の設定をする

「自動売買をストップさせる条件」「DLLの使用」「WetRequest」にチェックを入れておけば大丈夫です。

最後に「OK」ボタンを押せば、設定は完了となります。

EAを利用したい通貨ペアを画面に表示します。

次に、ナビゲーターの項目にあるエキスパートアドバイザーから、作成したをチャートにドロップします。

EAを取引したい通貨にドラッグする

ドロップした通貨ペア以外ではEAを利用することができないので、注意しましょう。

EAの詳細設定を確認する

ドロップが成功すると上記の設定画面が出てくるため、以下の項目を設定します。

設定①アラーム → ON

設定②自動売買 → ON

設定③DLLの使用 → ON

設定④外部エキスパートの使用 → ON

どれか一つでもONになっていないと、EAを利用することはできないので注意しましょう。

また、自動売買をONにするとチャート画面右上にニッコリマークがでます。

EAの詳細設定を確認する

補足:プログラミングに必要なコード辞典

基本コード 解説 基本コード 解説
int 整数を扱うデータ型 Digits 現通貨ペアの価格の小数点以下の桁数
bool 真(=true)か偽(=false)の2値をとるデータ型 High[] 各バーの高値が格納された配列
double 小数を扱うデータ型 Low[] 各バーの安値が格納された配列
datetime 日付時刻を扱うデータ型 Open[] 各バーの始値が格納された配列
Ask 現在の買値 Point Point
Bid 現在の売値 Volume[] 各バーの出来高が記録された配列
Bars バーの本数 AccountFreeMargin() アカウントの余剰証拠金を返す
Close[] 各バーの終値が格納された配列 AccountBalance() アカウントの口座残高
取引コード 解説
OrderClose()

保有中の注文を決済する。正常決済=true、決済失敗=falseを返す。

OrderClose (int ticket,double lots,double price,int slippage,int color color=CLR_NONE)

(ticket:チケット番号, lots:ロット数, price:決済価格, slippage:最大スリッページ幅, color:チャート上の決済矢印の色)

OrderMagicNumber() 選択した注文のマジックナンバー(識別番号)を返す。OrderSelect()関数で事前に選択している必要がある。
OrderModify()

保有中や待機中の注文を修正する。正常に終了した場合=true、失敗した場合=falseを返す。

OrderModify(int ticket,double price,double stoploss,double takeprofit,datetime datetime expiration,color arrow_color=CLR_NONE)

(ticket:チケット番号, price:新しい注文価格, stoploss:新しい損切り価格, takeprofit:新しい利食い価格, expiration:新しい有効期限,

arrow_color:チャート上の新しい損切りと利食いの矢印の色(

OrderOpenPrice() 選択した注文の約定価格を返す。OrderSelect()関数で事前に選択している必要がある。
OrderSelect()

注文データを選択。正常に終了した場合=true、失敗した場合=falseを返す。

OrderSelect(int index,int select,int pool=MODE_TRADES)

(index:注文チケットインデックス, select:選択タイプ, 「SELECT_BY_POS」か「SELECT_BY_TICKET」のいずれか, 
pool:注文プール, 「MODE_TRADES」(規定値)か「MODE_HISTORY」のいずれか)

OrderSend()

新規注文を行う。

int OrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=clrNONE);

(symbol:通貨ペア, cmd:注文タイプ, volume:ロット数, price:注文価格, slippage:最大スリッページ幅, stoploss:損切り価格, takeprofit:利食い価格,

comment:注文コメント, magic:マジックナンバー, expiration:注文の有効期限(指値注文のみ), arrow_color:チャート上の約定矢印の色)

OrderStopLoss() 選択した注文の損切り価格を返す。OrderSelect()関数で事前に選択している必要がある。
OrdersTotal() 保有中と待機中の注文の総数を返す。
OrderSymbol() 選択した注文の通貨ペア名を返す。OrderSelect()関数で事前に選択している必要があります。
OrderTakeProfit() 選択した注文の利食い価格を返す。OrderSelect()関数で事前に選択している必要がある。
OrderTicket() 選択した注文のチケット番号を返す。OrderSelect()関数で事前に選択している必要がある。
OrderType() 選択した注文の注文タイプを返す。OrderSelect()関数で事前に選択している必要がある。値は次のいずれかになる。
OP_BUY:買いポジション,  OP_SELL:売りポジション,  OP_BUYLIMIT:買い指値ポジション,  OP_BUYSTOP:買い逆指値ポジション
OP_SELLLIMIT:売り指値ポジション,  OP_SELLSTOP:売り逆指値ポジション 
インジケーターコード 解説
iATR()

ATRを計算して、その値を返す。

iATR(string symbol,int timeframe,int period,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, period:計算する平均期間, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定したバーの本数だけ過去にシフトする))

【例】double val = iATR(NULL,0,18,0);

iBands()

ボリンジャーバンドを計算して、その値を返す。

iBands(string symbol,int timeframe,int period,int deviation,int bands_shift,int applied_price,int mode,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠, 0は現在のチャートの時間枠, period:計算する平均期間
deviation:メインラインからの標準偏差, bands_shift:バンドシフト。, applied_price:適用価格, 
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1-MODE_UPPER、2-MODE_LOWER )のいずれか, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

【例】double val = iBands(NULL,0,20,2,0,PRICE_LOW,MODE_HIGHER,0);

iCustom()

指定したカスタムインジケーターを計算し、その値を返す。

iCustom(string symbol,int timeframe,string name,…,int mode,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, name:カスタムインジケーターのプログラム名
…:カスタムインジケータの外部パラメータ, mode:ラインインデックス, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

iMA()

移動平均線(Moving Average)を計算して、その値を返す。

iMA(string symbol,int timeframe,int period,int ma_shift,int ma_method,int applied_price,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, period:計算する平均期間, 
ma_shift:移動平均のシフト, ma_method:移動平均の方式, 移動平均方式(0-MODE_SMA[単純平均]、1-MODE_EMA[指数平均]、2-MODE_SMMA[平滑平均]、3-MODE_LWMA[線形加重平均])のいずれか, applied_price:適用価格, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

【例】double val = iMA(NULL,0,13,9,MODE_SMMA,PRICE_MEDIAN,1);

iMACD()

MACDを計算して、その値を返す。

iMACD(string symbol,int timeframe,int fast_ema_period,int slow_ema_period,int signal_period,int applied_price,int mode,int shift)

((symbol:通貨ペア。NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, fast_ema_period:ファーストEAMの期間。
slow_ema_period:スローEMAの期間, signal_period:シグナルラインの期間, applied_price:適用価格。
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1- MODE_SIGNAL)のいずれか, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

iRSI()

RSIを計算して、その値を返す。

iRSI(string symbol,int timeframe,int period,int applied_price,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, 
period:計算する平均期間, applied_price:適用価格。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

【例】double val = iRSI(NULL,0,14,PRICE_CLOSE,0);

iStochastic()

ストキャスティックスを計算して、その値を返す。

iStochastic(string symbol,int timeframe,int %Kperiod,int %Dperiod,int slowing,int method,int price_field,int mode,int shift)

(symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠, 0は現在のチャートの時間枠, 
%Kperiod:%Kラインの期間, %Dperiod:%Dラインの期間, slowing:スロー値, 
method:移動平均の方式, price_field:価格フィールドのパラメータ
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1-MODE_SIGNAL )のいずれか, 
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする))

【例】double val = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);

インジケーター作成コード 解説
IndicatorBuffers()

カスタムインジケーターの計算に使用するバッファのメモリを割り当てる。

void IndicatorBuffers(int count)

count:割り当てるバッファの量

IndicatorShortName()

データウィンドウとチャートのサブウィンドウに表示されるカスタムインジケーターのショートネーム。

IndicatorShortName(string name)

SetIndexBuffer()

カスタムインジケーターの定義済みバッファを、グローバルレベルで宣言した配列変数に結合する。

SetIndexBuffer(int index,double array[])

index:ラインインデックス, array[]:インジケーターの値を格納しておく配列

SetIndexDrawBegin()

インジケーターラインの描画を開始するバーの番号の設定。

SetIndexDrawBegin(int index,int begin)

index:ラインインデックス, begin:最初に描き始めるバーの位置の番号

SetIndexLabel()

データウインドウとツールヒントに表示さる説明の設定。

SetIndexLabel(int index,string text)

index:ラインインデックス, text:ラベルテキスト

SetIndexStyle()

インジケーターラインの型、スタイル、幅、色の設定。

SetIndexStyle(int index,int type,int style=EMPTY,int width=EMPTY,color clr=CLR_NONE)

index:ラインインデックス, type:形状タイプ, style:描画スタイル, width:ライン幅, clr:ライン色

NormalizeDouble()

浮動小数点を指定した精度で丸める。

NormalizeDouble(double value,int digits);

value:浮動小数点数, digits:丸める小数点以下の桁数。Digits()を使えば正規化した桁数を取得可能

まとめ

今回はEAを自作する方法について解説していきました。

EAを自作するのは難しく感じますが、初心者でも自作することは可能です。

今回紹介したプログラミングコードを参考に自分好みのEAを作成してみることがおすすめです。

また、作成ツールを利用しても自分好みのEAを作成することができますよ。

プログラムに自信が無い方は、作成ツールを利用し、自信がある方はプログラミングに挑戦してみてはいかがでしょうか。

FXで5億以上の資産を稼いできたノウハウを無料で学べるメールマガジン

FXで5億以上の資産を築いてきた

masakiさんという方のメールマガジンをご紹介させていただきます

・fxで5億以上の資産を築いてきたそのノウハウの公開

・億単位の資産家たちがどういったマインドセットで取引に取り組んでいるのか?

・オススメのFX業者やオススメのスクールなど、多数企画もご用意

初心者から学べるFXメール講座はこちら

 

関連記事

  1. FX自動売買

    自動売買のメリットって何?MT5への導入方法を細かく調査してみた!

    MT5で自動売買を利用する方法についてお調べですね。MT5とは、M…

  2. FX自動売買

    【必読】自動売買は儲かる!?利用者の口コミをガチで調査してみた

    自動売買の口コミをお調べですね。ネット上には「自動売買は儲かる」「…

  3. FX自動売買

    EAの使い方が分からない?初心者向けに導入方法・自作方法を徹底解説

    MT4のEA(自動売買)についてお調べですね。トレードをする時間は…

  4. FX自動売買

    FXの自動売買で稼ぐにはこれを使え!あなたに合った自動売買を徹底紹介

    FXの自動売買(EA)って何を使えばいいかわからないですよね。自動…

  5. FX自動売買

    【必見】MT4で無料で利用できるEAを入手する3つの方法を徹底紹介!

    MT4で無料のEAを利用する方法をお調べですね。MT4ではEAを利…

  6. FX自動売買

    MT4に自動売買を導入する4つの方法!おすすめの利用方法もご紹介

    MT4に自動売買を導入する方法をお探しですね?自動売買と聞くと導入…

無料で学べるメルマガ講座

最近の記事

  1. 海外FX口座

    FX業者ミルトンマーケッツとは?利用者の口コミから本当の評判をご紹介
  2. FXノウハウ

    MT4最強インジケーター!絶対に使うべきインジケーターを5つ徹底紹介
  3. 海外FX口座

    【必見】国内FXより海外FXが絶対お得!国内FXと海外FXの違いを徹底解説
  4. FXノウハウ

    DD方式とNDD方式の違いは何?無駄な損をしないためには〇〇を使え!
  5. 海外FX口座

    【必読】MT4にアラート機能を設定する全方法を分かりやすく徹底解説!
PAGE TOP