2016年1月4日月曜日

[MQL超入門] その007 変数の型

さてさて、変数について、もう少し掘り下げてみましょう。

変数というのは値が変化する名前の付いた箱のようなものと説明しました。

MQLでは箱の種類がいくつか存在します。
代表的なものを説明します。

■int型
- 2147483648~2147483647(±約20億)の整数値だけ代入可能な型です。
MQLでは主に配列の添え字やfor文の回数を制御するために使用します。

■double型
小数点を含む値を代入することが可能です。MQLでは主に価格情報や計算結果で使用します。

さて、int型とdouble型ですが、最大の違いは割り算です。
・[MQL超入門] その002 最初の一歩。Hello world!
http://mt4program.blogspot.jp/2015/12/mql-002-hello-world.html
で作成したプログラムを少し改造して、intとdoubleの割り算の違いを見てみましょう。

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   int iX = 1;
   int iY = 2;
   
   int iZ = iX / iY;

   MessageBox(iZ);
   
   double dX = 1;
   double dY = 2;
   
   double dZ = dX / dY;

   MessageBox(dZ);

  }
//+------------------------------------------------------------------+

画面に0と表示されたメッセージと、0.5と表示されたメッセージが出てくると思います。
このようにint同士の割り算では、小数点以下は切り捨てとなります。

思わぬ切り捨てが発生して予期しない計算式とならないように注意が必要です。

■string型
文字列型です。MQLでは文字列の定数は""で囲んで宣言しますが、宣言した文字列を代入するための変数です。MQLでは主にメッセージボックスの文字列や、インジケータの情報を表示するための文字列として使用します。

string message = "あいうえお";
MessageBox(message);

■bool型
論理型と呼ばれる、trueかfalseの2値のみをが入る値です。これは、まだ説明していないif文と呼ばれる条件によって処理が変わる制御で使用します。

bool isRun = true;

if( isRun )
{
   // 実行時処理
}
else
{
   // 未実行時処理
}

■datetime型
日時が設定可能な型です。現在時刻や、チャート上のバーの時間などを取得する際に使用します。日付関数と呼ばれる日付を操作する関数群とセットで利用します。少々説明が長くなりますので、別の機会を設けて説明します。ここでは日付を扱うための専用の変数があるんだなぁぐらいで覚えておいてください。

datetime now = TimeCurrent();
MessageBox(TimeToStr(now));


■uint型
0~4294967295(0~約40億)までの正の整数値のみが代入可能な特殊な型です。負の値をとりたくない場合に使用します。uint型では、引き算に特徴が表れます。

・MT4プログラムの小ネタ GetTickCount()とuintの引き算とOS再起動
http://mt4program.blogspot.jp/2015/10/mt4-gettickcountuintos_8.html

でも少し書いてありますが、減算しても、-の値になりません。マイナス分が最大値である4294967295から引かれた値に1足した値となります。

例えばこんな感じです。

uint uX = 0;
uint uY = 4294967295;
 
uint uZ = uX - uY;
MessageBox(uZ);

//1と表示されます。

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ