• カテゴリー別アーカイブ 「FXメタトレーダー4&5プログラミング」
  • MQL4、MQL5でのカスタム指標プログラムの書き方色々

    皆さん、こんにちは。

    MT4 build610どうですか?
    やはり混乱を招いているからか、今回のアップデートに関するブログ記事を色々なところで見かけました。
    私個人としては、これまで使っていたプログラムがそのまま動いたので、build610にアップデートしました。
    ただ、これまで使っていたプログラムが動作しないとか、動作が不安定であれば、アップデートすべきではありません。
    デモ口座などで十分にテストした方がいいでしょう。
    ところで、build600になってからMQL4の仕様が変わったため、カスタム指標やEAも色々な書き方ができるようになってしまいました。
    今回は、一例として簡単なカスタム指標プログラムについてみてみます。
    MT4 build509以前のいわゆる「old MQL4」では、終値を線で結ぶだけのカスタム指標プログラムは次のように書けました。

    build600以降でも、このプログラムはコンパイル、実行できます。
    ただし、メタエディタの新規作成からプログラムを作ると、OnInit()とか、OnCalculate()に変わってしまいます。
    これらの関数はMQL5での特別な関数なのですが、MQL4でもそれを使わせたいということでしょう。
    ここで、単に init()→OnInit()start()→OnCalculate()に変えると、コードは次のようになります。

    このプログラムもbuild600以降であれば、コンパイル、実行できます。
    でも、OnCalculate()関数を使うのであれば、MQL5ライクな書き方をすることもできます。

    Bars→rates_total
    IndicatorCounted()→prev_calculated
    Close[i]→close[i]

    と置き換えてみます。
    あと、

    if(limit == 0) limit = 1;

    を追加します。すると、次のようなプログラムになります。
    なお、この文を追加する理由については「FXメタトレーダー4&5一挙両得プログラミング」の93ページ以降をご参照ください。

    これでMQL5にも近づいたので、MT5でも使えるでしょうか?
    そこで、mq5ファイルにコピーしてMT5のメタエディタでコンパイルしてみると、一つwarningが出るものの一応、実行ファイルができます。
    しかし、これをチャートに挿入しても何も表示されません。やっぱりダメなんです。
    MT5で動作させるためには、さらに#propertyを追加、ArraySetAsSeries()でBuf[]、close[]を時系列配列にしなくてはいけません。
    これらの修正を加えると、MT5で動作するプログラムは次のようになります。
    この修正の説明についても、「FXメタトレーダー4&5一挙両得プログラミング」の93ページ以降をご参照ください。

    やはり、簡単なカスタム指標プログラムでも、New MQL4とMQL5との間には互換性はないということです。
    このようにMQL4では色々な書き方ができるようになったのですが、実のところ、MT4のままならOld MQL4で十分でしょうし、MT5に移行するのなら、最初からMQL5でプログラムを作ればいいと、個人的には思います。



  • MT4 build600以降のための「MQL5プログラミングの基礎」

    MT4 build600のアップデート以降、日替わりのようにアップデートが続いてどうなることかと思いましたが、今のところbuild610で落ち着いたようです。
    build600系では、MQL4の仕様が変わってしまいました。
    変わったと言っても、従来のMQL4にMQL5の仕様の一部が追加されたので、本書 「FXメタトレーダー4&5一挙両得プログラミング」の63ページ以降の「2-2 MQL5プログラミングの基礎」の節が参考になるかと思います。
    この節は、MQL4からMQL5になって変わった部分をまとめたものですが、ちょうど新MQL4で追加された部分に対応しています。
    MQL4でプログラミングするのであれば、特に追加された機能を使う必要はないのですが、MT4のままMQL5に慣れさせようというMQ社の思うつぼにはまりたい人は是非どうぞw。
    ただ、基本的には旧MQL4との互換性を保ったまま機能が追加されているので、MQL5とは異なる部分もあります。
    その一つはOpen[],Close[],High[],Low[]などバーの四本値の値を格納した定義済み配列です。Bid, Askなどの売値、買値を表す定義済み変数もそうです。
    これらの定義済み配列、変数はMQL5ではなくなっています。
    しかし、これをなくすと互換性がなくなってしまうため、新MQL4では従来通り使えるようになっています。
    もう一つはプログラムで最初に実行されるstrat()や、init(), deinit()関数などの特別な関数です。
    MQL5ではこれらの特別な関数は、OnStart(), OnCalculate(), OnTrade(), OnInit(), OnDeinit()などと関数名が変わってしまいました。
    新MQL4では、MQL5の特別な関数にも対応していますが、旧MQL4のstart()なども同じように使うことができます。これも互換性を保つためでしょう。
    このように新MQL4は、旧MQL4との互換性を保ちつつ、MQL5の機能を追加していっています。
    ただ、本書で紹介していない細かい点で厳密な互換性が保たれていない部分があるので、build600になってプログラムの修正が必要なケースも多々あるようです。
    新MQL4は、MQL4とMQL5の混在する中途半端な仕様になってしまっているので、MQ社にとってはあくまでMQL5へのつなぎと考えているのでしょうが、うまくつないでいけるのかどうか疑問なところです。
    Bid, AskやOpen[],Close[]などが、宣言やデータコピーなどの必要なく、思ったところですぐに使えるというのは、初心者にとってはわかりやすい仕様だったと思います。
    MQL4にMQL5の仕様を追加するくらいなら、MQL5にMQL4の仕様を追加した方が移行しやすいと思うのですが、今後、どう迷走していくか見物です。



  • MT4 build600以降での本書の使い方

    本書「FXメタトレーダー4&5一挙両得プログラミング」、略して「二刀流本?」ですが、最近のアマゾンのレビューによると、MT4 build600のアップデートにタイムリーだという評価がありました。
    これはちょっと予想外だったのですが、アップデートで追加された機能がMT5やMQL5のものだったので、図らずもMT4build600の新機能の説明になった部分もあったようです。
    今回のMT4アップデートの動きは、本書の執筆時にはわかっていたのですが、リリース時期や詳細については不明だったので、本書では全く触れていません。
    ただ出版したばかりで、修正することはできないので、今後、MT4 build600以降でも本書が使えるよう、対応する部分について補足説明していきたいと思います。
    ちなみに当方で確認した範囲では、本書のサンプルプログラム(MQL4版)は、MT4のbuild 600以降でも問題なく、コンパイル、実行できます。
    実際、このくらいの単純なプログラムであれば互換性は保たれているわけです。メタクォーツ社も、MT4の利用者の多くは、この程度のプログラムしか作らないと高をくくっていたのではないでしょうかね?



  • MT4のアップデートについて

    皆さん、こんにちは。
    MT4をご利用の方は、業者からの案内などによりご存じかと思いますが、先日、MT4の大幅なアップデートがありました。
    しばらくMT4 Build509が利用されていましたが、現在、Build602になっています。
    今お使いのMT4は、業者によってはまだアップデートされていないものもあるかと思います。具体的なアップデートのタイミングについては、お使いの業者にお問い合わせください。
    ところで、「FXメタトレーダー4&5プログラミング」の内容は、MT4のBuild509を対象としているため、今回のアップデートで内容が異なってしまった箇所が出てきました。
    注意した方がよいのは、MQL4プログラムのフォルダ構成です。
    本書の36ページから38ページで、MQL4のフォルダ構成の説明がありますが、新しいBuildでは、ここの部分が変更となっています。
    どう変更になったかというと、簡単に言うと、38ページから41ページで説明しているMQL5のフォルダ構成と同じになったのです。
    従って、その部分の「MT5」,「MQL5」,「mq5」,「ex5」などの部分をそれぞれ「MT4」,「MQL4」,「mq4」,「ex4」と読み替えてもらえればOKです。
    これまでは、プログラムフォルダの場所は、MT4をインストールしたフォルダから辿っていかなくてはいけませんでしたが、新しいBuildでは、インストールしたフォルダを覚えておく必要はなくなりました。
    MT5と同じようにメニューから直接開くことができます。
    メニューの「ファイル」から「データフォルダを開く」を選択すると、データフォルダが開きます。その下の「MQL4」というサブフォルダの下にプログラムファイルが保存されるようになっています。
    20140206.png
    なお、日本語版だとファイルメニューが二つあるのですが、左側が本物で、右側は「表示」メニューの間違いだと思います。
    (日本語版のメニュー対応リストの不具合でしょう)
    本書のサンプルプログラムに関しては、新しいBuildでもコンパイル、実行はできます。特にプログラムを修正する必要はありません。
    ただ、実際には、新しいBuildでは、プログラミング言語であるMQL4が拡張されています。
    配列や外部ライブラリを利用しているプログラムでは多少修正が必要になる場合もあるようです。
    このMQL4の拡張では、MQL5の機能や関数が追加されたのですが、個人的にはせっかくのシンプルな仕様が複雑になってしまった感じがします。
    そもそもMQL4とMQL5とでは基本的なポリシーが違うのに、それをミックスしてしまっては、混乱するだけでしょう。
    メタクオーツ社の”迷走”としか思えないアップデートはこれからも続くと思われます。
    今回のMQL4の拡張でも、EAの作成に欠かせないトレード関数やテクニカル指標関数については、本書で解説した通り、全く互換性がないままです。
    実際、ポジションの管理方法がMT4とMT5で決定的に異なるので、その仕様を統一しない限り、そのままでは同じロジックのEAを作ることはできないでしょう。
    現状で、MT4とMT5とで同じロジックのEAを作るには、本書をご参考になることをお勧めします。
    (ただ、出版以来、何の問い合わせもないので、きっとそういう必要のある人はほとんどいないのでしょうが・・・)



  • 「FXメタトレーダー4&5一挙両得プログラミング」目次

    「FXメタトレーダー4&5一挙両得プログラミング」目次です。通販で購入する際の参考にしてください。

    はじめに
    メタトレーダー4と5

    第1章 メタトレーダーの紹介
    1-1 メタトレーダー4とメタトレーダー5
    メタトレーダーのダウンロードとインストール
    メタトレーダーの画面構成
    MT5に追加された機能

    1-2 プログラミングの流れ
    プログラムとプログラミング言語
    作成可能なプログラムの種類
    MQL4プログラムのフォルダ構成
    MQL5プログラムのフォルダ構成
    実際にプログラムでトレードをするときの注意点

    1-3 本書で使用したサンプルプログラムについて
    サンプルプログラムのインストール
    サンプルプログラムの著作権について

    第2章 MQL4/MQL5プログラミングの基礎 
    2-1 MQL4プログラミングの基礎
    データ型
    配列
    関数
    予約変数
    特別な関数

    2-2 MQL5プログラミングの基礎
    データ型
    整数のデータ
    実数のデータ
    列挙型のデータ
    データ型の変換
    そのほかのデータ型
    配列
    構造体
    関数でのパラメータの参照渡し
    関数のオーバーロード
    予約変数
    特別な関数

    2-3 カスタム指標プログラムの基本
    プリプロセッサ命令
    指標バッファ用の配列の宣言
    外部パラメータ
    初期化関数
    指標計算関数
    カスタム指標の計算

    2-4 テクニカル指標関数を使ったカスタム指標プログラム
    移動平均
    ボリンジャーバンド
    移動平均乖離率
    カスタム指標の平滑化

    2-5 MQL4とMQL5のトレード関数の使い方
    MT4でのトレードの流れ
    MQL4のトレード関数
    MQL4でのポジション情報の取得
    MT5でのトレードの流れ
    MQL5のトレード関数
    MQL5でのポジション情報の取得
    MQL5のトレード関数を利用したEAの問題点

    第3章 システムトレードプログラミング 
    3-1 EA作成のためのオリジナルライブラリ
    オリジナルライブラリーの基本的な考え方
    MQL4用オリジナルライブラリーのデータ構造
    MQL5用オリジナルライブラリーのデータ構造
    MQL4/MQL5のオリジナルライブラリー関数

    3-2 EAの基本構成
    オリジナルライブラリーの読み込み
    マジックナンバーの指定
    特別な関数の記述
    価格の最小刻み幅とpip(s)について
    コンパイルでの注意点
    MQL5の仮想ポジション初期化での注意点

    3-3 仕掛けのパターン
    エントリーシグナルの生成
    順張りシグナルによる仕掛け
    逆張りシグナルによる仕掛け
    現在形成中のバーの指標値を利用した仕掛け
    EAで実際に売買できない場合について

    3-4 手仕舞いのパターン
    一定値幅での損切りと利食い
    トレイリングストップ
    テクニカル指標による手仕舞い
    時間の経過による手仕舞い

    3-5 エントリーシグナルのフィルター
    トレンドフィルター
    タイムフィルター

    3-6 待機注文による仕掛け
    IFDを繰り返す注文
    条件付き指値注文

    3-7 複数のポジションを扱うシステム
    複数のポジションに対応してIFDを繰り返す注文
    複数の売買システムの組み込み

    第4章 ストラテジーテスターを使った売買システムの評価
    4-1 MT4を使ったEAのバックテスト
    バックテストのための設定項目
    過去データの取得
    テスターのモデル選択

    4-2 MT5を使ったEAのバックテスト
    バックテストのための設定項目
    過去のデータの取得
    テスターのモデル選択
    バックテストでの注意点

    4-3 売買システムの評価
    レポートの見方

    4-4 MT4を使ったEAの最適化
    最適化のための設定項目
    最適化の結果

    4-5 MT5を使ったEAの最適化
    最適化のための設定項目
    最適化の結果
    バックテストとフォワードテスト
    シンボルの最適化

    第5章 MQL4/MQL5関数一覧と互換性 

    さいごに

    付録 本書オリジナルライブラリー

    索引

    図索引

    プログラムリスト索引