演算子の種類と記号を覚えても、実際に自分のインジケーターやEAでどう組み合わせて使えばいいのか分からない——という人向けの記事です。この記事では、演算子の基本に加えて、実際にMetaEditorでコンパイルして確認できるサンプルコードを紹介します。

演算子

MQL プログラミング基礎 演算子

演算子とは、プログラム中で計算・比較するなどの様々な操作をするために使用する記号になります。

例えば、1+2の「+」は足し算を行うための演算子ということです。

また、この場合「1」や「2」はオペランド(被演算数)と呼ばれています。

算術演算子

算術演算子とは、四則演算(加減乗除)などの算術的な計算を行うものです。

演算子 名前 記述例 意味
+ 加算 a + b a に b を加える
減算 a – b a から b を引く
* 乗算 a * b a に b をかける
/ 除算 a / b a を b で割る
% 剰余 a % b a を b で割った余り

関係演算子

関係演算子とは、2つのオペランドの関係を求める演算子です。

関係が成り立つ場合をtrue(真)、成り立たない場合をfalse(偽)の値を持ちます。

演算子 記述例 意味
== a == b aがbに等しい
!= a != b aがbに等しくない
> a > b aがbより大きい
>= a >= b aがbより大きいか等しい
< a < b aがbより小さい
<= a <= b aがbより小さいか等しい

インクリメント演算子とデクリメント演算子

インクリメント演算子とデクリメント演算子と呼ばれるものがあります。

  • インクリメント演算子:変数の値を1だけ増加させる演算子
  • デクリメント演算子:変数の値を1だけ減少させる演算子

演算子の中でも特に利用されることが多くなっています。

これは後で紹介する繰り返し処理や配列などを使う場合に利用するためです。

インクリメント演算子は次のように記述します。

int num = 5;
num++;

デクリメント演算子は次のように記述します。

int num = 5;
num--;

インクリメント演算子とデクリメント演算子には、それぞれ前置きと後置きの二種類が存在します。

  • 前置き: ++変数
  • 前置き: –変数
  • 後置き: 変数++
  • 後置き: 変数–

前置きと後置きの違いですが後置きは「y = x++;」なので、

y = x;
x = x + 1;

と同じになります。

それに対して前置きは「y = ++x;」なので

x = x + 1;
y = x;

となります。

つまり、後置きした場合は、変数xの値が1増える前に値がまず変数yに代入されてから、

その後に変数xの値が1増えています。

それに対して前置きの場合は、変数xの値を1増やしたあとで増えたあとの値が変数yに代入されます。

そのため表記は似ていますが、前置きと後置きで処理の結果が違います。

代入演算子

代入演算子とは、変数に対して何か値を代入するための利用される演算子です。

代表的なものは、「=」です。「=」は右辺の値を左辺に代入します。

例えば「10」と言う数値を変数「var」に格納するには次のように記述します。

int var;
var = 10;

また、変数に演算結果を格納も可能です。演算結果を変数に格納することも出来ます。

例えば次のように記述します。

int sum;
sum = 8 + 3;

上記では「8 + 3」と言う演算を行った結果を「=」の左側にある変数「sum」に格納します。

結果として変数「sum」には「11」が格納されます。

先に「8 + 3」と言う演算が行われますので次のように記述された場合と同じです。

int sum;
sum = 11;

また「=」も演算子の一つですが「+」と「=」では「+」演算子の方が優先順位が高いため、

先に加算が行われ、その後で代入が行われています。

実際にコンパイルして確認する

算術演算子・関係演算子・インクリメント演算子を組み合わせて、保有中の買いポジション数を数えるインジケーターを作ってみましょう。

//+------------------------------------------------------------------+
//|                                                     Operator.mq4  |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   Comment("");
  }

void OnTick()
  {
   int buy_count = 0;//インクリメント演算子でカウントする変数

   for(int i = 0; i < OrdersTotal(); i++)//「<」は関係演算子
     {
      if(OrderSelect(i, SELECT_BY_POS) == false)//「==」は関係演算子
         continue;

      if(OrderType() == OP_BUY && OrderSymbol() == Symbol())
        {
         buy_count++;//インクリメント演算子で1増やす
        }
     }

   double total_lots = buy_count * 0.1;//算術演算子「*」で概算ロットを計算

   Comment("買いポジション数: ", buy_count, "\n概算ロット(0.1固定と仮定): ", total_lots);
  }
//+------------------------------------------------------------------+
Copy

i < OrdersTotal()で関係演算子、buy_count++でインクリメント演算子、buy_count * 0.1で算術演算子をそれぞれ使っています。演算子は単体で覚えるより、こうして組み合わせて動くコードの中で見ると理解しやすくなります。

まとめ

今回は演算子について説明しました。

演算子を理解することで今後のプログラミングの処理や分岐などの理解が深まります。

わからないポイントはしっかりと復習しましょう!!

ポイント

演算子:計算・比較するなどの様々な操作をするために使用する記号
算術演算子:四則演算(加減乗除)などの算術的な計算を行う演算子
関係演算子:2つのオペランドの関係を求める演算子
インクリメント演算子:変数の値を1だけ増加させる演算子
デクリメント演算子:変数の値を1だけ減少させる演算子
代入演算子:変数に対して何か値を代入するための利用される演算子

関連記事