English

MQL5の書き方(for MQL4デザイナー)

 

MQL5のデータ型と定数

MQL5のデータ型

MQL4では、整数型は主にint型が利用されていました。それに対し、MQL5では利用されるデータ型が多様化しています。その要因として、メタクオーツ社によって定義されたデータ型がさまざまなバリエーションを持つ点が挙げられます。本記事では、MQL5における変数の型とその使用方法について詳しく解説します。

 

MQL5で使用される多様な整数型の例
MQLInfoInteger()の戻り値 int
SymbolInfoInteger()の戻り値 long
MqlTradeRequest構造体のマジックナンバー ulong
PositionGetInteger()で取得するマジックナンバー long
MQL5の整数型

以下にMQL5の整数型の一覧とその詳細を示します。各型の特性と使用例を理解することで、より適切なデータ型を選択が可能となります。
int型は、integer(整数)を意味し、メモリサイズは4バイトです。
short型はint型の半分である2バイト、一方でlong型はint型の倍である8バイトのメモリサイズを持っています。
char型は1バイト文字を保存するために使われていたことから、キャラクター(character)を略した名前となっています。
現代のコンピューティングではメモリの節約があまり重要でないため、char型とshort型はあまり用いられません。

また、型名の先頭に'u'が付いているものは、unsigned(マイナス符号なし)を意味し、正の整数のみを扱います。

以下の表に各整数型の範囲とバイトサイズを示します。

 

範囲 バイト
char -128 ~ 127 1
uchar 0 ~ 255 1
short -32,768 ~ 32,767 2
ushort -0 ~ 65,535 2
int -2,147,483,648 ~ 2,147,483,647 4
uint 0 ~ 4,294,967,295 4
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8
ulong 0 ~18,446,744,073,709,551,615 8
ulongとlong問題

初めの表をご覧になった方の中には同一の値であるはずのマジックナンバーがulongとlongの両方で指定されていることに気付いた方もいるかと思います。
例えばOrderSendに渡すMqlTradeRequest構造体のマジックナンバーはulong型を使用します。しかし、ポジションのマジックナンバーを確認するPositionGetInteger()関数の戻り値はlong型を使用します。このようなケースが存在するため、任意の値を与える際にはlongの上限値を超えないようすることが重要となります。

特殊な整数型

カラー型(color)と日付時刻型(datetime)は、両方とも整数系に属しますが、日常的にそれらを整数として認識する必要はほぼありません。

カラー型は、三原色の16進数値が0x00BBGGRRの形式で指定されます。これは整数として扱われますが、実際にはリテラルや名称を用いて色を指定することが一般的です。

一方、日付時刻型では1970年1月1日からの経過秒数が整数として記録されます。この形式もまた、日常的な操作では直接整数として扱うことは少ないでしょう。

浮動小数型

MQL5では、MQL4と同じように浮動小数点数型として、double型とfloat型が用意されています。
しかし、float型の使用は非常にまれであり、その主な理由はメモリ容量にあります。
double型は8バイトを占有し、float型の4バイトの2倍であるため、その名がdouble(倍)となっています。

 

範囲
float 4
double 8
論理型

論理型のboolは整数系に属します。
2つの値0:falseか1:trueを保持することができます。

キャスト演算子を用いた型の変更

コンパイル時に型不一致で警告が出ることは、高頻度で遭遇する問題です。
ここでは、キャスト演算子を使用して解消する方法について説明します。
以下のコードでは、浮動小数点型の変数aを使用した計算結果を整数型の変数cに代入しようとしています。
その結果、小数部分が失われると警告が表示されます。

 

異なるデータ型の加算操作によって警告が表示される例
double a=1.1;
int b=1;
int c=a+b;
警告:Possible loss of data due to type conversion from ‘double’ to ‘int’

警告を無視することも可能ですが、キャスト演算子を利用することで、簡単かつ効果的に問題を解決することができます。
以下のコードでは、変数aの直前にキャスト演算子(int)が使用されています。
キャスト演算子を変数の前に置くことで、変数aは引き続き浮動小数型で1.1を保持します。しかし、(int)aは整数型として解釈され、小数点以下が切り捨てられた1として扱われます。これにより、警告の発生を避けることができます。

データ型を一時的に変更して整数型にする例
double a=1.1;
int b=1;
int c=(int)a+b;

MQL5では、多様なデータ型が利用されます。それぞれの型の特性を正しく理解し、それに適した操作を行うことで、コンパイル時の警告や不可視のエラーを最小限に抑えることが可能です。明確な型変換テクニックを身につけることにより、より安全で効率的なコードを書くことができるでしょう。コードの品質向上のためにも、データ型の正しい扱いを心掛けましょう。

 

執筆者
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役、株式会社トリロジー他で役員を兼任。