MT4で開発を楽にする方法
ちょっと技術的な話です。
FXの世界でデファクトスタンダードとなっているMeta Trader4ですが、MQL4というC言語に似た言語を使って、インジケータやEAを作れるのが最大の利点です。
しかし、お世辞にも使いやすい開発環境とはいえず、開発効率が悪いのが悩みの種。そこで、ちょっとでも、開発をラクにするために、ライブラリ機能を活用しましょう!
Includeとライブラリ
通常、インジケータやEAは、ひとつのMQ4ファイルにゴリゴリとコードを
書くのが普通のやり方です。
しかし、インジケータやEAをたくさん開発していると、同じような処理を記述することが多くなります。吉田がよく使う処理は、画面に線を描画したり、プライスをpipsに変換したり、時間を計算する処理。
また、発注関連の処理も決まり文句が多いです。
インジケータやEAごとにこれらの処理を書くのはどうにも面倒なので、
共通処理をライブラリに追い出して、楽しましょう。
MT4のフォルダ構成は次のようになってます。
インジケータの場合は、indicatorsの下にファイルを作ります。
この中に、includeとlibrariesというフォルダがありますね?
MQL4の元になっているC言語にもありますけど、Includeを使うと、
別のファイルに書かれているヘッダーファイルも読み込まれます。
よく使う機能をライブラリとしてまとめておくと、ヘッダーファイルを指定するだけで、ライブラリ内の関数が使えるようになります。
(1)ヘッダーファイルをIncludeする
(2)ヘッダーファイル内で、読み込まれるライブラリの関数を指定
記述例:
#import “ライブラリ名.ex4”
ライブラリの関数1
ライブラリの関数2
#import
KawaseOsyo_TradeLib.mqhがヘッダーファイル。
これがコンパイル時に必ず読まれます。
そして(2)は、ヘッダーファイル内で実際に読み込まれるライブラリ(KawaseOsyo_TradeLibrary.ex4)の関数を定義しています。
これが、今回ヘッダーファイル内で読み出しているライブラリです。
実際に読み込まれるライブラリは、予めlibraries以下に作成しておきます。
ライブラリの作り方は、普通のインジケータやEAと同じですが、Init()やStart()といった関数がありません。
ライブラリを作成しておけば、何度でも再利用できて楽ちんです。
もっと楽をする
ライブラリによく使う処理をまとめるだけでも、いちいち同じ記述をしなくて済むので楽できますが、もっと荒業を使うと、さらに楽できます。
まずは、ヘッダーファイルをIncludeを使って指定します。
ここまでは同じだけど、ライブラリを使うやり方との最大の違いは…
ヘッダーファイルに直接
プログラムを書く!
上のコードは、読み込むヘッダーファイル(Kawaseosyo_EA-IF.mqh)の一部です。もう、普通にコードを書いちゃいます。
このやり方の利点は
- 配布時にライブラリやヘッダーファイルを渡さずに済む(インストールが容易)
- 呼び出し元のファイルにあるパラメータや変数を利用できる
- インジケータバッファを直接操作できる
などなど。
ヘッダーファイルの内容は、コンパイル時に元のex4に含まれるため、
単にファイルを分割しているだけですね。
本来は、ライブラリに書くのが正解ですが、開発効率の点、配布の楽さを考えると、このやり方に軍配が上がります。
よく、MQL4をいじる人は、覚えておいて損はない方法ですよ。
らくらくライブラリと
呼んでくださいね(笑)!
はじめまして、ブログを拝見させていただきました。
システムトレードについて数々の示唆に富んでおり、とても参考になります。
私はmeta editorを使ってインジケータを開発をしているのですが、開発効率に乏しく
代替手段がないものか考えていました。
今後、本格的にプログラムを学んでいきたいと考えており、Visual Studioの導入を考えています。
吉田さまの開発環境を別記事で拝見させていただきました。
>MT4の開発環境の効率の悪さ、最終的に自動トレードを運用するシステムの関係上、MT4のEA(自動売買プログラム)ではなく、
Visual Studio2005(プロ向け開発ツール)上での開発を決断した。
とありますが、こちらはAPIを用いて開発をされているのでしょうか。
また、以下のようにvisual studio環境化でのEA開発ができそうなのですが、
お使いになったことはありますか?
http://www.tradingapi.net/mt4-net-api
http://mqlsharp.com/Help/html/M_System_MetaTrader_IsExpertEnabled.htm
お時間がございましたらご回答いただけますと幸いです。
よろしくお願いいたします。