関数の定義(戻り値の型・引数・return文)の書式を覚えても、実際に自分でどんな関数を作ればいいのか分からない——という人向けの記事です。この記事では、関数の基本に加えて、実際にMetaEditorでコンパイルして確認できる自作関数のサンプルコードを紹介します。

関数とは

MQL プログラミング基礎 関数

関数とは、データを受け取り、定められた独自の処理を実行し、その結果を返す命令のことです。

ある値を与えるとその関数固有の処理を行って値を返します。

少し難しいのでもう少し関数を簡単に言うと自動販売機みたいなものです。

自動販売機はお金を入れるとジュースが出てきます。何かを入れると何かが出る仕組みこそ関数になります。

MQL プログラミング基礎 関数

関数はプログラミングでは非常に重要なのでプログラミング初心者の人でも分かりやすいように説明します。

関数の持っている要素

関数は大きく分けて3つの要素を持っています。

  • 入力(インプット)
  • 処理
  • 出力(アウトプット)

自動販売機に例えると

入力(インプット)は、お金をいれることや飲み物を選びます。

そして処理では、得られた飲み物を運んだりお釣りを計算します。

最後に出力(アウトプット)で飲み物を出してお釣りを返します。

関数の定義の仕方

関数の定義の仕方は次のように記述します。

戻り値の型 関数名(引数の型 引数名, 引数の型 引数名, ……)
{
  処理内容
  return(戻り値);
}

新しい言葉が色々と出てきたのでそれぞれについて説明してきます。

関数名

関数名とはその名の通りで、関数の名前です。

関数名は、ユーザー自身が自由につけることができます。

引数(ひきすう)

引数(ひきすう)とは、関数が実際に実行される際に渡される値です。

引数は入力(インプット)になります。自動販売機で例えるとお金になります。

MQL プログラミング基礎 関数 引数

引数にもint型やdouble型などの型を指定することができます。

戻り値

戻り値は関数の処理の結果を算出する値になります。

戻り値は自動販売機で例えると購入したジュースやお釣りになります。

MQL プログラミング基礎 関数 戻り値

戻り値はreturn文で記述します。

return文は、関数を実行した結果とともに関数を終了したいときに呼ばれる文のことです。

return文によって関数の呼び出し元にデータを渡すことを、値を返すと言います。

return文は次のように書きます。

return 戻り値;

また、戻り値をなしにしたいときは、

return ;

のように書きます。もしくは、最初から戻り値を必要としない場合は「void」と記述しましょう。

関数には「ユーザー定義関数」と「組み込み関数」がある

関数には、「ユーザー定義関数」と「組み込み関数」があります。

ユーザー定義関数とは自分で作るオリジナルな関数です。

プログラマーが変数を作るのと同じように自由に名前や処理を考えて作ることができる関数です。

組み込み関数は予め定義されている関数です。MQL言語で最初から用意してある関数です。iMAやOrderSendなどは、すべてMQL4があらかじめ用意している組み込み関数です。

実際にユーザー定義関数を作ってコンパイルして確認する

値幅(価格差)をpips単位に変換するユーザー定義関数を作ってみましょう。EAやインジケーターの中で何度も使う計算は、こうして関数にまとめておくと同じコードを繰り返し書かずに済みます。

//+------------------------------------------------------------------+
//|                                                     Function.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

//価格差(double)を受け取り、pips数(double)を返すユーザー定義関数
double PriceToPips(double price_diff)
  {
   double pip_size = Point;
   if(Digits == 3 || Digits == 5)//5桁/3桁ブローカーは1pip=10Point
     {
      pip_size = Point * 10;
     }
   return(price_diff / pip_size);//戻り値:pips数
  }

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

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

void OnTick()
  {
   double diff = Ask - Bid;//スプレッド(価格差)
   double pips = PriceToPips(diff);//作った関数を呼び出す

   Comment("現在のスプレッド: ", DoubleToString(pips, 1), "pips");
  }
//+------------------------------------------------------------------+
Copy

PriceToPips()が今回作ったユーザー定義関数です。引数として価格差(double型)を受け取り(入力)、ブローカーの桁数に応じてpips単位に変換し(処理)、その結果をreturnで返しています(出力)。OnTick()の中でPriceToPips(diff)と呼び出すだけで、この計算をいつでも使い回せます。

まとめ

今回は、関数について説明しました。

関数はプログラミングでは非常に重要なのでしっかりとどのように動くのかを理解しましょう。

ポイント

関数:データを受け取り、定められた独自の処理を実行し、その結果を返す命令のこと
関数の要素:入力(インプット)・処理・出力(アウトプット)
引数(ひきすう):関数が実際に実行される際に渡される値
戻り値:関数の処理の結果を算出する値
ユーザー定義関数:自分で作るオリジナルな関数
組み込み関数:予め定義されている関数

関連記事