前回までは、MQLを学習する上で重要な制御構造について解説しました。
しかし、同じくらい重要な「データ型」についてはほとんど説明していませんでした。
今までに簡単に説明したのはstring型(文字列型)とint型(整数型)だけでしたね。
今回は、MQLで扱うことの出来るデータ型にはどのような物があるのかをご説明したいと思います。
start関数を空にしたソースを準備しましたのでダウンロードしてお使いください。
・start関数が空の TestIndicator
以下は今回ご提供したソースのstart関数の部分です。
int start() { return(0); }
このソースを修正しながらデータ型についてご説明して行きたいと思います。
int型は整数型とよばれます。具体的には-2147483648~2147483647の整数です。
for文やwhile文のカウンタ変数として使用されることが多いです。
以下のソースは、チャートの左上に”10″を表示します。
int start() { int num = 10; Comment(num); return(0); }
bool型はブール型と言います。初めて出てくる型ですがこれは非常にシンプルな型で、”true”(トゥルー)か”false”(フォルス)のどちらかしか入らない型です。trueは”真”(しん)と表現されます。真とは正しいとか条件を満たすという意味です。逆にfalseは”偽”(ぎ)と言われます。偽とは、間違いとか条件を満たさないという意味です。実際のコードを以下に示します。
int start() { bool b = false; if(b == true) { Comment("変数bはtrueです。"); } else { Comment("変数bはfalseです。"); } return(0); }
34行目でbool型の変数bに”false”を代入しています。その後のif-else文ではelseの方が実行され”変数bはfalseです。”が出力されます。
もう一つ、大事なことがあります。それは、じつはtrueとfalseの正体は、0と1であるということです。次のコードを実行してみて下さい。
int start() { Comment(true); } return(0); }
チャートに”1″が出力されるはずです。そして”true”を”false”に変更して実行してみると、今度は”0″が出力されます。
つまり、true=1,false=0と同じなのです。もっと言うとtrue=0以外,false=0 となります。つまり、0以外は全てtrueと同じ意味になります。
じゃあわざわざtrue,falseなんて使わなくていいでしょ、0と1を使えばいいんじゃないの?と思うかもしれません。
それはちょっと違います。bool型の変数は、見た瞬間trueかfalseしかないということが分かります。
これを、0と1で代用する場合、int型の変数を宣言して使用することになります。そうなると、その変数が0か1しか使われないというのはパッと見てわかりません。これは後でソースコードを見た時の見やすさにつながります。
そういう理由で、trueかfalseの2値で良い変数はbool型で宣言しましょう。
また2つ上のif-else文では、35行目で”if(b == true)”のように表現していました。じつはこれは以下のように書くこともできます。(私は以下を推奨いたします)
int start() { bool b = false; if(b) { Comment("true"); } else { Comment("false"); } return(0); }
35行目を変更しました。”== true”が消えていると思います。なぜこのような書き方が可能かをご説明しておきます。
そもそもif-else文の形は以下のようなものでした。(ここではelseは省略しています。)
if(条件式1) { // 条件式1に当てはまった時の処理 }
ここで、条件式1というのがありますが、じつは条件式はbool型なのです。つまり、”b == true”は、bがtrueであればtrueを返し、そうでない場合はfalseを返すのです。この例では、b自体がbool型なので、bそのものを条件式として使うことが出来るためこのような書き方が可能なのです。bがbool型の変数の場合、”if(b == true)”と”if(b)”は全く同じ意味となります。逆にfalseであるかどうかのif文は”if(b == false)”と書けますが、”if(!b)”と書くこともできます。”!”(エクスクラメーションマーク)は否定という意味でした。こう書くと「bがtrueの反対である場合」すなわち「bがfalseである場合」という意味になります。
以下に簡単にまとめました。
bool型 | 説明 |
---|---|
true | 1(0以外)、満たしているという意味 |
false | 0、満たさないという意味 |
bool型はこのように文章で説明しようとするとなんだか難しく感じてしまった方もいらっしゃるかもしれませんが、使ってみると簡単なので、今はなんとなく分かっていれば良いと思います。
string型は文字列型と呼ばれ、「”」(ダブルクォート)で囲まれた文字列です。ダブルクォート自身を出力するにはその前に\を記述し、「\」(円マーク)自身を出力するには同様に\の前に\を記述します。以下に具体例を示します。
int start() { string moziretu = "ダブルクォート(\") 円マーク(\\)"; Comment(moziretu); return(0); }
上のコードでは「ダブルクォート(“) 円マーク(\)」と出力されます。
double型は実数型といって、小数点を含む数のことです。具体的には -1.7 * e-308 から 1.7 * e308 の数値です。
ここで、「e-308」という表現がありますが、これは「10のマイナス308乗」という意味です。このような細かい数値を覚える必要はありません。
以下はdouble型を使用したサンプルです。
int start() { double dbl = 1.25465489; Comment(dbl); return(0); }
上のソースをコンパイルしてチャートにセットしてみて下さい。チャートに”1.25465489″が表示されると予想しませんでしたか?実際には”1.2547″が出力されましたよね。
MetaEditor上で”Comment”の部分にカーソルを置いてキーボードのF1キーを押してヘルプを表示させて下さい。英語なので分かりにくいかもしれませんが、Comment関数の引数にdouble型の値を与えた場合、小数第五位で四捨五入され、小数点以下は四桁になると書いてあります。
double型の値をもっと高精度に表示したい場合はDoubleToStr関数を使用します。DoubleToStr関数は、MQL4ですでに準備されている関数(定義済み関数)で、2番目の引数に小数点以下の桁数を指定して使用します。
int start() { double dbl = 1.25465489; Comment(DoubleToStr(dbl, 8)); return(0); }
以上のコードで小数点8桁までの数を表示することができました。(8桁が最大の精度です)
今回はよく使用するデータ型の種類をご紹介しました。他にもデータ型はありますが、残りは随時ご紹介していこうと思います。