MT4/MT5で数値の計算をしてみる|MQL入門(3回目)

2018年11月7日

PCに書かれたプログラム

今回は、「数値の計算」と「データの型」について学んでいきます。

第2回目までを確認いただいている前提で進めますので、まだ見ていない方は先にご確認いただければと思います。

初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)

MT4/MT5のコメントと変数について|MQL入門(2回目)

数値の計算

演算子の種類

現実世界でも使われる演算子ばかりですが、プログラムで書くときに書き方が変わるものがあることにご注意ください。

種類 一般表示 プログラム表示
加算 + +
減算
乗算 × *
除算 ÷ /
剰余算 mod %

 

プログラムを書く

早速いくつか計算していきましょう。

今まで使っていたPractice001.mq4/mq5をそのまま使ってもいいのですが、MT4/MT5でのプログラム実行方法を忘れないように、新しくPractice002.mq4/mq5を作成してください。

作成方法や実行方法を忘れてしまった方は「初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)」を見て思い出してください。

 

作成したら以下のようにプログラムを書いて、コンパイルしてください。

%dは数値を入れるという意味ですので、計算結果を%dに入れるということになります。

 

Practice001を実行していたチャートにPractice002をドラッグ&ドロップした場合は、以下のようにポップアップが出ますが気にせず「はい」とすると、Practice002が適用されます。

EAの上書き適用

 

結果を確認しましょう。

結果ログ

前回説明した通り、MT4ではコンソールには実行した順に積み重なるのでプログラムを書いた順序とは逆の順序で表示されます。(MT5は実行準通り表示されます。)

4 + 3 = 7

4 – 3 = 1

4 * 3 = 12

4 / 3 = 1

4 % 3 = 1

実際に計算すると上記のようになるので、正しい結果が表示されたことが分かります。

 

変数を使って計算する

実戦では先ほどの「4 + 3」のように具体的な数値を入れて計算することは少ないです。

数値は基本的に変数に入れて計算しますので、実戦を考えてプログラムを以下に書き換えてください。

 

補足intは整数型を表します。

int first = 4;は、「firstという整数型の変数に4を代入する。」という意味です。

コンパイルすると、先ほどと同じ結果が表示されます。

 

計算の優先順位

計算の優先順位についても現実世界と同じになります。

「+、-」よりも「×、÷」が優先されますし、「それよりも()内の式が優先されます。

少し例を見てみましょう。

実行結果は以下のようになりました。
実行結果確認

first * first + second

×が先に計算されます。

4 * 4 = 16で、16 + 3 = 19になります。

first * (first + second)

カッコ内が先に計算されます。

(4 + 3) = 7で、4 * 7 = 28になります。

このように、プログラムの世界も基本的には現実世界と同じルールで計算することが可能です。

ほかのプログラム言語で書く場合でも基本的な考え方は同じなので、どの言語でも計算ができるようになったということです。

 

データの型

データの型について学ぶ

データの型は既に2つ学んでいます。

int(整数型)やstring(文字列型)がそうです。

実戦で使うものがあと2つあり、まずはこの4つを覚えておけば問題ありません。

プログラム表示 意味
int 整数型 [1], [2], [3]など
double 実数型 [1.4], [3.3333]など
string 文字列型 [“テスト”], [“文字”]など
bool 真偽値型 [True(1)], [False(0)]

 

プログラムを書く

プログラムを書いてコンソールに出力してみましょう。

以下のようにプログラムを変更してコンパイルしてください。

※新しく出てきた「%lf」は実数を入れるためのものです。

結果を確認しましょう。

実数型の表示確認

入力した値のとおりに表示されました。

一点気になる部分として、boolで入れた「true」が「1」と表示されましたが、あまり気にせずboolの「true:1」、「false:0」と覚えておけばいいです。

また、boolに関してはどのようなタイミングで使うかこの時点では想像がつきにくいと思いますが、進めていくと理解できますのでもう少々お待ちください。

※もう少し詳しく型について知りたい方は、こちらのサイトをご確認ください。

 

型を間違えた場合

型を間違えると正しい処理ができなくなります。

例えば間違えて全て3.33にしたパターンを見てみましょう。

MetaEditorのワーニング

 

コンパイル時に警告が2つ出ました。

12行目で値が切り捨てられたことを示す、「truncation of constant value」が表示され、14行目で数値を文字型に自動変換した「implicit conversion from ‘number’ to ‘string’」が表示されました。

コンソール上の表示を確認しましょう。

ログの確認

最初が「3」となってしまっています。

3.33とは実数型なのでint(整数型)では扱えず、小数点以降が切り捨てられたのです。

 

実戦ではどういったケースで問題となるでしょうか?

例えばFXの自動売買をやっていると考えましょう。

少し強引な設定ですが、ドル円は113.185円で取引されていて、113.2円を超えた時に買いを入れるプログラムを書いたとします。

int price = Close[1];// ※Close[1]には113.185のような実数が入っていたとします。

priceが113.2を超えたら買い。

結果はどうでしょうか。

このプログラムではintで受け取っているので、113.xxxは全て113に丸められてしまいました。

つまり、priceが113.2を超えるのは実際は114を超えた場合になってしまい、思ってもいないタイミングで買われてしまいます。

このような不具合を起こさないためにも、コンパイル時に出力される警告は放置しないようにしましょう。

 

エラーや警告の調べ方

プログラムで出力されるエラーは全て英語なので、英語が苦手な方はかなり戸惑うと思います。

私も苦手なのでよくわからないことが多々あります。

解決するには大きく3つのステップがありますので、覚えておきましょう。

 

エラーや警告の意味を理解する

まずは翻訳するところからです。

私はGoogle翻訳を使っています。

昔は翻訳の精度が悪く使い物になりませんでしたが、現在はAIの活用によりほぼ問題なく人間が理解できる状態に翻訳してくれます。

試しに先ほどの「truncation of constant value」をGoogle翻訳に掛けると「定数値の切り捨て」と出てきますので、「あ、切り捨てはまずい。。。何か対処しないと。」となるわけです。

 

エラー内容をネットで調べる

次にエラーが具体的にどういう意味なのか?どういう時に発生するのか?を調べます。

調べる検索ワードは、「言語名 エラー内容」としてgoogle検索すれば大体でてきます。

今回なら「mql エラー truncation of constant value」、もしくは「mql エラー 定数切り捨て」などです。

これで日本語のサイトがヒットすれば一番良いのですが、英語のサイトしか表示されない場合があります。

 

人に聞く

最終手段です。

ネット上で質問すれば大抵のことは誰かが答えてくれますので、プログラムとエラーを添えて聞いてみましょう。

 

まとめ

最後は少し脱線してエラーの話をしましたが、本筋である「数値の計算とデータの型について」ある程度理解できたのではないかと思います。

次回は条件分岐をマスターする|MQL入門(4回目)です。

今回の記事のまとめ

  • 演算子をプログラムで書くときに書き方が変わるものがある(*, /, %)
  • 数値は変数に入れて計算する
  • 計算の優先順位についても現実世界と同じ
  • データの型は(int, double, string, bool)の4つだけ覚える
  • コンパイル時に出力されるエラーや警告は無視しない
  • 英語のエラーでも自分なりに頑張って調べてみる

 

自動売買入門のまとめは以下をご参照ください