組み込み関数と自作関数を理解する|MQL入門(7回目)

2018年11月10日

関数や数式

自動売買のプログラムを書くためにプログラムの基礎を学んできましたが、関数までしっかり理解できれば初級プログラマーとして月収35万円程度(フリーランスの場合)を稼ぐことができます。

私は、プログラマーを採用する側の経験もしているので単価の相場は概ね分かっています。

今回学ぶ関数は名前からは難しそうに感じますが、今までの内容に比べればシンプルなので気負わずに進めていきましょう。

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

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

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

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

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

ループ処理をマスターする|MQL入門(5回目)

配列を使いこなす|MQL入門(6回目)

関数とは何か?

関数とは「何らかの値を渡し」、「定められた処理を施し」、「処理結果を返す」ものです。

数学で考えれば「f(x) = 3x + 4」などで、例えばx=3であれば「3*3+4」で13が返ってきます。

 

プログラム上では上記のような「値を渡して答えを得る 」パターンだけではなく、処理をひとまとまりにしたものを全て関数と呼びます。

言葉だけでは分かりづらいので、実際にプログラムを書いて動きを見ていきましょう。

 

 

プログラムを書く

プログラムの準備

MetaEditorを開いて新しいプログラムを作成しましょう。

私は「Practice007.mq4/mq5」としていますが、好きな名称を付けていただいて大丈夫です。

 

関数の種類

関数には「組み込み関数」と「自作関数」の2種類がありますので、それぞれ説明していきます。

 

組み込み関数

組み込み関数とはMQLが独自に持っている関数で、呼び出すだけで利用することができます。

いくつか例を挙げてみましょう。

この中の、「ArraySize()、MathAbs()、MathMax()」が組み込み関数です。

組み込み関数実行結果

MathMaxを例に詳しく説明します。

MathMax()という関数に対して、200と500を渡しました。

関数MathMaxに渡す値を、プログラムの世界では「引数(ひきすう)」と呼びます。

その結果、大きいほうの500が返ってきました。

関数が返す値を、プログラムの世界では「戻り値(もどりち)または返り値(かえりち)」と呼びます。

「MathMaxの引数に200と500を渡して、戻り値は500だった。」というような言葉の使い方をします。

 

あまり難しく考える必要はなく、MQLには便利な関数がもとから用意されているので使ってしまおうということです。

MQLで使える関数は、「mql やりたいこと」で都度google検索すれば良いので、1つ1つ覚える必要はありません。

例えば「mql 配列サイズ」、「mql 絶対値」などで検索すれば直ぐに見つけることができます。

 

プログラムを書いていくうえで最も重要なのは、何でもかんでも記憶していることではなくて、やりたいことを解決する力を持つことです。

「今日からMQLは使えなくなったから違う言語で書いてね!」という恐ろしいことが起きたとしても、解決能力さえあればどうにでもなります。

 

自作関数

自作関数とは、その名の通り自分で作成した関数です。

自分で関数を作ってみると、どのような仕組みで動いているかがよくわかると思います。

基本的なパターン

関数の「int original_abs(int value) {」は新しい構文だと思うので少し説明します。

先頭のintはint型の結果を返すという意味で、具体的にはreturnのところで返す値が数値ならintと書きます。

「original_abs」が関数名です。

( )内が引数となります。

 

絶対値はゼロからの距離で考えるので、300なら300ですし、-50なら50が返ります。

問題なく結果が表示されました。

自作関数実行結果

 

引数を変数で渡す

このように変更しても、先ほどと同じ結果を得ることができます。

 

引数なし、戻り値なしの関数

数学の世界と違って、引数も戻り値もない関数を作成できます。

「先頭のvoidが戻り値なし」、「( )内が空なので引数なし」を表しています。

プログラムに記載した通り、startと表示されました。

引数無し戻り値無しの実行結果

 

実戦ではどのように使われるか

まず、自作関数をどのような場面で使うか説明します。

自作関数を使うパターン2つあります。

 

組み込み関数に存在しない処理を使いたい

例えば、「2つの値を掛けた値」から「2つの値を足した値」を「引いた値」を得たい場合を考えてみます。

そのようなマニアックな組み込み関数は無いので、自分で作ることになります。

 

処理を分かりやすく分割したい

実際に関数を使って分かりやすくしているパターンは、「EAの大枠と前処理の作成(第4回)」でご確認いただければと思います。

 

プログラムの心得

プログラムの世界では「同じロジックを2度書くな。」という風潮があります。

例えばFXの証拠金を判定する処理は、必ず必要になる処理なのでEAを新しく作るたびに同じロジックを書くことになってしまいます。

そうならないように、関数にして「共通関数まとめファイル」のようなものに保存しておきます。

別の記事で説明しますが、関数は同じファイル内だけではなく別のファイルにも保存しておいて自由に呼び出せますので、証拠金を判定する関数を一度書いてしまえばあとは呼び出すだけで利用可能になるのです。

 

まとめ

簡単にではありますが、今回は関数について学びました。

次回はMT4/MT5独自の処理を理解する|MQL入門(8回目)です。

次の記事まで学び終えれば、基本的なMQLの理解は出来たと思っていただいて問題ありません。

今回の記事のまとめ

  • 関数には「組み込み関数」と「自作関数」がある
  • 組み込み関数は呼び出すだけで利用できる
  • 関数に渡す値を引数(ひきすう)と呼ぶ
  • 関数が返す値を戻り値(もどりち)、または返り値(かえりち)と呼ぶ
  • プログラムを書いていくうえで最も重要なのは、記憶することではなく解決する力を持つこと
  • 引数も戻り値もない関数を作成できる

 

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