【超入門】MQL5 EA講座 第17回「定数(Constant)について」【EAの作り方】

MQL5でEA作ろう講座

前回は datetime型というデータ型について解説しました。

改めて前回の内容をおさらいをしておくと、

  • 日付・日時データは以下のプロセスを経て表現できる↓
  1. 大文字アルファベットの「D」を書く。
  2. 年、月、日の順に、ピリオドで区切る形で記述する。
  3. 日 の後に、半角スペースを開けてから時間、分、秒の順にコロンで区切る形で記述する。
  4. 大文字アルファベットのD以降の記述内容をシングルクォーテーション(‘)で挟む
  • MQL5が事前に定義しているdatetime型定数を使って日付・日時データを表すこともできる。

ということをお伝えしました。

データ型についてはとりあえず一区切りがついたかと思います。

皆様お疲れ様でした<m(__)m>

整数型についてはコチラ

実数型についてはコチラ

文字列型についてはコチラ

ブール型についてはコチラ

カラー型についてはコチラ

datetime型についてはコチラ

今回は定数についてお話ししたいと思います。

MQL5で自動売買プログラム作るにあたっては、MT5メタエディター5がお使いのパソコンにインストールされている必要があります。

もし、まだMT5のダウンロードが完了していない方は、

こちらからデモ口座の開設とMT5のダウンロード・インストールを完了して頂ければと思います。

スポンサーリンク
スポンサーリンク

定数とは?

カラー型datetime型に関する解説記事の中でも、少し触れた概念ですが、

定数→定まった数→決まっている、変わらない数

で、変数→変わる数

とは逆の概念になります。

変数については↓の記事をご覧ください。

変数では、新しい値を代入することによって、値を変えることができるのですが、定数ではそれが一切できない、ということになります。

定数を理解し、使いこなすことのメリット

つまり定数は、変更されることのない固定値であり、プログラム全体で一貫した値を保証する事になります。

定数をうまく扱う事は、エラーの可能性を減らし、コードの可読性を高めることができます。

また、例えば、特定の計算や操作に頻繁に使用される数値や設定を定数として定義することで、その値をプログラム内の複数の場所で繰り返し使用することが可能になります。

総じて、定数を適切に活用することは、これからEAやカスタムインジケーターなどの複雑なプログラムを開発する際に、大きなメリットをもたらします。

順を追って、丁寧な解説を心掛けましたので是非上記のようなメリットを獲得できるイメージを抱きながら楽しんでお読みいただければと思います。

定数の作り方・使い方

定数を作る方法は二通りあります。

  1. #define命令を使う
  2. const指定子を使う

・・・なんだか、また謎の言葉が出てきた( ゚Д゚)

と思われたかもしれませんが、そんなに難しい話でもありません。

順にみていきましょう。リラックスして読んでください<m(__)m>

#define命令(define directive)を使う

#define命令というのは、

定数を設定するのに使用される処理

のことです。

こんな感じで使います。↓

//「PI」という名前の定数を作り、値は3.14とする
#define PI 3.14
void OnStart()
  {



   //定数PIをコメント出力をする
    Comment(PI);

  }
  • まず最初に#defineを書く。(定数を作りますよーという宣言になります)

  • 定数の名前をつける(自由につけられますが、定数は全て大文字にするのが、慣例になっています)

こんな過程を踏んで定数を作ります。

#が頭につく記述だと、以前#プロパティ命令という処理のことを第4回で書きましたね。

#プロパティ命令については詳しくは↓をご覧ください。

#defineで定義した定数は、どのデータ型の値も格納できます。

文字列の場合↓

  //「MYNAME」という名前の定数を作り、値はMQL5世とする
#define MYNAME "MQL5世"
void OnStart()
  {

 

   //定数MYNAMEをコメント出力をする
    Comment(MYNAME);

  }

実行してみます。

整数でも↓

 //「INTEGER」という名前の定数を作り、値は1234とする
#define INTEGER 1234
void OnStart()
  {

 

   //定数INTEGERをコメント出力をする
    Comment(INTEGER);

  }

実行してみると

#define定義で定数を作る場合、変数のようにint や double stringといったデータ型をつける必要はありません。

const指定子を使う

2つ目の定数の作り方がconst指定子を使う方法です。

記述はこんな感じになります。

void OnStart()
  {

  //const指定子をつけて変更不可にする
 const int Constant=1234;

  

  }

変数宣言の時に使う整数型intの前にconstをつけました。

これで定数「Constant」の完成です。

変数であれば、代入によって、新しい数値に変えることもできるのですが、const指定子をつけた定数「Constant」に新たな値を代入しようとすると、

void OnStart()
  {

  //const指定子をつけて変更不可にする
 const int Constant=1234;
 
 //5678を代入する
 Constant=5678;

  

  }

このコードをコンパイルすると・・・

「constant cannot be modifie→定数は値を変えられません」

というコンパイルエラーが出てしまいます。

おまけ -パラメトリック形式の定数記述-

これから書くことは本当にマジで、おまけです。ほとんど使う事がないので、余計な脳のリソースを使いたくない人はすみやかに次回にお進みください。

パラメトリック形式の定数記述とは、

#define命令時に、関数がやるように、算式で定数を定義づけようという定数の記述形式

のことです。

言葉だけだとよくわからないと思います。具体例を見ていきましょう。

#define PI 3.14
#define  CalCirc(diameter) PI*diameter


void OnStart()
  { 
  double di=5;
  double circumfence=CalCirc(di);
     Print(circumfence);
     
  }

最初に#define命令によって、定数「 PI」の値を 3.14に定めます

次の行で設定した定数CalCircは、まるで関数のように()内に diameter という引数(パラメーター)をもっています。

関数についてはまだ詳しい解説をしていないですが、先に知りたい方はコチラをご覧ください。

()の横に書いている PI*diameter

3.14 × diameter (ここに代入される数値)という掛け算を表しており、

定数CalCircを使う時には()内にPIと掛け算をする数値をもってくることで、PIとの掛け算の結果を返してくれる処理をします。

OnStart関数で呼ばれた定数CalCircの()内にはdouble型変数「di」があてがわれています。

変数「di」には値「5」が代入されているので、

3.14 × 5の答え→15.7が変数「circumfence」に格納されて、ログ出力されます。

ですが、敢えておまけの項目で取り上げていることからもわかるように、ほとんどこういった使い方をすることはありません。

プログラミング初心者の方はその理由がピンとこないと思いますが、こういった記述をするぐらいなら、第25回で取り上げる関数の記述をさっさとしてしまった方がわかりやすいからです。

関数について先に詳しく知りたい方は↓

【超入門】MQL5 EA講座 第25回「関数について」

をご覧ください。

※掛け算を含めた四則演算の記述方法についも、まだ詳しく解説していないですが、先に知りたい方は↓

MQL5 EA講座 第30回「計算に関する記述その1-基本編-」

をご覧ください。

まとめ

今回は定数について解説しました。

今回の記事では以下のことを学びました

  • 変数では、新しい値を代入することによって、値を変えることができたが、定数ではそれができない。

最後までお読みいただきありがとうございました<m(__)m>

【超入門】MQL5 EA講座 第16回「データ型その6 datetime型」【EAの作り方】

        →【超入門】MQL5 EA講座 第18回「配列(Array)について」【EAの作り方】

コメント

タイトルとURLをコピーしました