EAはMT4(MT5)をインストールしていれば、誰でも作る事ができます。しかし、MT4はMQL4というC言語がベースのプログラム言語で書く必要があります。
ここでは、初心者でもわかる基本的なEAの作り方を、少しだけ解説してみたいと思います。
(MT4のMQL4と、MT5のMQL5は全く関数が違って互換性が無いので、ここではMT4だけ)
MT4のインストールは必須
MT4のインストールは必須です。私はXMTrading のMT4を使用していますが、基本的な操作は、どのサードパーティのMT4でも同じです。
なお、XMTradingのインストール方法はこちらの記事にまとめました。デモ口座が使えるので、無料で最初から始められます。
MT4のメニューからメタエディター(MetaEditor)起動
MT4のメニューから、メタエディターというコーディングソフトを起動します。
サードパーティーによっては、英語でMetaEditorと表示しているものもあります。
(※XMTradingは日本語で表示)
プロジェクト作成
メニューバーより、「ファイル」⇒「新しいプロジェクト」
MQLウィザードの表示が出ますので、エキスパートアドバイザ(テンプレート)を選んで「次へ」
(※MT5ではこの画面が異なります)
一般プロパティは、名前は必須。著作権、リンク、パラメータは入れる必要なし。
「Experts¥」の後ろにプロジェクト名を書きます。
テストで実施したい方は「test」とでも入れてください。僕は、この後、SMAのゴールデンクロスの売買のEAを作ろうと思ったので、上記のようにしました。
イベントハンドラは、何もチェックせずに、「次へ」。
テスターイベントハンドラも同様に、何もチェックせずに「完了」を押します
EAの初期画面はこんな感じ
MQL4というプログラムで書かれてます。
これを解説すると、MQLの構文そのものを説明しないといけないので、大変なんですが、プログラム初心者の方も見ていると思うので、触りだけ。
最初から実装されているイベントハンドラ
OnInit()
EA起動時に最初に一回だけ呼び出される関数。
変数とか、何かしら初期化しておきたいものは、ここに書きます。
OnDeinit()
EA終了時に、最後に一回だけ呼び出される関数。
OnTick()
ティック毎に呼び出される関数。
この中に、あれこれ実装する事になります。
サンプルソース
ためしに、ティック毎に、Ask(買値)とBid(売値)を表示するプログラムを書いてみました。
なるべく初心者さんに分かるように、変数を使って解説。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//+------------------------------------------------------------------+ //| GoldenCross_buy.mq4 | //| Copyright 2020, Yanoteck | //| https://investment-vmoney.com/ | //+------------------------------------------------------------------+ #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //変数(型宣言は必須) string output_ask = "現在のAsk="; //文字列 string output_bid = "現在のBid="; //文字列 double now_ask = Ask; //現在のAsk double now_bid = Bid; //現在のBid //表示 Print(output_ask + string(now_ask)); Print(output_bid + string(now_bid)); } //+------------------------------------------------------------------+ |
ソースコードの解説
Print関数を使って、表示するだけの簡単プログラムです。
簡単なんだけど、変数(入れ物)を使ってます。変数は「型」があるので、宣言時に指定しないといけません。Javascriptでは、型宣言しなくても変数が使えるので、Java出身者は、最初は苦労するかも。
- string :文字列
- double :8byte の浮動小数点
- int :整数
数字を文字列として使う場合は、型でキャスト(変換)します
1 2 3 |
//表示 Print(output_ask + string(now_ask)); Print(output_bid + string(now_bid)); |
ちなみにキャストしなかったら
1 2 3 |
//表示 Print(output_ask + now_ask); //数字を直接文字に足す Print(output_bid + string(now_bid)); |
こんな警告(warning)が出ます。
エラーじゃないけど、警告です。
implicit conversion from number to string
1 2 |
<span lang="ja">数値から文字列への暗黙の変換をしました </span> |
コンパイル後、実行
ソースコードを書いたら、必ずコンパイルを実施します。
コンパイルすると、実行ファイルを作成します。
ここでエラーがあれば、都度、修正します。
コンパイルして、エラーが無いことを確認したら、実行します。
ただし、これだと実データを使うので、トレードが発生するEAだと怖いです。
バックテストを行う
MT4には、バックテストという過去のチャートデータを使ってテスト出来る機能があるので、それを使うと便利です。
ヒストリーデータをダウンロード
過去のチャートデータをダウンロードします。
メニューバーより、「ツール」⇒「ヒストリーセンター」を選択。
通貨ペアごとに、必要なデータをダウンロードします。
USDJPYは、Forex3にあります。
バックテストの実施は
メニューバーから、「表示」⇒「ストラテジーテスター」から。
MT4の下側に「テスター」が表示されます。自分が、さっき作ったEAを選択して、通貨ペアをあわせます。開始日は過去データのどこからどこの日までを使うか設定できます。
必要情報を設定したら、「スタート」でテスト開始。
バックテストでは実チャートに影響はしないのでご安心を。
今回テストプログラムは、ティック毎にAskとBidを表示するというものです。操作履歴のタブに表示されていれば成功。
実際にトレードのEAを作ったら、ひたすら、バックテストを繰り返す感じになります。
実際のトレードのEAは・・
今回は、簡単なEAを作成しましたが、実際のトレードEAのプログラムはもっと複雑です。
別の記事で特集してみます。
単純移動平均線のゴールデンクロスで買って、デッドクロスで売るという、簡単なものは公開しても良いかなと思いまして。
ご質問はコメント欄からお願いします