EA開発 Part2 作ってみよう
前回は環境構築の話でした。これでEA開発できる環境ができましたので、さっそく作ってみたいと思います。
【前回の記事】
「あれができたら良いなぁ…」という思いはあるかと思いますが、まずは「読める」ようになることが大事です。
「読める」ようになれば、「少し修正してみる」ことができるようになり、それができるようになれば「ゼロから作っていく」ことも可能になっていきます。
まずは簡単なプログラムの意味を理解するところから初めてみましょう。
※今回の内容について※
初めてプログラムを作られる方は実際に作ってみてください。なんらかのプログラミング言語の経験がある場合には、ざっと読むだけで問題ありません。(実際にやらなくても、理解できるのではないかと思います。)
【記事内メニュー】
1.簡単なプログラムを作ってみよう
それではプログラムを作ってみましょう。
前回ご説明したようにMetaEditorを起動してください。(MT4を起動してF4キーです)
そして、左上のNewボタンをクリックします。
MQL Wizard
MQL Wizardが起動します。今回はEA(Expert Advisor)を作成するので、Expert Advisor(template)を選択して次へボタンをクリックします。
EAの名前を付けます。Experts\の後ろに任意の名前を入力してください。
※今回はZeroCreatePart2としました。
Authorには作成者を、Linkには作成者のホームページのURLなどを入力します。
私の場合、(普段は)Authorには”Copyright 2016, Trade And Software”、Linkにはhttps://tasfx.netと入力していますが今回は空にしています。(必須入力ではないので空欄でも構いません。)
Parametersにはパラメーターを追加できます。今回はパラメーターを作る予定はありませんし、必要に応じてソースコードから入力すれば作れるので入力の必要はありません。(私は普段も使っていないので、これについて解説することは無いと思います)
入力が終わったら次へボタンをクリックしてください。
イベントハンドラの選択画面が表示されます。あんまり関係ないので次へボタンをクリックしてください。
イベントハンドラ選択の続きが表示されますが、これもどうでもいいです。完了ボタンをクリックします。
これでMQL Winzardは終了です。EAのテンプレートが作成されました。
プロパティ
//+------------------------------------------------------------------+ //| ZeroCreatePart2.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict
プロウグラムの冒頭に//で始まる行があります。これは「コメント」といって、「実行されない行」です。
プログラムの説明やメモ書きなど頭に//をつければ好きなことが書けます。もちろん日本語でもOKです。
その下の#propertyはEAを適用する際にポップアップ表示される画面の「バージョン情報」タブに表示されます。
MQL WizardでAutherやLinkを入力していた場合にはソースコードのcopyrightとlinkのところに入力した文字が入っているはずです。
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以下が「クローズ」の命令です。ポジションを持っている場合には全てクローズします。
2.作ったプログラムをコンパイルしてみる
作ったプログラムを機械が読める形に変換します。
難しいことは何も無くて、Compile(コンパイル)ボタンをクリックするだけです。
ボタンを押すとコンパイルが実行されて「エラーがなければ」ソースファイル(mq4ファイル)から実行ファイル(ex4ファイル)が生成されます。
コンパイルの実行結果は下のErrorsタブに表示されます。
最後の行の「0 error(s)」 がエラーの数で0件。「2 warning(s)」は警告で2件あります。
警告の内容は「’OrderSend’や’OrderClose’のリターン値をチェックするべきだよ」とか言っていますが今回は無視します。(警告が出ていても実行ファイルは生成されます。)
これでEAができました!
3.EAをバックテストしてみよう
まずはMT4に戻ります。F4キーを押してください。
そして上部メニューから表示→ストラテジーテスターを選択します。Ctrl+RでもOKです。
ツールバーにある「虫メガネのアイコン」でもストラテジーテスターが表示されます。
MT4の下部にストラテジーテスターのウィンドウが表示されていますので、以下のように選択します。
上部真ん中のドロップダウンリストには作成したEA(私の場合はZeroCreatePart2.ex4)を選択
- 通貨ペアにはEURUSD
- 時間はH1
- モデルは全ティック
- スプレッドは現在値
- 期間指定には今月(今回は1日あれば十分です。すぐに破産しますので…)
- ビジュアルモードにはチェック無し
- 最適化のチェック無し
データが無いと動きませんので、デモ口座でも良いので「ログイン」状態にしておいてください。
スタートボタンを押すとバックテストが実行されます。
終了したら「グラフ」タブをクリックして見てみてください。
破産しましたね?(笑)
1Tick毎にオープンしてクローズするだけのEAですので確実にスプレッド分負けます。
今回は「あぁ、こんな程度で動いちゃうんだ」くらいに思っていただければ良いです。
実際のEAを開発はこれに「オープン条件」と「クローズ条件」を付け加えるだけです。簡単ですよね。
・・・「勝てるEA」を作るのはとても難しいのですけど・・・;;
今回はここまでです。
次回は今回作ったモノにオープンの条件とクローズの条件を付け加えてみましょう。
===========================================
初心者の方向けに平易な文章を心がけて書いているつもりですが、もしかするとわかりづらい箇所等があるかもしれません。
わかりづらい点や説明不足な箇所についてはコメント等でご指摘いただけますと幸いです。
なお、記事とは直接関係ない内容についてはお答えしかねますので予めご了承ください。
以上、初心者向けEA開発講座「自動売買システムを作ろう!ゼロから始めるEA開発Part2 作ってみよう」でした。
コメント
上手く軌道しません。
OANDA-Japanで、デモ口座
OANDAジャパンは一部の口座種類を除きEAが動かない仕様だったと思いますが‥。
コピペですが、
//—
の下の段から貼り付けたらエラーなく貼り付けることができました
はじめまして!こちらの記事を見させてもらってEAに触れてみましたが思ったより簡単でした!(ルール作りは大変そうですが)。ありがとうございます!
コメントありがとうございます。
ただ作るだけであれば簡単に作れますね!
‥勝てるEAを作るのはとても大変だったりしますが‥(汗)