switch文の構文を調べても、実際のMQL4コードでどう使うのかイメージが湧かない——という人向けの記事です。

この記事では、switch文の基本構文に加えて、曜日ごとに処理を分けるという実際のMQL4コード例を紹介します。

switch文

MQL プログラミング基礎 Switch文

if文も条件分岐によって使用しますが、

switch文は条件によって処理を分ける数が複数で多い場合に使われます。

ある変数の値を色々な値と比較したい場合にはswitch文を使います。

switch文の宣言

Switch分の宣言は以下のように記述します。

switch(式){
  case 定数1:
    式が定数1の時に実行する処理;
    ...
    break;
  case 定数2:
    式が定数2の時に実行する処理;
    ...
    break;

  default:
    どの定数にも一致しない時に実行する処理;
    ...
}

Case

Caseは条件の値とcaseの値が一致すれば、処理が実行されます。

Caseは;(セミコロン)ではなく:(コロン)なので注意しましょう。

Caseは何個でも記述できるので比較したい整数値の数だけ記述しましょう。

break文

break文は実行されるとswitch文の実行が終わります。

breakがないと、それ以下の文を全て実行してしまうのでbreakを忘れないこと。

default

defaultは値が一致しなかった場合の処理を記述します。

実際に使ってみる

曜日ごとにコメントを変えるインジケーターで、switch文を実際に使ってみましょう。

#property strict
#property indicator_chart_window

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   string dayText;

   switch(DayOfWeek())//0:日曜日〜6:土曜日
     {
      case 0:
         dayText = "日曜日(市場休場)";
         break;
      case 1:
         dayText = "月曜日(週明け、値動きに注意)";
         break;
      case 5:
         dayText = "金曜日(週末クローズに注意)";
         break;
      case 6:
         dayText = "土曜日(市場休場)";
         break;
      default:
         dayText = "平日";
         break;
     }

   Comment(dayText);

   return(rates_total);
  }
Copy

`DayOfWeek()`が返す0〜6の数値をcaseで振り分け、月曜・金曜・土日だけ個別のメッセージを表示し、それ以外(火・水・木)はdefaultで「平日」とまとめて表示しています。

もし各caseの`break;`を書き忘れると、例えば月曜日(case 1)に該当した場合、そのまま次のcase(存在すれば)まで処理が続けて実行されてしまいます。switch文を書いたら、忘れずに各caseの末尾に`break;`を入れる習慣をつけましょう。

まとめ

ポイント

Switch文:複数の選択肢から一致する処理を実行する
Case:条件の値とcaseの値が一致すれば処理が実行される
break文:実行されるとswitch文の実行が終わる
default:値が一致しなかった場合の処理

関連記事