基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2011年01月10日(月)

[MQL5]数値データと変数の型 [MQL5]



年の初めですから、またプログラミングの基礎から話を始めていきましょう。

まずは、メタトレーダー5のプログラミング言語、MQL5で扱うデータの中で、最も基本的な数値データについてみていきます。

その前に復習として、このブログで以前取り上げたMQL4における数値データに関する記事を紹介しておきます。

整数と実数の違い
MQL4の数値変数の型

数値データは基本的には、-2,-1,0,1,2, のような整数と、123.45, 1.2345 のように小数を含む実数との区別ができていれば、実用上問題ありません。

実際、MQL4では、整数はint、実数はdoubleという型しかなかったので、

int a = 1;
double x = 1.23;

のように使い分けるだけでよかったのです。

ところがMQL5になると、数値データの変数の型が、整数の場合、char、short、int、long、uchar、ushort、uint、ulong の8種類、実数の場合、double、floatの2種類と増えています。

これは初心者にとっては混乱する元になりますが、皆さんが個人でプログラムを作成する場合、MQL4と同様、整数はint、実数はdouble という型を使うと覚えておけば結構です。

ただ、サンプルプログラムなど他人が作成したプログラムを参考にする場合、int、double以外の型を使用している場合があるので、それらの型の違いを知っておくと便利です。

まず、実数に関しては、doubleを使うケースが多く、float を使っているプログラムはあまりありません。float はdouble に比べて必要となるメモリ量が半分で済みますが、数値の精度が低く、表現できる範囲が狭くなります。またMQL5におけるほとんどの組込み関数が実数のパラメータの型をdouble として定義しているので、それと同じく double を使った方が都合がいいのです。

それに対して、ちょっとややこしいのが整数の方です。int 以外の型も結構使われています。

整数の型は全部で8種類ありますが、charとuchar、shortとushort、intとuint、longとulong はそれぞれセットになっていると考えてください。頭に「u」がついているか、いないかの違いですが、付いていない方が標準で、プラスの数とマイナスの数を表現できる型です。一方、「u」がついているのは、「unsigned(符号なし)」という意味で、マイナスの数は表現できず、0以上の数しか表現できない型です。

char、short、int、long の違いは、必要とするメモリ量が順に8ビット、16ビット、32ビット、64ビットと大きくなっていることです。つまり、表現可能な最小値と最大値の幅がどんどん大きくなっているのです。

と言っても、intで-2147483648 から 2147483647 まで表現できるので十分と言えば十分です。ただ、MQL5の組込み関数の中にlong を関数の戻り値の型としているものがあります。例えば、AccountInfoInteger()という関数は、
long AccountInfoInteger(int property_id);

のように戻り値が long として定義されています。

ここで、
int x = AccountInfoInteger(ACCOUNT_LOGIN);

と書くと、long の戻り値を int の型に変換して代入するので、コンパイル時に
possible loss of data due to type conversion

という警告が出ます。これは、long では表現できていた数値がint では表現できない場合があるので、データが失われてしまう可能性があるという意味の警告です。そういうケースはまれなので、実用上は問題ないと思われますが、この警告が気になる場合は、
long x = AccountInfoInteger(ACCOUNT_LOGIN);

のように戻り値と同じ型の変数に代入すれば、OKです。

また、通常はintやlongなどの符号付き表現の方が便利なのですが、明らかにプラスの値しか使わないという場合には、uint やulong を使うこともあります。

ただし、uint の型で宣言した変数に間違ってマイナスの数値を代入してもエラーは出ず、実際にはとんでもなく大きな値が代入されてしまうことがあるので注意してください。

例えば、
uint x = -1;
Print("x=", x);

とすると、何のエラーも出ずに、
x=4294967295

と表示されたりします。

人間にとっては理解に苦しむところですが、コンピュータにとっては、これは間違いではないのです。

まあ、こんなことで怒らずに、相手(コンピュータ)の気持ちになってプログラムを作るということを心がけて、今年1年、プログラミングに取り組んでいきましょう。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 10時54分


ページのトップへ ページのトップへ

Sponsor AD

2011/1

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

ランダムウォークとランダムトレード(4)

ランダムウォークとランダムトレード(4)

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.