『新メタトレ入門本』スクリプト:データの型と変数


新MT4対応 FXメタトレーダープログラミング入門』(新メタトレ入門本)連動企画です。

今回は、本書の第2章「スクリプトのプログラミング」の「2-4 データの型と変数」についてです。

【目次】
第1章 メタトレーダーの紹介
第2章 スクリプトのプログラミング
  2-1 新規ファイルの作成
  2-2 文字列の表示(文字列定数)
  2-3 チャート上のデータの表示(定義済み変数)
  2-4 データの型と変数
  2-5 組み込み関数の使い方
  2-6 トレード関数の使い方
第3章 カスタム指標のプログラミング
第4章 エキスパートアドバイザー(EA)のプログラミング

本書アップデート情報

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

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

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

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

以前のビルドでは、新MQL4で宣言した変数に値が代入されていないと、コンパイル時に「possible use of uninitialized variable」(初期化していない変数を使おうとしています)という警告メッセージが表示されていました。ただ、現在のビルドでは、そのような警告は出ないようなので、その説明は削除しました。

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

細かい話ですが、double型変数「x1」をPrint()関数で表示させる際に、旧MQL4だと「0」、新MQL4だと「0.0」と表示されるようです。そのため、ex5_scr.mq4の実行結果を上の図に差し替えました

そのほかの変更箇所はありません。

関連するMT5情報

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

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

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

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

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

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

前へ

『新メタトレ入門本』スクリプト:チャート上のデータの表示

次へ

『新メタトレ入門本』スクリプト:組み込み関数の使い方