本書アップデート情報

このセクションでは、定義済み変数以外の一般の変数の使い方を説明しています。C言語をご存じの方にはおなじみだと思いますが、データ型を指定して変数を宣言するということです。

ただ、変数を宣言しただけで具体的な値を代入していない場合、注意が必要です。

#property strict」が書かれてない場合、旧MQL4とみなしますが、その場合、変数を宣言しただけで、int型double型など数値変数は「」に、string型の文字列変数は「""」に初期化される仕様となっています。

#property strict」が書かれていると、新MQL4とみなし、その場合、string型変数は「""」に初期化されますが、数値変数は初期化されないというのが仕様となっています。

なお、変数を宣言しただけのサンプルプログラムex5_scr.mq4を実行すると、以下のように数値変数も初期化されているように見えます。

image.png

細かい話ですが、double型変数「x1」をPrint()関数で表示させる際に、旧MQL4だと「0」、新MQL4だと「0.0」と表示されるようです。

関連するMT5情報

変数の宣言の仕方など基本的な使い方は、MQL4とMQL5とで大きな違いはありません。サンプルプログラムは拡張子を「mq5」に変えるだけでコンパイルできます。

ただ、実行結果で違いがあるケースがあります。

上で説明した変数を宣言しただけのプログラムex5_scr.mq4ですが、実行結果は以下のようになります。

image.png

string型変数「Str」は「""」になっていますが、int型変数「i」、double型変数「x1」は、0に初期化されず、プログラム中でも指定していないまったく関係のない値になっています。

実はこれが「数値変数は宣言しただけでは初期化されない」というMQL5の仕様なのです。新MQL4の場合、0になっていましたが、初期化されたわけではなく、たまたま0が入っていた状態なのかもしれません。

いずれにしろ、新MQL4、MQL5でプログラムを作成する際には、宣言した変数は初期化されていないと考えて、必ず、具体的な値を代入してから使うようにした方がよいでしょう。