MT4ヘッダファイルのバグについて

皆さん、こんにちは。今回は復刻ではなく、オリジナルの記事です。

黄色本の読者の方からのご質問で判明しました、MT4のヘッダファイルのバグについてご報告します。

黄色本のサンプルプログラムは、MT5とのソース互換性を保つために、MT4でもテクニカル指標にクラスライブラリを使っていたのですが、そこにトラップがありました。

問題となるテクニカル指標はボリンジャーバンドです。通常、ボリンジャーバンドはiBands()という関数で取得するのですが、この関数の仕様がbuild600以降だと思うのですが、若干変わっています。

以前は標準偏差の倍率を表すパラメータ「deviation」がint型で定義されていたのですが、最近はMT5に合わせてdouble型になっています。

対応するクラスライブラリのヘッダファイルは、データフォルダの下の

MQL4\Include\Indicators\Trend.mqh

ですが、199行目に

と書かれています。これをよく見ると、標準偏差の倍率を表すm_deviationがわざわざ(int)でキャスト(整数に型変換)されています。その結果、deviationが整数以外の場合、小数部分が切り捨てられてしまい、結果が変わってしまうという不具合が発生したようです。

これを解決するには、下のように(int)を消すだけでOKです。ただ、MT4が提供するファイルを修正してもアップデートでまた戻ってしまう可能性もありますが・・・

実はMT4のクラスライブラリは他にもおかしなところがあり、正式に対応しているわけではないのだと思います(ドキュメントも整備されていないし)。MT4のMT5化も何か中途半端で、相変わらずMQ社ののやり方は謎が多いですね。今のところ、MT5のことは考えない方がいいような気がしてます。



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