【初心者必見】FXで自動売買を自作する方法を基礎から応用まで徹底解説

FX自動売買

FXの自動売買を自作する方法についてお調べですね。

初心者では自動売買を自作することは難しい。と思われがちですが、実は初心者でも簡単に自作できる方法があるんです。

本記事では、FXの自動売買を自作する方法を初心者向けに分かりやすくご紹介。

この記事を読めば、すぐにFXの自動売買を自作することができますよ。

ぜひ参考にしてくださいね。

【自動売買こそスプレッドを見直そう】

自動売買では、自分でトレードしないため、あまりスプレッドの高さに気付かないことが多いです。

しかし、自動売買では高頻度取引を行うことが多いため、取引ごとにかかる手数料は少ない方が有利と言えます。

MT4であれば、MT4業界で最安値のスプレッドを誇る「Axiory」がおすすめです。

もしも、主要通貨でスプレッドが3Pips以上の通貨がある業者を利用している場合は、一度安い手数料の業者の利用を検討してみてはいかがでしょうか。

Axioryは海外FXの中でも非常に高い信頼性があるので、安心して利用することができますよ。

1.FXにおける自動売買とは

FXにおける自動売買とは

FXの自動売買とは、あらかじめ作成されたプログラムを利用して24時間自動取引を行うことを言います。

自動売買は、常にプログラムが相場状況を監視して取引をしてくれるため、FXに時間を割けない方におすすめです。

FXで利用できる自動売買システムは、ネット上から無料・もしくは有料で入手することもできますが、今回は自作する方法について詳しく解説していきます。

自動売買を無料・有料で利用したい方は、自動売買を無料・有料で利用する方法の記事をご覧ください。

FXの自動売買を自作するためには、自動売買自作方法を把握しておくことが大切です。

知っておくべき自動売買の自作方法を難易度順にまとめてみたので、一緒に見ていきましょう。

難易度★★★★☆.ストラテジー開発型

難易度★★★☆☆.ストラテジー作成ツールを利用する

難易度★★☆☆☆.リピート注文型

難易度★★★★☆.ストラテジー開発型

ストラテジー開発型の自動売買は、MT4・MT5でプログラミング開発された自動売買のことです。

自動売買の自作と聞くと、こちらの方法を思い浮かべる方が多いのではないでしょうか。

この方法は自分で自動売買のプログラムを組む必要があるため、自動売買を自作する方法としては最も難易度が高いです。

MT4で自動売買を自作するには、MQL言語(Meta Quotes Language)を利用する必要があります。

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

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

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

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

MQL言語や、プログラミング自体が初めての方でも、以下の手順に沿ってプログラムを行えば、自動売買を自作することが可能です。

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

ステップ2.プログラムを書く

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

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

まず初めに、自動売買のプログラム文を書き込むための環境「メタエディター」を起動させます。

(メタエディターは、MT4の画面上部のボタンをクリックすると起動します。)

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

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

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

次に自動売買の名前を入力する。(自動売買の名前は後からどのような自動売買か分かるような名前にしておきましょう)

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

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

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

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

これでプログラムを書くための環境ができたので、次はプログラムを書いていきましょう。

ステップ2.プログラムを書く

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

自動売買を自作するには、以下の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);

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

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

自作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()を使えば正規化した桁数を取得可能

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

最後に、自作した自動売買をチャート上に表示し、実際に動くかどうか確認していきましょう。

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

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

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

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

Expert Advisorの項目の設定をする

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

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

自動売買を利用したい通貨ペアを画面に表示します。

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

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

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

EAの詳細設定を確認する

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

設定①アラーム → ON

設定②自動売買 → ON

設定③DLLの使用 → ON

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

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

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

EAの詳細設定を確認する

これで、自動売買の作成は完了です。

難易度★★★☆☆.ストラテジー作成ツールを利用する

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

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

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

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

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

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

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

ツール1.MT4の機能を利用する(無料)

MT4では、既存のインジケーターを利用して自動売買を作成する方法があります。

【インジケーターとは】

FXなどでテクニカル分析に利用するツール。

買いや売りのサインが出るものあり、視覚的に相場の状況を知ることができます。

ストラテジー開発型のようにプログラムの知識は必要ありませんが、ストラテジー開発型と比べると自由度がかなり小さいです。

ストラテジー選択型

こちらが実際にインジケーターを選択し、設定を行っている画面です。

多数存在するインジケーターの中から、自分好みにカスタムすることができます。

こちらの方法では、すでにMT4に導入されているインジケーターと簡単な設定しかできないにもかかわらず、有料の作成ツールよりも難易度が高いです。

そのため、財布に余裕のある方は有料の作成ツールを利用することをおすすめします。

ツール2.EAつくーる

EAつくーる

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

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

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

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

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

ツール3.MT4EAエディター

ツール2.MT4EAエディター

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

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

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

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

ツール4.EAつくる君

ツール3.EAつくる君

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

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

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

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

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

難易度★★☆☆☆.リピート注文型

リピート注文型は、裁量トレードの中で自分が設定した売買を繰り返し行う自動売買の方法です。

先ほどまでに紹介した自動売買よりも、もっと単純なものになっています。

リピート注文型

このように相場が下がれば買い注文を入れ、相場が上がれば売り注文を入れることを繰り返し行っていくものです。

様々な条件を元に作成される本格的なシステムトレードをは多少異なりますが、内容は単純なため初心者でも簡単に設定ができるものになっています。

しかし、利益を出していくためには自ら相場がどのように動いていくのか予想する必要があるので、初心者が利用するには少し難しいと言えるでしょう。

まとめ

今回は、FXの自動売買を自作する方法について詳しく解説しました。

自動売買を自作するのは難しいと思われがちですが、実はそうでもないことがお分かりいただけたのではないでしょうか。

自動売買を自作することができれば、思い通りのトレードを24時間行うことができます。

あなただけの自動売買を作成して、快適なFXライフを送ってくださいね。

関連記事

  1. FX自動売買

    FXの自動売買とは?口コミや無料ダウンロードサイトまで徹底解説!

    この記事で解決できる悩み 自動売買が何なのか知りたい …

  2. FX自動売買

    MT4でEA(自動売買)を使う方法!設定から実際の取引方法まで徹底解説

    MT4でEA(自動売買)を使いたいけど、設定方法や使い方が分からず悩ん…

  3. FX自動売買

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

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

  4. FX自動売買

    MT5で利用できるEAとは?詳しい自作方法やEAの導入手順を徹底解説!

    MT5のEA(自動売買)に関してお調べですね?EAは、MT5上で利…

  5. FX自動売買

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

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

  6. FX自動売買

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

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

LINE@で無料動画配信中!

最近の記事

  1. FXで勝てない原因
  1. FXノウハウ

    海外FXならcTraderが絶対お得!MT4とcTraderの5つの特徴を徹底比…
  2. 海外FX口座

    XMならMT5!XMのMT5をPCとスマホにセットアップして取引する全手順
  3. FXノウハウ

    【比較】スマホでFXするならXMがおすすめ!スマホアプリの便利さを徹底紹介
  4. 海外FX口座

    【初心者向け】海外FXの確定申告の方法を3つのステップで徹底解説!
  5. FXノウハウ

    DD方式とNDD方式の違いは何?無駄な損をしないためには〇〇を使え!
PAGE TOP