MT4で開発を楽にする方法

2013/04/14 カテゴリ:MetaTrader, MQL4
  • このエントリーをはてなブックマークに追加

MT4で開発を楽にする方法

ちょっと技術的な話です。
FXの世界でデファクトスタンダードとなっているMeta Trader4ですが、MQL4というC言語に似た言語を使って、インジケータやEAを作れるのが最大の利点です。


しかし、お世辞にも使いやすい開発環境とはいえず、開発効率が悪いのが悩みの種。そこで、ちょっとでも、開発をラクにするために、ライブラリ機能を活用しましょう!

 

※ブログランキング参戦中。よかったら応援してください

 

Includeとライブラリ

通常、インジケータやEAは、ひとつのMQ4ファイルにゴリゴリとコードを
書くのが普通のやり方です。


しかし、インジケータやEAをたくさん開発していると、同じような処理を記述することが多くなります。吉田がよく使う処理は、画面に線を描画したり、プライスをpipsに変換したり、時間を計算する処理。
また、発注関連の処理も決まり文句が多いです。


インジケータやEAごとにこれらの処理を書くのはどうにも面倒なので、
共通処理をライブラリに追い出して、楽しましょう。


MT4のフォルダ構成は次のようになってます。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をいじる人は、覚えておいて損はない方法ですよ。

らくらくライブラリと
呼んでくださいね(笑)!

今回の記事はプログラムを書く人以外には、
不要ですネ

ブログランキング

この記事に対するコメント

4 件のコメント

  • 2013/04/18 20:39

    はじめまして、ブログを拝見させていただきました。
    システムトレードについて数々の示唆に富んでおり、とても参考になります。

    私は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

    お時間がございましたらご回答いただけますと幸いです。
    よろしくお願いいたします。

  • 2013/04/19 15:46

    MT4 .NET APIですが一度評価しましたが、使えないという判断を
    しました。記事の開発環境の話ですが、これはMT4とはまったく
    別です。自作ソフトになります。

    MT4と連携させるのであれば、.Net環境のマネージドコードで
    ビジネスロジックを組み、C++/CLIでラッパーDLLを使って
    アンマネージドコードから呼び出す方法を取ります。

    先の.NET APIも同じような仕組みです。

  • 2013/04/24 00:27

    こんばんは。
    ご丁寧にありがとうございました。

    .NET APIの購入も考えていたのですが、様子を見ることとします。

    なるほど、お使いの開発環境は自作ソフトなのですね。
    素晴らしい。
    普段はMeta Editorやテキストエディタでコーディングを行いますが、快適な開発環境があると、開発もより力が入りますね。

    MT4と連携するソフトを作るのも楽しそうです。
    試行錯誤をしながら.NETやC++も学んでみます。

    ありがとうございました。

  • 2013/04/24 08:17

    ひいらぎさん
    .Net APIはEAとして動作するので、吉田の用途には合わなかったというだけです。あくまで個人用途であれば、多少は改善すると思います。

    本格的にプログラムをはじめるのであれば、.Netはいい環境ですよ。
    プログラムを書くのが本当に楽になります。
    無料で使えるExpress Editionもあるので、試しに使ってみてください。