FX自動売買システム開発

【無料講座】FX自動売買ツールの作り方を解説【MT4で自作EA】

 

サラリーマン投資家:
FXに興味があるけど仕事に支障が出そう。
でも自動売買ツールにお金を払うのはなぁ。

 

こんな悩みをばっちり解決します。

 

✔ 記事の信頼性

HAZU
プログラミング経験ゼロからツール開発を初めて7年。
サラリーマン向けの投資を探していたのがきっかけです。


最近では自身のトレード分析をTwitterで発信しています。


EA開発に挑戦いただくにあたり、以下を宣言しておきます。

 

✔ 挫折しない4つのポイント

  • プログラミング初心者向けにコピペを多用します!
  • 学習に使えるEAのソースコード全文を公開します!
  • ネットで無料公開されている情報を元にオリジナルEAが作れます!
  • 無料DLできるソフト(MT4、同梱のメタエディタ)を使用します!

 

さっそく解説に移りますが、1章2章は基礎知識や開発環境の話です。
不要な方は3章 EA開発に挑戦 からで大丈夫です。

 

 

1. EA開発の基礎知識

EAとはエキスパートアドバイザの略称です。
無料で使えるチャートアプリ『MetaTrader4』で使えます。


そもそもMT4って何?という方は以下参照下さい。

メタトレーダー(MT4)の使い方!ダウンロード方法から解説【MT4でFX自動売買】

続きを見る

 

以下では基本的なMT4の使い方を理解したという前提で話を進めます。

 

自作EAのメリット、デメリット
最低限の心構えとして持っておくべきこと

 

・自作EAのメリット、デメリット

冒頭で述べた通り自動売買システム最大の利点は「拘束時間が無いこと」です。
ただし、これはEAが完成した後の話です。
自作する上でのメリット、デメリットを理解しておきましょう。

 

自作EAのメリット

・開発過程で相場への理解が深まる

・プログラミング思考が身につく

・ネット上の詐欺商材に騙されない(重要)

自作EAのデメリット

・開発、検証に時間がかかる(3ヶ月~半年)

・トレーダーとしての能力とプログラミングスキルは別

・意図しない挙動(=バグ)で損失を被る可能性がある

 

プログラミング経験の無いトレーダーがいきなり勝てるEAを作るのは無理です。
投資経験のないプログラマーでも同じこと。

 

HAZU
経験を積みながらEAと一緒に成長していくのが理想です。

 

2.EA開発環境を構築

EA開発を始める上で必要なものを紹介。
必須と任意に分けていますが、出来れば一通り揃えたい。
徐々にで良いので環境を整えましょう。

 

■必須
開発用PC
無いと話にならない、最低限のスペックでOK

MT4【無料】
開発用のソフトで証券会社から無料ダウンロード可能

VPS【月2千円~】 
24時間PCを稼働した場合の電気代よりも安い

■任意
FX投資マスターガイド【無料】
FX手法解説本、基本戦略はこれ読めばOK

FXメタトレーダー入門【約2千円】
EA開発者のバイブル、初心者から上級者まで

EAつくーる【約3万円】 
プログラミング無しでEA開発、お試し版あり

 

PCやVPSは有料EAを使う場合にも必要です。
そう考えるとEA開発自体は無料で始められるのが嬉しいポイント。
料理でも何でも自作はコスパが良いです。

 

・PC【最低スペックでOK】

MT4を配布している証券会社によれば、動作環境は以下の通り。
低性能PCでも良いですがWindowsで無いと動作しないので注意。

取引業者 CPU メモリ
外為ファイネスト 1.2GHz以上
推奨:2GHz以上
1GB以上
推奨:2GB以上
OANDA Japan 1GHz以上
推奨:2GHz以上
512MB以上
推奨:1GB以上

 

参考情報

アマゾンで人気の格安ノートPCでも余裕でした。
これ以上のスペックなら基本問題無し。

 

・MT4【無料】


✔ 無料で使える開発ソフト

正確にはMT4に付属している『メタエディタ』を使用します。
開発用のプログラミング言語は『MQL4』という独自言語です。
メジャーな言語だとJAVAが近いかと思います。

MT4対応のFX業者は複数あり、口座開設後にダウンロードできます。

✔ 国内証券会社からダウンロードしましょう

海外業者を進める方もいますが何か理由が無い限り国内安定です。
個人的なオススメはOANDAですがMT4自体の仕様はどこも変わりません。
軽く特徴をまとめておくので参考にして下さい。

MT4対応の国内業者

ゴールデンウェイ・ジャパン
①日本No.1最狭スプレッド挑戦計画
②40種類以上のオリジナルインジケータ・ツールが無料
③CFD銘柄のチャート表示に対応
④Mac対応のFXTF MT4ウェブトレーダー

OANDA Japan
①NDD方式採用、業界最狭水準のスプレッド
②取引スタイルで3つのコースを選べる
③50種類以上のオリジナルインジケータ提供
④MT5に対応、オリジナルインジケータあり

楽天証券
①大手ネット証券会社で唯一MT4に対応
②ドル円0.5銭など低水準スプレッド
③楽天FXや優遇金利サービス

外為ファイネスト
①NDD方式採用、業界最狭水準の変動制スプレッド
②ワンショット上限1000万通貨、スキャルピングOK
③EA利用制限なし

FOREX.com
①高い約定力、84種類の豊富な通貨ペア
②無料のEAホスティングサービス
③TradingViewなどの優れたツールが無料

EZインベスト証券
①NDD方式採用、スキャルピングOK
②CFD銘柄をMT4で取引可能、EAも可
③オリジナルEA・インジケータを提供

FOREX EXCHANGE
①DMA方式を採用したフェアな取引環境
②有料のEAを少ない手数料で使える
③1度につき最大1000万通貨の注文が可能

 

以下の記事で詳しく紹介しています。

【MT4対応】国内FX会社のオススメを紹介【徹底比較】

続きを見る

 

・VPS【月2千円】

実際に自動売買する際はMT4を24時間起動する必要があります。
理由は色々ですが、おすすめはVPS(仮想PCサービス)です。
月2000円程度で理想環境が手に入ります。

 

✔ 常時起動はPCの故障原因に

筆者はFX以外に仮想通貨投資もしています。
訳あって半年間電源を入れっぱにした20万円のMacBookの末路がこちら。

バッテリが膨らみ完全に閉じることが出来なくなっただけでなく、
底板が変形し近くで見ると中の基盤が露出しています。
最悪発火の可能性もあるのでPCごと買い替える羽目に。

 

✔ MT4の動作確認が取れている業者がおすすめ

筆者が契約中のサービスは『お名前.com』です。
正直以下で紹介する業者ならどれでも変わらない印象。

 

MT4対応のVPS

お名前.comデスクトップクラウド for MT4 
・リモートデスクトップ込みの明朗な料金プラン
・主要な国内業者のMT4がプリインストール済み

ConoHa for Windows Server
・初心者でも扱いやすい設定画面
・時間単位、1日単位での料金請求

さくらのVPS for Windows Server
・業界最安レベルの利用料金
・設定画面は多少分かり辛い(PC中級者向け)

 

以下の記事で詳しく紹介しています。

【MT4】EA開発者オススメのVPS【お名前.com、さくら、ConoHa】

続きを見る

 

3. EA開発に挑戦

本ブログで推奨するEAの作り方は基本的に以下の4STEPです。
何回か繰り返すうちに要領が掴めるかと思います。

 

STEP1 サンプルEAを用意
公開しているソースコードを使用します。

STEP2 サンプルEAを評価
短期間と年単位では視点が変わります。

STEP3 サンプルEAを改良
より良い成績を出すためのコツ。

STEP4 オリジナルEAを開発
いよいよあなたの冒険が始まります。

 

HAZU
一日で全部終わらせる必要は無いので少しづつ進めましょう!

 

・STEP1 サンプルEAを用意

まずは無料公開されているEAを利用します。
EAの入手方法は2つあります。

 

① 製作者側でコンパイルしたファイルを入手

 

② 公開されているソースコードを入手してコンパイル

 

HAZU
自分で考えた取引条件を組み込む場合は②です。
①は修正不可なため、有償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側で使えるようになります。

 

・STEP2 サンプル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年以降の結果が改善しています。

 

HAZU
古いEAでもパラメータ変更で大化けの可能性があります。
ネット上の無料EAにもお宝があるかもしれません。

 

・STEP3 サンプルEAを改良

いよいよ自分でコードを変更してみましょう。
プログラミング経験がなくても大丈夫です。

 

✔ 変更⇒バックテストの繰り返しでロジックを強化

徐々に改変できる範囲を増やしてオリジナルのEAを作りましょう!

 

変更準備

①MT4を起動して「ツール」から「メタエディター」を選択

②「開く」で ①EAを用意する で作成したEAを開く

 

変更箇所

サンプルEAの場合、取引条件を決めるのは以下の check() 関数です。
goflg = true で売買指示を出すため、今回はその条件を少し厳しくします。

 

該当箇所を以下のように修正

売り条件、買い条件にあらかじめ用意した変数 M3[i] を追加します。
(どこで用意したかは 解説 を参照ください。)

 

HAZU
該当箇所を以下のマーカのように修正してください。
難しい場合は丸ごとコピペしても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] の追加で長期的な動きが条件として加わったためです。

 

HAZU
”取引回数が多く”  ”勝率の高い” が有益なEAを作るポイントです。

 

・STEP4 オリジナルEAを開発

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

 

HAZU
筆者の場合はプログラミング経験ゼロから始めました。
リアル口座で運用を始めたのは3ヶ月位だったと記憶しています。

 

✔ 自作EAで使える拡張ソースコード

以下で色々なトレード手法をコード付きで紹介しています。
条件を変更したり、変数を追加していろいろ試してみて下さい。

>>参考:『FX自動売買システム(EA)の自作に困った際のヒント集【MT4】』

 

4.参考書籍やおすすめサービス

EA開発を進める上でおすすめの書籍やサービスを紹介します。
価格帯別に紹介しているので、お財布と相談で。

 

FX投資マスターガイド【無料】
FX手法解説本、基本戦略はこれ読めばOK

FXメタトレーダー入門【約2千円】
EA開発者のバイブル、初心者から上級者まで

EAつくーる【約3万円】
プログラミング無しでEA開発、お試し版あり

EAプログラミングセミナー【約4万円】
講師からの指導を受けつつEA開発の基礎を学べます

 

・FX投資マスターガイド【無料】

FXの基本戦略はこれ読めばOK、メアド登録だけで無料。
特に図解が分かり易いのでこれを参考にロジックを考えると良い。
配布終了時期が未定なので忘れないうちに。

FX投資マスターガイド

>>FX投資マスターガイドのダウンロード

 

・FXメタトレーダー入門【約2千円】

EA開発者を目指すなら以下のシリーズは押さえておきたいです。
筆者は書籍版を持っていますが、半額の電子版がおすすめ。

 

✔ FXメタトレーダー入門【初心者向け】

MT4の使い方を1から紹介してくれます。
これからEAを自作しようという方にはちょっと物足りないかも。


AMAZON 楽天

 

✔ FXメタトレーダー実践プログラミング【中~上級者向け】

MT4の使い方はOK!と言う方はこちらからで大丈夫。
辞書的な使い方もできるので余裕があれば紙媒体もおすすめ。


AMAZON 楽天

 

・EAつくーる【約3万円】

本講座で難しいと感じたらEAつくーるを使うのも選択肢です。
1度購入すればノーコード(プログラミング無し)でEAが作れます。

 

2ステップで作るオリジナルEA

①EAつくーるでベースを作成
②つくーるの機能で実装できない自作ロジックを追記

 

今ならお試し用の1ヶ月版が2980円で使えます。
割高なので”使える”と思ったら買い切り版に切り替えましょう。

 

 

 

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる! | GogoJungle

>>EAつくーるの概要はこちら

>>1ヶ月版の販売ページはこちら

 

・EA開発セミナー【約4万円】

講師の支援を受けながらEA開発を学ぶプログラミングセミナーです。
3つの講座が提供されていますが、実践講座or裏口座がおすすめ。
スタンダード講座は内容が基礎的すぎてコスパが悪い印象。

>>スタンダード講座
>>実践講座
>>裏口座

 

5.EA開発を副業にする

自作EAを販売したり、受託開発することで利益を得ることができます。
トレードはEAに任せて自身は副業に取り組めば資産形成が加速します。

 

開発したEAを販売
独占したい気持ちを抑えて原資を増やすことを優先

クラウドソーシングでEA開発代行
他人のアイデアを学びながらお金を稼ぐ

 

・開発したEAを販売

EAを販売する際は金融商品取引業の認可を受けているサイトを利用しましょう。
ゴゴジャンなら平均1~2万円、人気のものなら3万円で販売できます。
先に紹介したEAつくーるで作成したEAも販売可能です。


↓人気ランキングに載るようなEAなら数百万円の収入も狙えます。

 

・クラウドソーシングでEA開発代行

ココナラのようなクラウドソーシングサイトでEA開発を代行できます。
人気なクリエイターほど値段が高いのはEA販売と同じです。
初めは3000円くらいで出品して実績を増やしていくのが良いかと。

 

≫ココナラの無料会員登録はこちら

 

6.まとめ

本記事ではFXの自動売買システムの自作方法を紹介しました。
胡散臭いと言われる自動売買ですが、きちんと仕組みを知れば怖くありません。
投資は自動売買に任せて、副業や新たな趣味に挑戦してはいかがでしょうか。

 

以上、参考になれば幸いです。

 

  • この記事を書いた人

HAZU

静岡の一部上場企業で働く兼業投資家、投資を初めて6年が経ちました。30代のセミリタイアを目指して20代からコツコツと資産形成中。趣味はキャンプとプログラミング。ブログでは主に【FXの始め方から自動化】までを扱っています。

-FX自動売買システム開発

© 2022 HAZUの資産形成ラボ Powered by AFFINGER5