• カテゴリー別アーカイブ ダウンロード
  • MQL4/MQL5共通EAライブラリ(171116版)

    新メタトレ実践本用のMQL4/MQL5共通EAライブラリを更新しました。

    iCustom()を使ったEAのプログラムがMT4とMT5で共通化できるようになりました。ライブラリファイルは、以下からダウンロードできます。

    使い方ですが、例えば、MT4、MT5にそれぞれ「HLBand」というカスタム指標が入っているとします。一定期間の高値と安値を結んだよくある指標です。簡単のため、期間をパラメータとし、モードが0で高値ライン、モードが1で安値ラインを返すものとします。

    長期のHLバンドをブレイクしたときにエントリー、短期のHLバンドをブレイクしたときにエグジットという典型的なブレイクアウトシステムのEAプログラムは、このライブラリを使うと次のように書けます。

    ここでiCustom()は、MQL4標準の書式で呼び出しています。このソースファイルが修正なしにMT5でコンパイルでき、EAとして実行できるようになったというのが、今回のライブラリの更新点です。

    ただiCustom()は、MQL5にも同じ関数があり、それぞれ可変長の引数を取るので、そのままオーバーライドすることができませんでした。ライブラリを見てもらうとわかると思いますが、iCustom()をiMyCustom()に読み替えて、iMyCustom()をパラメータが0個から8個まで個別に作成しています。

    なので、これを使うためには、以下の制約があります。

    1. カスタム指標のパラメータの数が8個まで
    2. カスタム指標のパラメータがint,doubleの数値のみ

    その他の注意事項は、過去の記事をご参照ください。

     



  • メタトレ二刀流本のサンプルプログラムをMT5ヘッジ口座で動かす

    最近、MT5の利用者も増えてきたのでしょうか、MQL5プログラミングに関するご質問をいただくようになりました。

    多くは、拙著の「FXメタトレーダー4&5一挙両得プログラミング」(メタトレ二刀流本)の読者様からのものです。そのなかで、サンプルプログラムをMT5のヘッジ口座で利用したいというご要望がいくつかありました。

    しかし、残念ながらメタトレ二刀流本は初版のままで、改変のタイミングがありません。

    MT5のヘッジ口座用のライブラリで、当方が現在メンテしているのは、以下の記事で紹介した「新MT4対応ライブラリによるメタトレーダーEA実践プログラミング」(新メタトレ実践本)用のもののみです。

    MT4とMT5で同じソースプログラムを使ってEAが作れるということから、基本的にこのライブラリをお勧めしています。ただ、MT5のプログラミングに関する出版物がほとんどない状態なので、メタトレ二刀流本をご参考にされている方も少なからずいらっしゃいます。

    そこで本記事では、メタトレ二刀流本のサンプルプログラムを多少修正して、新メタトレ実践本のライブラリが利用できるようにする方法をご紹介します。

    対応するサンプルプログラムは以下の12個です。

    P.264 リスト3.6 MA2Cross1_EA.mq5
    P.271 リスト3.8 BBCross1_EA.mq5
    P.289 リスト3.10 MA2Cross1SL_EA.mq5
    P.299 リスト3.12 MA2Cross1TS_EA.mq5
    P.307 リスト3.14 MA3Cross1_EA.mq5
    P.320 リスト3.16 BBCross1ET_EA.mq5
    P.330 リスト3.18 BBCross1Trend_EA.mq5
    P.338 リスト3.20 BBCross1Time_EA.mq5
    P.345 リスト3.22 RIFD_EA.mq5
    P.352 リスト3.24 BBCross1Limit_EA.mq5
    P.362 リスト3.26 RIFD2_EA.mq5
    P.370 リスト3.28 MultiSystem_EA.mq5


    プログラムの修正ポイント

    1. ヘッダファイルの変更

    ライブラリはmqhという拡張子のヘッダファイルとして作成されています。MT5の場合、「LibEA.mqh」「LibOrder5.mqh」「LibMQL4.mqh」の3つのファイルを使います。これらのファイルをEAと同じフォルダに入れておきます。
    インクルードするヘッダファイルは「LibEA.mqh」のみです。次のように古いヘッダファイルの行はコメントアウトするか、削除して、新しいヘッダファイルに変更します。

    なお、ヘッダファイルをMT5のIncludeフォルダに入れて共通に使う場合、

    とします。

    2. 不要となる行(コメントアウト、あるいは削除)

    以下の行は不要となるので、コメントアウトするか、削除して結構です。

    マジックナンバーについては、EA中に記載しなくても、ライブラリで自動的に宣言されるので、それを変更してもいいです。EAで決まった値にしたければ、次のようにヘッダファイルをインクルードする前に、#defineで定義しておきます。

    Open[], Close[], High[], Low[]などの四本値の配列や、売値、買値のBid, Ask、ポジションの管理もライブラリで自動的に行われます。その代わり、OnTick()関数ではなく、Tick()関数(これもライブラリ中に定義してあります)を呼ぶように変更します。

    3. オーダー関数の変更

    オーダー関数のMyOrderSend()関数は、引数の数と順番が変更になっています。引数は、売買の種類、売買ロット数、売買価格、ポジション番号の順になっているので、次のように変更します。

    SLやTPの指定は、オーダー送信時ではなく、オーダー送信後にMyOrderModify()関数で行うようになりました。SLやTPを指定したい場合は、次のようにMyOrderSend()とMyOrderModify()に分けて記述します。

    各ライブラリ関数の詳しい仕様については、新メタトレ実践本を参照してください。

    以上の修正を施したサンプルプログラムとライブラリファイルは、以下からダウンロードできます。ただし、このサンプルプログラムを実行することにより発生した障害、損失などについて、当方は一切の責任を負いかねますので、あらかじめご了承ください。



  • 新メタトレ実践本用のMQL4/MQL5共通ライブラリ(β版)

    皆さん、こんにちは。

    「新MT4対応ライブラリによるメタトレーダーEA実践プログラミング」(新メタトレ実践本)は、タイトルの通りMT4用の本なのですが、実は、MT5用のライブラリも作っておりまして、ライブラリを差し替えることで、MT5でも動くEAが作れたりするのです。

    MT5がもうちょっと流行れば、またkndle本にまとめたいとは思いますが、とりあえず、新メタトレ実践本の読者の方のために、サンプルプログラムを若干修正することでMT5でも動作するEAのライブラリを公開します。ただし、MT4とMT5でソースプログラムを共通にするにはいくつか制限があり、今後、仕様が変更になる可能性もあるので、β版としておきます。各自の責任でご利用ください。

    では、使い方です。まず、以下のファイルをダウンロードして本書のサンプルプログラムの入っているフォルダに展開してください。

    サンプルプログラムと同じフォルダには、「LibEA4.mqh」というヘッダファイルが入っていると思いますが、ダウンロードしたファイルを、これの代わりに使います。

    「LibEA.mqh」が共通のヘッダファイルで、MQL4の場合、「LibOrder4.mqh」をインクルードし、MQL5の場合、「LibOrder5.mqh」と「LibMQL4.mqh」をインクルードします。

    例えば、次のようなサンプルプログラムがあるとします。

    このままだと、MT4でしか動きませんが、2行目と8行目を次のように修正します。

    つまり、「LibEA4.mqh」を「LibEA.mqh」に変えて、「OnTick()」を「Tick()」に変えるだけです。この修正はすべてのサンプルプログラムに共通です。

    このファイルは、MT4で同じように動きます。そして、このファイルの拡張子を「mq4」から「mq5」に変えるだけで、MT5でコンパイル、実行させることができます。

    ソースプログラムを共通にする仕組みや、制限事項については、別記事で解説します。

     



  • MT5ヘッジ口座用ライブラリ

    皆さん、こんにちは。

    前回の記事でもちょっと触れましたが、MT5のヘッジオプション機能が正式にリリースされました。MT5でも、MT4のようにオーダー毎にポジションが建てられるようになったようです。

    以下が日本語のリリース記事です。(タイトルは意味不明ですが・・・)

    MetaTrader 5取引プラットフォームはヘッジを獲得しました

    記事によると、これでMT5への移行は問題ない、と言わんばかりの書き方ですね。しかし、ポジションの扱いは見た目上、MT4と同じにはなりましたが、肝心のプログラミングの部分は相変わらず、互換性のないままです。これでMT5への移行が進むとは考えにくいです。

    ところで、拙著の『メタトレーダーではじめるFXシステムトレードプログラミング』は、MT4とMT5で同じソースプログラムが使えますよ、という本だったのですが、そういう需要がなかったせいか、あまり売れてはいないようです。

    ただ、私がEA作成用に利用しているのがこのライブラリなので、今回、MT5のヘッジ口座で使えるようなライブラリを作成してみました。

    ライブラリは、拡張子がmqhのヘッダファイルとして作成されています。解凍してできたファイルをMT5のデータフォルダの「MQL5\Include\MyLib」の下にコピーしてください。一応、黄色本のサンプルプログラム一式がインストールされていることが前提です。

    ヘッジ口座用のEAを作成するには、プログラムの最初に「#define HedgeAccount」を追加するだけです。下のように「#include」の前に記述します。

    この状態でコンパイルすると、ヘッジ口座用のライブラリを組み込んで実行ファイルが作成されます。EAの使い方はこれまでと同じです。「StartHistory」「RetrieveHistory」といった余計な変数がなくなったので、逆に見やすくなったかと思います。

    なお、ライブラリ関数の仕様は、黄色本に掲載したライブラリ関数と同じです。詳しい使い方については、黄色本を参照していただきたいと思います。但し、例によって本ライブラリを使用したことにより生じるいかなる損害に対しても著者は責任を負いません。自己責任でのご利用をお願いいたします。



  • 実践本のサンプルプログラム

    皆さん、こんにちは。

    出版してから既に6年以上経った実践本「FXメタトレーダー実践プログラミング」ですが、いまだに時々質問をいただきます。

    最近多いのが、ライブラリファイルの「MyLib.mq4」をコンパイルするとエラーが出るけど大丈夫か?というものです。

    実際、コンパイルすると「sign mismatch」というメッセージが何か所か出ます。ただし、これはエラーメッセージではなく、警告メッセージです。一応、コンパイルはできて、実行ファイルも作成されているはずです。通常の実行には、特に問題はないと思います。

    ちなみに警告メッセージが出ているのは、次の if 文が書かれているところです。

    「sign mismatch」の意味は、比較している左辺と右辺のデータ型の符号の扱いがあっていない、ということです。つまり、データ型としてはどちらも整数型で同じなのですが、左辺の「GetTickCount()」の戻り値の型が「uint」型(符号なし整数)なのに対して、右辺の「MyOrderWaitingTime」が「int」型(符号付き整数)と、符号の有無で型があっていないということなのです。

    旧MQL4では、整数型は「int」型しかなかったので問題なかったのですが、MT4 build600以降の新MQL4では、整数型が「int」「uint」などC言語と同じように増えたので、こんなメッセージが出るようになったのです。

    ということで、このメッセージを消すためには、型を揃えればよいので、17行目の「MyOrderWaitingTime」の宣言文で、型が「uint」になるように

    と修正します。また問題の if 文中に出てくる「starttime」の宣言文も同じく

    のように「uint」に修正すればOKです。

    以上の修正を行ったサンプルプログラム一式を上げておきますので、下のリンクからダウンロードしてください。

    ただ、実践本のプログラミングは、旧MQL4をベースにしているので、現在のMT4で動かすプログラムとしては、あまり推奨できません。新MQL4のプログラミングは、「新MT4対応 FXメタトレーダープログラミング入門」で解説しているので、そちらに移行されることをお勧めします。