MT4のEA(自動売買)についてお調べですね?
EAとは、MT4上で自動売買をするためのシステムであり、初心者からプロの方まで広く利用されています。
今回は「MT4でEAを自作方法」「実際に導入する方法」を徹底解説していきます。
この記事を読めば、MT4ででEAを作る方法が分かり、実際に導入することができるようになりますよ。
EAの導入自体は約5分程度でできるので、ぜひ参考にしてくだいね。
【もうか~るFXのLINE公式アカウントに登録して有益情報をGet!】
もうか~るFXでは、LINE公式アカウントでプロによる日々の相場分析を無料で配信しています。
さらに、もうか~るFXが実際に利用している限定のインジケーターも無料プレゼント中です。
これらをうまく使えば、FXでさらなる利益を残せるようになること間違いありません。
プロによる有益情報の配信は随時おこなっているので、ぜひ友達登録してみてくださいね。
目次
1.EA(エキスパート・アドバイザー)とは
EAは、設定されたプログラムに従って自動的に売買してくれるソフトのことで、自動売買ソフトとも呼ばれています。
【EA(エキスパート・アドバイザー)でできること】
EAで行うことができる基本機能は以下の通りです。
売り・買い注文
プログラムされたルール通りに注文を行う。
24時間トレード
EAを起動している間は、トレードを行うことが可能。
相場が開いており、EAを起動されていれば、24時間いつでも自動でトレードが行われます。
例えば、移動平均線を利用したEAであれば、「移動平均線がゴールデンクロスをしたから買い」のようにトレードを行います。
【ゴールデンクロス】
インジケーターの短期線が、長期線を下から上に突き抜けること。
このサインは買いの勢いが強まる前兆なので、買い注文で利益を上げやすいと言われています。
【デットクロス】
インジケーターの長期線が、短期線を上から下に突き抜けること。
このサインは売りの勢いが強まる前兆なので、売り注文で利益を上げやすいと言われています。
MT4にはデフォルトでいくつかのEAが備わっていますが、外部からEAを導入したり、自作することも可能です。
2.MT4でEAを自作する2つの方法
EAは、自分の時間を全く使わずに稼ぐことができる、非常に便利なシステムです。
自分が寝ている間や仕事をしている間に稼げると思うと、利用してみたい!と思いますよね。
でも「EAを自作する方法が分からない」というあなたのために、MT4でEAを自作するための方法をまとめてみました。
MT4でEAを自作する方法は、以下の2つです。
プログラミング初心者でもできるように解説しているので、一緒にEAを作っていきましょう。
方法1.プログラミング知識不要!EAを自作する方法
実際に自分でEAを自作してみたいけど、プログラミングに関して全く知識が無いという方は多いのではないでしょうか。
MT4ではプログラミング知識が無くても、ストラテジー作成ツールを利用してEAを自作することが可能です。
【ストラテジー作成ツール】
あらかじめプログラムされた機能を組み合わせることで、自分だけのEAを作成する有料のツール。
利用したい機能を選択するだけでEAを作ることが可能。
利用できるプログラムが多いほど、ソフトの値段が上がる傾向にある。
MT4で利用できるストラテジー作成ツールは、以下の3つです。
ツール1.EAつくーる
EAつくーるは、市販のインジケーターを利用して自動売買を自作できるツールです。
14,800円の初期費用が掛かりますが、作成したEAの著作権を得ることができるため、自作EAを販売することもできます。
そのため、すごく良いEAのアイデアがあるけど、プログラミングの仕方が分からないという方におすすめの作成ツールです。
サポート体制もしっかりとしており、利用方法で分からないことがあっても、運営のサポートで即時解決することができます。
お財布に余裕がある方には、「EAつくーる」がおすすめです。
ツール2.MT4EAエディター
MT4EAエディターは、自動売買に不可欠な複雑な取引条件を比較的簡単に作ることが可能です。
複数のインジケーターを組み合わせて取引条件に設定も可能なため、複雑なEAでも簡単に自作することができます。
インジケーターを利用してEAを自作できる作成ツールの中ではかなり安く(8,500円)、利用しやすいのが特徴です。
EAの取引条件にインジケーターのシグナルを入れたい方におすすめです。
ツール3.EAつくる君
EAつくる君では、指標などを利用してEAを自作することが可能です。
EAつくる君は約7,400円と低額ですが、インジケーターを利用することができないというデメリットがあります。
インジケーターは利用できませんが、利用できる指標やサンプルの数は一定数あるため、絶対にインジケーターを利用したい方でなければ困ることはないでしょう。
また、作成マニュアル等も初心者用に詳しく作られているため、簡単なEAであれば数分で作成することが可能です。
とりあえずEAを作ってみたい。という方は、EAつくる君を利用してみてはいかがでしょうか。
方法2.MT4でプログラミングして自作する方法
MT4のEAを自作には、MQL言語(Meta Quotes Language)を利用します。
【MQL言語(Meta Quotes Language)とは】
メタトレーダー4の開発用のプログラミング言語。
C言語をベースに開発されている。
C言語やjavaなどの言語を習得している方であれば、すぐに習得できる難易度です。
以下の3つのステップで、MT4でプログラムしてEA自作することが可能です。
プログラム初心者の方は、「補足:プログラミングに必要なコード辞典」を利用しコピペで作成していきましょう。
ステップ1.メタエディターを起動する
MT5の画面上部のボタンをクリックして、メタエディターを起動させます。
使用しているFX業者によっては、メタエディターの言語が英語の場合があるので設定を変更しましょう。
初期設定が英語の場合は、メタエディター画面上部のViewからLanguagfをクリックして、一覧からjapaneseをクリックしてください。
言語を選択すると、メタエディターが再起動されて使用言語が日本語に変わります。
※初期設定で既に日本語の場合は、この設定は必要ありません。
EAのプログラムを組むには、新規作成からエキスパートアドバイザーを選択し、次へをクリックします。
次にEAの名前を入力する(EAの名前は自分で好きに決めることが可能です)。
名前と著作者を入力したら「次へ」をクリックしましょう。
何もチェックを入れずに「次へ」をクリックすれば、メタエディターの起動は完了です。
ステップ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に保存しましょう。
ステップ3.EAを起動する
まずは、MT4の上部の項目にあるツールを選択します。
次にその中のオプションを開き、Expert Advisorの設定を行いましょう。
Expert Advisorの動作条件を設定します。
「自動売買をストップさせる条件」「DLLの使用」「WetRequest」にチェックを入れておけば大丈夫です。
最後に「OK」ボタンを押せば、設定は完了となります。
EAを利用したい通貨ペアを画面に表示します。
次に、ナビゲーターの項目にあるエキスパートアドバイザーから、作成したをチャートにドロップします。
ドロップした通貨ペア以外ではEAを利用することができないので、注意しましょう。
ドロップが成功すると上記の設定画面が出てくるため、以下の項目を設定します。
設定①アラーム → ON
設定②自動売買 → ON
設定③DLLの使用 → ON
設定④外部エキスパートの使用 → ON
どれか一つでもONになっていないと、EAを利用することはできないので注意しましょう。
また、自動売買をONにするとチャート画面右上にニッコリマークがでます。
補足:プログラミングに必要なコード辞典
基本コード | 解説 | 基本コード | 解説 |
---|---|---|---|
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」のいずれか, |
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:計算する平均期間, 【例】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:計算する平均期間 【例】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:カスタムインジケーターのプログラム名 |
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:計算する平均期間, 【例】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の期間。 |
iRSI() |
RSIを計算して、その値を返す。 iRSI(string symbol,int timeframe,int period,int applied_price,int shift) (symbol:通貨ペア, NULLは現在の通貨ペア, timeframe:時間枠。0は現在のチャートの時間枠, 【例】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は現在のチャートの時間枠, 【例】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を作成することができますよ。
プログラムに自信が無い方は、作成ツールを利用し、自信がある方はプログラミングに挑戦してみてはいかがでしょうか。