FXの自動売買がどんなものか気になって試してみた。バックテストは難しいものと思っていたがオペレーションは意外に簡単。これならプログラミングの知識があれば簡単に自動売買プロブラムを作れそう。しばらくは自作EAとバックテストで遊んでみようと思う。
本記事はFXの自動売買に使用されるプログラムについて解説していますが内容を保証するものではありません。金銭にかかわる内容であるためご注意ください。参考にする場合は自己責任でお願いします。
本記事ではMT4を使用する。
FXDD – MetaTrader
・Version: 4.00 build 1322
・8Feb 2021
MetaEditor
・Version 5.00 build 2375
・7 Jan 2021
前提知識のおさらい
本記事はMT4(FX取引ツール)をインストール済みの状態ではじめる。簡単に前提知識を紹介する。
FXとは
簡単に言うと丁半博打なのだがなぜか99%が負ける。ごくごくまれにFXで勝てる人はいるが基本的には無理。悪いことを言わないから変な夢を見ない方がよい。詳しくはこちら。
EAとは
EA(Expert Advisor)はエキスパートアドバイザーと呼ばれるFXで使われるプログラム。EAを使って自動で売買することが可能。チャートの動きやインジケーターの状態などを使ってプログラムが判断し売買する。自動取引で儲かるとか夢のような話は基本的にはないので注意。ここは冷静に考えてほしい。自動売買で確実に儲かるなら誰にも教えないし、そんなものが簡単に入手できたら誰も働かない。
MT4のダウンロード
MT4(MetaTrader 4)とはFX取引に使用するツールである。前述したEA(自動売買プログラム)も使えるのでツールと言うよりもFX売買プラットフォームと言った方がいいだろうか。このMT4は最新版のMT5がある。しかしMT4とMT5でEAの互換性がないため未だにMT4を使う人が多い。
MT4をダウンロードするには対応した証券会社からダウンロードするしかない。なぜか開発元からはMT5しかダウンロードできない。本記事では「FXDD」のデモ環境を使用している。三か月の使用期限があるのでちょっと微妙かも。MT4はどこでもいいのでとりあえずダウンロードしてインストールする。特におすすめの証券会社はないので「MT4 デモ口座」で検索していただきたい。
EAでのHelloWorld
MT4環境でサンプルEAを作成しバックテストで実行する。
- MT4の起動
- メタエディターの起動
- 新しいEAの作成
- テンプレートの確認
- EAの作成(開始終了メッセージ)
- EAの作成(1回だけ出力するメッセージ)
- EAのコンパイル
- EAのバックテスト実行
(1) MT4の起動
インストールしたMT4を起動する。基本的に初期状態のままでよい。EAの簡単な動作確認なので過去チャートも不要。
(2) メタエディターの起動
EAのプログラムを作成するためのエディターを開く。エディターはMT4と別ウインドウとなる。
「ツール」の「メタエディター」をクリック。
メタエディターが起動する。
(3) 新しいEAの作成
新規にEAを作成する。EAはMQL4と呼ばれるコンピュータ言語で記述。ぱっと見C言語に近い。C言語に近いので悪く言うと古臭くて使いづらいのだ。
「ファイル」>「新しいファイル」をクリック。
ウィザードが始まる。
「エキスパートアドバイザ(テンプレート)」を選択し「次へ」をクリック。
情報入力画面が表示される。
著作権、リンク、パラメータなどあるがとりあえず「名前」だけ設定すればよい。EAの名前は「Experts¥HelloWorld」の「HelloWorld」になる。名前を入力したら「次へ」をクリック。
次にイベントハンドラの設定だが今回はすべて無しでよい。
「次へ」をクリック。
「完了」をクリック。
(4) テンプレートの確認
「HelloWorld.mq4」ファイルが生成される。
テンプレートの内容はこちら。
初期設定で入力されるイベントは以下の3つ。プログラムの経験のない方はあまり深く考えなくてよい。使っていくうちになれるハズ。
イベント | コメント |
---|---|
int OnInit() | EAが開始されたときに呼び出される関数。 |
void OnDeinit(const int reason) | EAが終了したときに呼び出される関数。 |
void OnTick() | ティック(Tick)の変化があった時に呼び出される関数。 |
(5) EAの作成(開始終了メッセージ)
動作確認レベルなので簡単にプログラムする。EAの開始と終了時にメッセージを出力する。
EA開始時にメッセージ「start」を表示する。
EA終了時にメッセージ「end」を表示する。
(6) EAの作成(1回だけ出力するメッセージ)
「HelloWorld」のメッセージを1回だけ表示する。プログラム初心者はあまり深く考えすとりあえず真似して入力しよう。
変数を宣言する。bool型は「true」と「false」の2種類どちらかの値を持つ。
flg変数を「true」で初期化する。この処理はEA起動時に一回だけ動く。
ティックイベントに出力処理を記述。1回だけ「Hello World」を出力。
HelloWorld.mq4
//+------------------------------------------------------------------+ //| HelloWorld.mq4 | //| Copyright 2021, zerokara-blog. | //| https://zerokara-blog.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, zerokara-blog." #property link "https://zerokara-blog.com/" #property version "1.00" #property strict bool flg; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Print("start"); flg = true; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Print("end"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(flg == true) { Print("Hello World!!"); flg = false; } } //+------------------------------------------------------------------+
(7) EAのコンパイル
プログラムはコンパイルしないと実行できない。コンパイルのタイミングで文法エラーも確認できる。
「コンパイル」をクリックする。
ツールボックスのエラータブを確認しエラーが0件であれば完了。
メタエディターはここで終了。
(8) EAのバックテスト実行
次はMT4に戻りバックテストを実行する。バックテストとは過去のデータでEAを動作検証すること。
「表示」の「ストラテジーテスター」をクリック。
画面下にテスターが表示される。セッティングタブに値を入力し実行する。
エキスパートアドバイザを選択し先ほど作成したEA「HelloWorld.ex4」を選択。
動作確認なので期間は適当に一カ月程度設定する。
値を入力したら「スタート」ボタンをクリック。
EAが完了するとバーが緑色にかわる。
「操作履歴」タブの内容を確認する。プログラムで出力した「start」、「HelloWorld!!」、「end」が確認できる。
これで作成したEAが正しく動作したことが確認できた。
まとめ
久しぶりにC言語を使ったが何とかなった。C言語は20年以上前から使っていて今回は10年ぶり。C言語はJavaやC#などと比べると難しいので初心者には敷居が高いかもしれない。ただし、ネットでサンプルプログラムがたくさん転がっているので組み合わせれば初心者でも何とかなるだろう。
- EAのプログラミング言語はC言語に似ている
- EAのプログラミング難易度はやや高め
- MT4(MT5)を使えばバックテストができる
C言語は苦手ですが何とか頑張ります。