11.関数について

一つずつ理解を進めていくために、誤解を恐れずひとことで言ってしまうと、関数は便利なツールのようなものです。

値を取得したり、計算したり…、MQL4/5で使用できる関数は、実に様々です。

EAを作成する上で、複雑な処理を全て自分で書く必要はなく、関数がやってくれるものは関数に任せてしまうのがベターです。
関数は、いつでもどこでもだれでも使えるように、独立した存在です。

私たちは、使いたい時にその関数を呼び出すだけで良いです。
私たちが求めるのは、その関数が「何をしてくれるか」という事だけで、関数の中で行われている処理の全てを知る必要は殆どありません。

関数は以下のようなタイプに分かれています。

  • 呼び出す際にデータを渡す必要がある関数
  • 呼び出す際にデータを渡す必要がない関数
  • 呼び出し元に結果を返す関数
  • 呼び出し元に結果を返さない関数

呼び出す際にデータを渡す必要がある/ない関数

呼び出し元は、私たちが書くEAのソースコードです。
関数を使う際、その関数に処理対象となるデータを渡すことがあります。
関数に渡すデータの事を「引数(ひきすう)」といいます。

ループの章では、配列の要素数を取得するために「ArraySize」という関数を使いましたが、これはまさに引数が必要な関数です。
ArraySize関数は、引数として渡された配列データを処理対象として、その配列の要素数を調べます。

引数がどんなデータである必要があるかは、関数側で定義しています。
ArraySize関数であれば、”配列データ”を”1つ”渡すように定義されています。但しその配列のデータ型までは指定していません(intでもdoubleでも何でもOK)。

大きい数値がどちらなのかを調べる「MathMax」という関数があります。
この関数は、”double型のデータ”を”2つ”渡すように定義されています。

定義されている通りのデータを渡さないと関数は正しい処理が行えませんので、コンパイルの段階でエラーとなります。

逆に、引数が必要が無い関数もあります。
現在時刻を調べる「Hour」という関数があります。
この関数は、呼び出し元からは何も受け取りません。

呼び出し元に結果を返す/返さない関数

結果を返すというのは、演算子が計算結果を返してくるように、関数の処理結果としてデータを返してくるということです。
呼び出した側では、関数の処理結果を変数に受け取ったり、条件式に入れたりすることができます。
関数が返してくるデータの事を「戻り値」や「返り値」といいます(ここでは戻り値に統一)。

戻り値のデータ型は関数側で定義されています。
戻り値を変数に受け取る場合は、その関数がどのデータ型の値を返してくるかを知る必要があります。

前述のArraySize関数は、引数として渡した配列の要素数をint値で返してきます。
MathMax関数は、引数として渡した2つのdouble値のうち、大きい方の値を返してきます。
Hour関数は、現在時刻をint値で返してきます。

逆に、結果を返さない関数も存在します。
Hello worldプログラムから使用しているPrint処理がこれにあたります。
Print関数は、引数として文字列を受け取りそれを表示しますが、呼び出し元に対して戻り値を返しません。

関数の呼び出し方

関数に引数が必要ない場合は、

関数名()

関数が引数を取る場合は、

関数名(引数)

関数が複数の引数を取る場合は、引数をカンマ区切りにして、

関数名(引数,引数)

関数の戻り値を受け取る場合は、

変数=関数名()

といった書き方になります。

よく使う関数

最低限覚えておくと良い関数をまとめます。

現在のチャートに関する情報を取得する関数

関数名 Symbol
内容 現在のチャートの通貨ペア名を返します。
引数 なし
戻り値のデータ型 string
関数名 Period
内容 現在のチャートのタイムフレームを返します。
引数 なし
戻り値のデータ型 int
関数名 Point
内容 現在のチャートの通貨ペアの最少単位を返します。
例:ドル円など小数点以下第3位までの通貨ペアであれば「0.001」
引数 なし
戻り値のデータ型 double
関数名 Digits
内容 現在のチャートの通貨ペアの小数点以下桁数を返します。
例:ドル円など小数点以下第3位までの通貨ペアであれば「3」
引数 なし
戻り値のデータ型 int

数学的な処理を行う関数

関数名 NormalizeDouble
内容 浮動小数点数を指定桁数で丸めます(指定桁以下を四捨五入)。
引数 第1引数:double 丸める値
第2引数:int 指定桁数
戻り値のデータ型 double
関数名 MathMax
内容 引数に与えられた2つの数値のうち大きい方を返します。
引数 第1引数:double 1つ目の値
第2引数:double 2つ目の値
戻り値のデータ型 double
関数名 MathMin
内容 引数に与えられた2つの数値のうち小さい方を返します。
引数 第1引数:double 1つ目の値
第2引数:double 2つ目の値
戻り値のデータ型 double
関数名 MathAbs
内容 引数に与えられた数値の絶対値を返します。
引数 第1引数:double 値
戻り値のデータ型 int

その他

関数名 Print
内容 エキスパートタブのコンソールに文字を表示します。
引数 カンマ区切りで64個まで
戻り値のデータ型 なし
関数名 Comment
内容 チャート左上に文字を表示します。
引数 カンマ区切りで64個まで
戻り値のデータ型 なし

上記はEAの中でよく使う関数の一部です。
また、インジケータが表すデータの取得や注文処理、決済処理なども全て関数を使って行います。

次回は、よりEAっぽい雰囲気の関数について解説します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする