自動売買システムを作ろう!ゼロから始めるEA開発Part2 作ってみよう

   2016/09/18

EA開発

EA開発 Part2 作ってみよう

前回は環境構築の話でした。これでEA開発できる環境ができましたので、さっそく作ってみたいと思います。

【前回の記事】

「あれができたら良いなぁ…」という思いはあるかと思いますが、まずは「読める」ようになることが大事です。

「読める」ようになれば、「少し修正してみる」ことができるようになり、それができるようになれば「ゼロから作っていく」ことも可能になっていきます。

まずは簡単なプログラムの意味を理解するところから初めてみましょう。

※今回の内容について※
初めてプログラムを作られる方は実際に作ってみてください。なんらかのプログラミング言語の経験がある場合には、ざっと読むだけで問題ありません。(実際にやらなくても、理解できるのではないかと思います。)

【記事内メニュー】

1.簡単なプログラムを作ってみよう

2.作ったプログラムをコンパイルしてみる

3.EAをバックテストしてみよう

それではプログラムを作ってみましょう。

前回ご説明したようにMetaEditorを起動してください。(MT4を起動してF4キーです)

そして、左上のNewボタンをクリックします。

Newボタンをクリック

MQL Wizard

MQL Wizardが起動します。今回はEA(Expert Advisor)を作成するので、Expert Advisor(template)を選択して次へボタンをクリックします。

MQL Winzard 1

EAの名前を付けます。Experts\の後ろに任意の名前を入力してください。

※今回はZeroCreatePart2としました。

MQL Wizard2

Authorには作成者を、Linkには作成者のホームページのURLなどを入力します。

私の場合、(普段は)Authorには”Copyright 2016, Trade And Software”、Linkにはhttps://tasfx.netと入力していますが今回は空にしています。(必須入力ではないので空欄でも構いません。)

Parametersにはパラメーターを追加できます。今回はパラメーターを作る予定はありませんし、必要に応じてソースコードから入力すれば作れるので入力の必要はありません。(私は普段も使っていないので、これについて解説することは無いと思います)

入力が終わったら次へボタンをクリックしてください。

イベントハンドラの選択画面が表示されます。あんまり関係ないので次へボタンをクリックしてください。

MQL Wizard3

イベントハンドラ選択の続きが表示されますが、これもどうでもいいです。完了ボタンをクリックします。

MQL Wizard4

これでMQL Winzardは終了です。EAのテンプレートが作成されました。

EAのテンプレート

プロパティ

//+------------------------------------------------------------------+
//|                                              ZeroCreatePart2.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
#property strict

プロウグラムの冒頭に//で始まる行があります。これは「コメント」といって、「実行されない行」です。

プログラムの説明やメモ書きなど頭に//をつければ好きなことが書けます。もちろん日本語でもOKです。

その下の#propertyはEAを適用する際にポップアップ表示される画面の「バージョン情報」タブに表示されます。

MQL WizardでAutherやLinkを入力していた場合にはソースコードのcopyrightとlinkのところに入力した文字が入っているはずです。

ZigzagBreakout バージョン情報

EAを適用した際にポップアップ表示する画面には上図のように表示されます。※ZigzagBreakoutの場合です。(私が販売しているEAです)

copyrightには”Copyright 2015, TradeAndSoftware”、linkにはhttps://tasfx.netが入っているので、Copyrightの所は「ハイパーリンク」になっていてマウスでクリックするとこのブログが開くようになっています。

最後の#property strictだけはバージョン情報とは関係ありません。これがあるかないかで変数の有効範囲が異なるのですが、古いバージョンとの互換性を保つためにあるものですので、気にする必要はありません(MQL Wizardを使えば勝手に付きます)

イベント

テンプレートで作成されるイベントはOnInit、OnDeInit、OnTickの3つです。

int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }

OnInitは「初期化処理」をするイベントです。

EAを適用した時やパラメーターを変更した時などに「1度だけ」動作します。

最初に1回だけ動けば良い処理はここに書きます。(今回は使いません)

void OnDeinit(const int reason)
  {
//---
   
  }

OnDeinitは「終了処理」をするイベントです。

チャートからEAを削除する場合などに「1度だけ」動作します。

「画面に何か表示した」場合に使うことが多いです。終了時に消すように記述しておかないと、EAを削除した後に表示した文字や図が残ってしまいます。これも今回は使いません。

void OnTick()
 {
//---
 
 }

これがいわゆる「メイン」の処理です。

ティックデータが更新される度に実行されます。

EAは1ティック毎に値をチェックして「発注する条件」に達していれば発注し、ポジションを持っていて「閉じる条件」に達していればポジションを閉じる・・・ということをやっています。

それでは、このOnTickイベントに発注とクローズの命令(関数と言います)を書いてみましょう。

void OnTick()
 {
   OrderSend(Symbol(),OP_BUY,0.1,Ask,2,0,0,"",123456,0,clrBlue);
 
   for(int i=0; i<=OrdersTotal()-1; i++)
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
     OrderClose(OrderTicket(),OrderLots(),Bid,2,clrBlue);
   }
 }

グレーになっている行が追加した行です。コピー&ペーストしてください。

最初のOrderSendが「発注」の命令です。今回はとりあえず動かすのが目的ですので詳細は割愛します。

その下のfor以下が「クローズ」の命令です。ポジションを持っている場合には全てクローズします。

作ったプログラムを機械が読める形に変換します。

難しいことは何も無くて、Compile(コンパイル)ボタンをクリックするだけです。

コンパイル

ボタンを押すとコンパイルが実行されて「エラーがなければ」ソースファイル(mq4ファイル)から実行ファイル(ex4ファイル)が生成されます。

コンパイルの実行結果は下のErrorsタブに表示されます。

エラータブ

最後の行の「0 error(s)」 がエラーの数で0件。「2 warning(s)」は警告で2件あります。

警告の内容は「’OrderSend’や’OrderClose’のリターン値をチェックするべきだよ」とか言っていますが今回は無視します。(警告が出ていても実行ファイルは生成されます。)

これでEAができました!

まずはMT4に戻ります。F4キーを押してください。

そして上部メニューから表示→ストラテジーテスターを選択します。Ctrl+RでもOKです。

ストラテジーテスター起動

ツールバーにある「虫メガネのアイコン」でもストラテジーテスターが表示されます。

ストラテジーテスターアイコン

MT4の下部にストラテジーテスターのウィンドウが表示されていますので、以下のように選択します。

上部真ん中のドロップダウンリストには作成したEA(私の場合はZeroCreatePart2.ex4)を選択

  • 通貨ペアにはEURUSD
  • 時間はH1
  • モデルは全ティック
  • スプレッドは現在値
  • 期間指定には今月(今回は1日あれば十分です。すぐに破産しますので…)
  • ビジュアルモードにはチェック無し
  • 最適化のチェック無し

バックテスト条件

データが無いと動きませんので、デモ口座でも良いので「ログイン」状態にしておいてください。

スタートボタンを押すとバックテストが実行されます。

終了したら「グラフ」タブをクリックして見てみてください。

トレード結果(グラフ)

破産しましたね?(笑)

1Tick毎にオープンしてクローズするだけのEAですので確実にスプレッド分負けます。

今回は「あぁ、こんな程度で動いちゃうんだ」くらいに思っていただければ良いです。

実際のEAを開発はこれに「オープン条件」と「クローズ条件」を付け加えるだけです。簡単ですよね。

・・・「勝てるEA」を作るのはとても難しいのですけど・・・;;

今回はここまでです。

次回は今回作ったモノにオープンの条件とクローズの条件を付け加えてみましょう。

===========================================

初心者の方向けに平易な文章を心がけて書いているつもりですが、もしかするとわかりづらい箇所等があるかもしれません。

わかりづらい点や説明不足な箇所についてはコメント等でご指摘いただけますと幸いです。

なお、記事とは直接関係ない内容についてはお答えしかねますので予めご了承ください。

以上、初心者向けEA開発講座「自動売買システムを作ろう!ゼロから始めるEA開発Part2 作ってみよう」でした。

  • このエントリーをはてなブックマークに追加
  • Pocket

コメント一覧

  1. 森山 より:

    上手く軌道しません。
    OANDA-Japanで、デモ口座

  2. yuki より:

    コピペですが、

    //—

    の下の段から貼り付けたらエラーなく貼り付けることができました

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。