日中働くサラリーマン:
FXに興味があるけど仕事に支障が出そう。
自動売買ツールがあるみたいだけど有料なのか...
こんな悩みをばっちり解決します。
✔ 記事の信頼性

日中働くサラリーマン向けの投資を探していたのがきっかけです。
最近では自身のトレード分析をTwitterで発信しています。
20時、NY市場の分析です。
— HAZU@FX分析配信用 (@Hazu26048962) February 15, 2021
11ペアでトレンド発生、5ペアを抜粋。 #FX
◎買い目安
ユーロ円:127.0
ポンド円:145.0
ユーロドル:1.210
ポンドドル:1.381
豪ドルドル:0.773
◎売り目安
該当なし
想定レンジ、省略ペアは以下参照。https://t.co/0gBuOPIou5
ブログで初めて書いたのがこの記事で、何回もリライトを重ねた自信作です。
EA開発に挑戦いただくにあたり、以下を宣言しておきます。
✔ HazuのEA開発講座「挫折しない4つのポイント」
- プログラミング初心者向けにコピペを多用します!
- 学習に使えるEAのソースコード全文を公開します!
- ネットで無料公開されている情報を元にオリジナルEAが作れます!
- 無料ダウンロードできるMT4、同梱のメタエディタのみ使用します!
さっそく解説に移りますが、1章2章は基礎知識や開発環境の話です。
不要な方は3章 EA開発に挑戦 からで大丈夫です。
1. 自動売買ツール(EA)開発の基礎知識
EAとはエキスパートアドバイザの略称です。
無料で使えるチャートアプリ『MetaTrader4』で使えます。
そもそもMT4って何?という方は以下参照下さい。
-
-
メタトレーダー(MT4)の使い方!ダウンロード方法から解説【MT4でFX自動売買】
続きを見る
以下では基本的なMT4の使い方を理解したという前提で話を進めます。
1:自作EAのメリット、デメリット
冒頭で述べた通り自動売買システム最大の利点は「拘束時間が無いこと」です。
ただし、これはEAが完成した後の話です。
自作する上でのメリット、デメリットを理解しておきましょう。
自作EAのメリット
・開発過程で相場への理解が深まる
・プログラミング思考が身につく
・ネット上の詐欺商材に騙されない(重要)
自作EAのデメリット
・開発、検証に時間がかかる(3ヶ月~半年)
・トレーダーとしての能力とプログラミングスキルは別
・意図しない挙動(=バグ)で損失を被る可能性がある
プログラミング経験の無いトレーダーがいきなり勝てるEAを作るのは無理です。
投資経験のないプログラマーでも同じこと。

2.EA開発用の環境を構築
EA開発に必要な環境をご紹介。
必須のものと任意ものに分けています。
2:開発用のPC【必須】
MT4を配布している証券会社によれば、動作環境は以下の通り。
意外と低性能のPCでも動作します。
取引業者 | CPU | メモリ |
外為ファイネスト | 1.2GHz以上 推奨:2GHz以上 |
1GB以上 推奨:2GB以上 |
OANDA Japan | 1GHz以上 推奨:2GHz以上 |
512MB以上 推奨:1GB以上 |

参考情報
3:開発用のMT4【必須】
MT4対応のFX業者は複数あり、口座開設後にダウンロードできます。
✔ 国内業者が安定
海外の業者を進めるブログを見ますが、何か理由が無い限り国内安定です。
MT4自体の仕様は変わりません。
通貨ペアやスプレッド、独自のサービスで選びましょう。
MT4対応の国内業者
以下の記事で詳しく紹介しています。
-
-
【MT4対応】国内FX会社のオススメを紹介【徹底比較】
続きを見る
✔ 開発に使用するソフト
MT4に付属している無料ソフト『メタエディタ』を使用します。
開発用のプログラミング言語は『MQL4』という独自言語です。
メジャーな言語だとJAVAが近いかと思います。
4:24時間稼働させるVPS【任意】
実際に自動売買する際はMT4を24時間起動する必要があります。
自宅PCでも良いですが、おすすめはVPS(仮想PCサービス)です。
月額2000円程度で理想の環境が手に入ります。

テレワークで自宅から会社のPCにアクセスしている方も多いのでは。
✔ MT4の動作確認が取れている業者
筆者が実際に使用しているサービスは『お名前.com』です。
ただ、以下で紹介する業者であれば正直どれでも変わりません。
MT4対応のVPS
以下の記事で詳しく紹介しています。
-
-
【MT4】VPSのオススメ!EA開発者が徹底比較【お名前.com、さくら、ConoHa】
続きを見る
3. EA開発に挑戦
本ブログで推奨するEAの作り方は基本的に以下の4STEPです。
何回か繰り返すうちに要領が掴めるかと思います。

5:サンプルEAを用意する
まずは無料公開されているEAを利用します。
EAの入手方法は2つあります。
① 製作者側でコンパイルしたファイルを入手
② 公開されているソースコードを入手してコンパイル

①は修正不可なため、有償EAはこの形で販売しています。
記事内ではブログで公開しているソースコードで解説します。
使いたいコードがあればそれを使用してもOKです。
EAの作成にはMT4付属の「メタエディター」を使用します。
新規作成⇒プログラミング⇒コンパイルが通常の工程です。
今回はプログラミングをコピペで飛ばします。
✔ 導入手順
コピペ前提であれば名前だけ設定すればOKです。
以下に従ってコンパイルまで進めてください。
①MT4を起動して「ツール」から「メタエディター」を選択
②「新規作成」から「エキスパートアドバイザ(テンプレート)」を選んで次へ
③ 名前を決め(画像の場合はtest)、次へをクリック
④特に変更せずに「完了」をクリック
⑤ プログラミング画面が開いたら以下のソースコードを全文コピペ
※2020年5月動作確認済
※ソースコードの中身は詳細解説へ
command//------------------------------------------------------------------+ // jisakuEA.mq4 // Copyright 2019, Hazu //------------------------------------------------------------------+ #property copyright "Copyright 2019, Hazu" // 作成者名 #property link "https://hazu-hobby.net/" // Webサイトリンク #property version "4.0" // バージョン #property strict // 厳格なコンパイルモード #property description "自作EA" // EA説明文 #define MAGICMA 20191007 // EA識別用マジックナンバー #define DEBUG //バックテスト用 #ifdef DEBUG int prevsec; int BScnt = 0; bool ForBackTest(int Timerseconds) { if (Seconds() != prevsec) BScnt ++; prevsec = Seconds(); if (BScnt >= Timerseconds){ BScnt = 0; return(true); } return(false); } #endif // OnInit(初期化)イベント int OnInit() { EventSetTimer(60); return(INIT_SUCCEEDED); } // OnDeinit(アンロード)イベント void OnDeinit(const int reason) { EventKillTimer(); } //バックテスト用 void OnTick(){ #ifdef DEBUG if (ForBackTest(60)) OnTimer(); #endif } // OnTick(tick受信)イベント void OnTimer(){ if ( IsTradeAllowed() == false ) { return; } main(); //Main logic } //------------------------------------------------------------------------------------ // 0. main : メインロジック //------------------------------------------------------------------------------------ input int Ma1 = 1; // MA1(now) input int Ma2 = 7; // MA2(short) input int Ma3 = 25; // MA3(mid) input int time = 15; // time input string rcur = "USDJPY"; double M0[5],M1[5],U1[5],L1[5],M2[5],M3[5]; int result; bool goflg; void main(){ getprm(); check(); position(); return; } //------------------------------------------------------------------------------------ // 1. getprm : パラメータ取得 //------------------------------------------------------------------------------------ void getprm(){ for(int i=4; i>=0; i=i-1){ M0[i] = iMA(rcur,time, Ma1, 0, 0, 0, i); M1[i] = iMA(rcur,time, Ma2, 0, 0, 0, i); U1[i] = iBands(rcur,time,Ma2,1.5,0,PRICE_CLOSE,1,i); L1[i] = iBands(rcur,time,Ma2,1.5,0,PRICE_CLOSE,2,i); M2[i] = iMA(rcur,time,Ma3, 0, 0, 0, i); M3[i] = iMA(rcur,time,50, 0, 0, 0, i); } } //------------------------------------------------------------------------------------ // 2. check : 取引条件確認 //------------------------------------------------------------------------------------ void check(){ //条件処理 for(int i=4; i>=0; i=i-1){ if(M1[i]<=M2[i]){ result = -1; if(M0[i]>=U1[i]) goflg = true; else goflg = false; } else if(M1[i]>=M2[i]){ result = 1; if(M0[i]<=L1[i]) goflg = true; else goflg = false; } else{ result = 0; goflg = false; } } } //------------------------------------------------------------------------------------ // 3. position : ポジション管理 //------------------------------------------------------------------------------------ void position(){ //ポジション数取得 int res; int tpoji = 0; int pojilim = 1; int torder = OrdersTotal(); //ポジション数カウント for(int i = torder-1; i >= 0; i--){ res = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==rcur&&((OrderType()==0&&result==1)||(OrderType()==1&&result==-1))) tpoji += 1; } //ポジション構築 if(tpoji<pojilim&&result!=0&&goflg) ordersend(); } //------------------------------------------------------------------------------------ // 4. ordersend : ポジション構築 //------------------------------------------------------------------------------------ void ordersend(){ int res = 0; double BID = MarketInfo(rcur,MODE_BID); double ASK = MarketInfo(rcur,MODE_ASK); double PIP = MarketInfo(rcur,MODE_SPREAD); //売り指示 if(result==-1&&PIP<=100){ res = OrderSend(rcur,OP_SELL,0.5,BID,100,ASK+0.2,ASK-0.4,"Short",MAGICMA,0,clrRed); Sleep(3000); } //買い指示 else if(result==1&&PIP<=100){ res = OrderSend(rcur,OP_BUY,0.5,ASK,100,BID-0.2,BID+0.4,"Long",MAGICMA,0,clrRed); Sleep(3000); } }
※2020年5月動作確認済
⑥「コンパイル」を押してエラーが出なければ完了
これで作成したEAがMT4側で使えるようになります。
6:サンプルEAを評価する
EA稼働前には過去の相場データを用いたチェックが必要です。
これをバックテストと言います。
STEP1 で準備したサンプルEAのバックテストをしましょう!
✔ バックテストによりEAの実力を確認
①MT4の左上「表示」から「ストラテジーテスター」を選択
②タブからエキスパートアドバイザを選択
③ STEP1で作成したEA、通貨ペアにドル円、期間にM15を選択
④ モデルに全ティック、スプレッドに 5 を設定
⑤ 期間は3年以上推奨(例では20014/4/1-2020/4/22)
⑥「スタート」をクリック
⑦以下のようなチャートが出てくれば成功
(失敗した場合はページ下部のヒストリカルデータの確認を実施)
結果:100万円⇒210万円
約5年で資産が約2倍まで増えています。
実開発では資産増加率だけでなく勝率も考慮する必要があります。
✔ ヒストリカルデータ確認方法
バックテストに失敗した場合は内部データ破損の可能性があります。
以下の手順を試してみて下さい。
①MT4起動
②「ツール」から「ヒストリーセンター」を選択
③ データを取得する通貨ペアと時間足を指定して「ダウンロード」を押す
(画像の場合はUSD/JPYの1分足データを入手)
終わったら青枠の部分でデータが入手できているか確認して下さい。
時間足は使用する足以下のものを全てダウンロードして下さい。
✔ パラメータ設定によりEAの動きを最適化
①ストラテジーテスターの「エキスパート設定」をクリック
②「パラメータの入力」に移動してMA2の値を 7 ⇒14 に変更し「OK」をクリック
③変更後は「スタート」を押して再び結果を出力
結果:100万円⇒190万円
収益が悪化しましたが、この結果は必ずしも悪いとは言えません。
変更前の結果と比べると2018年以降の結果が改善しています。

ネット上の無料EAにもお宝があるかもしれません。
7:サンプルEAを改良する
いよいよ自分でコードを変更してみましょう。
プログラミング経験がなくても大丈夫です。
✔ 変更⇒バックテストの繰り返しでロジックを強化
徐々に改変できる範囲を増やしてオリジナルのEAを作りましょう!
変更準備
①MT4を起動して「ツール」から「メタエディター」を選択
②「開く」で ①EAを用意する で作成したEAを開く
変更箇所
サンプルEAの場合、取引条件を決めるのは以下の check() 関数です。
goflg = true で売買指示を出すため、今回はその条件を少し厳しくします。
該当箇所を以下のように修正
売り条件、買い条件にあらかじめ用意した変数 M3[i] を追加します。
(どこで用意したかは 解説 を参照ください。)

難しい場合は丸ごとコピペしてもOKです。
command //------------------------------------------------------------------------------------// 2. check : 取引条件確認//------------------------------------------------------------------------------------void check(){//条件処理 for(int i=4; i>=0; i=i-1){ if(M1[i]<=M2[i]&&M2[i]<=M3[i]){ result = -1; if(M0[i]>=U1[i]) goflg = true; else goflg = false; } else if(M1[i]>=M2[i]&&M2[i]>=M3[i]){ result = 1; if(M0[i]<=L1[i]) goflg = true; else goflg = false; } else{ result = 0; goflg = false; } } }
変更結果
変更を保存した上で再度バックテストを実行しましょう。
結果:100万円⇒300万円
取引回数が減っていますが、その分安定性が増しています。
M3[i] の追加で長期的な動きが条件として加わったためです。

8:オリジナルEAを開発する
サンプルEAを編集したり、サンプル同士を組み合わせて開発していきます。
バックテストだけでなく、デモ口座で実相場での成績を確認することも必要です。

リアル口座で運用を始めたのは3ヶ月位だったと記憶しています。
✔ 自作EAで使える拡張ソースコード
以下で色々なトレード手法をコード付きで紹介しています。
条件を変更したり、変数を追加していろいろ試してみて下さい。
>>参考:『FX自動売買システム(EA)の自作に困った際のヒント集【MT4】』
4.参考書籍やおすすめサービス
EA開発を進める上でおすすめの書籍やサービスを紹介します。
価格帯別に紹介しているので、お財布と相談で。
9:書籍【約2千円】
EA開発者を目指すなら以下のシリーズは押さえておきたいです。
筆者は書籍版を持っていますが、半額の電子版がおすすめ。
✔ FXメタトレーダー入門【初心者向け】
MT4の使い方を1から紹介してくれます。
これからEAを自作しようという方にはちょっと物足りないかも。
✔ FXメタトレーダー実践プログラミング【中~上級者向け】
MT4の使い方はOK!と言う方はこちらからで大丈夫。
辞書的な使い方もできるので余裕があれば紙媒体もおすすめ。
10:有料EA開発ツール【約2万円】
プログラミング初心者ならゴゴジャンのEAつくーるも選択肢に入ります。
1度購入すればノーコード(プログラミング無し)でEAが作れます。
EAつくーるでベースを作成、自分で改良を加えることも可能です。
お試し用の1ヶ月版が1980円で使えます。
割高なので、長期的に取り組むなら買い切りが良いでしょう。
>>EAつくーるの概要はこちら
>>1ヶ月版の販売ページはこちら
11:有料EA開発セミナー【約4万円】
書籍とEAつくーるで解決できそうならまずはそちらを。
効果は確かですが、有料EAが1つ買える値段です。
講師の支援を受けながらEA開発を学ぶプログラミングセミナーです。
3つの講座が提供されていますが、実践講座or裏口座がおすすめ。
スタンダード講座は内容が基礎的すぎてコスパが悪い印象です。
5.EA開発を副業にする
自作EAを販売したり、受託開発することで利益を得ることができます。
トレードはEAに任せて自身は副業に取り組めば資産形成が加速します。
12:開発したEAを販売
EAを販売する際は金融商品取引業の認可を受けているサイトを利用しましょう。
ゴゴジャンなら平均1~2万円、人気のものなら3万円で販売できます。
先に紹介したEAつくーるで作成したEAも販売可能です。
↓人気ランキングに載るようなEAなら数百万円の収入も狙えます。
13:クラウドソーシングでEA開発代行
ココナラのようなクラウドソーシングサイトでEA開発を代行できます。
人気なクリエイターほど値段が高いのはEA販売と同じです。
初めは3000円くらいで出品して実績を増やしていくのが良いかと。
6.まとめ
本記事ではFXの自動売買システムの自作方法を紹介しました。
胡散臭いと言われる自動売買ですが、きちんと仕組みを知れば怖くありません。
投資は自動売買に任せて、副業や新たな趣味に挑戦してはいかがでしょうか。
以上、参考になれば幸いです。