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

皆さん、こんにちは。

出版してから既に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メタトレーダープログラミング入門」で解説しているので、そちらに移行されることをお勧めします。



コメントは受け付けていません