MQL5でEA開発 22 関数の作成
関数の作成
今回は関数を作成してみます。
これまで関数はPrint関数とOnTick関数だけを使ってきました。
Print関数は初めからMQL5で用意されていたものです。
OnTick関数はやりたい処理を自由に書くことができるので、関数を作成したと言えなくもありませんが、名前を変えることはできず、特殊な関数です。
今回は名前も含め、自由に関数を作ってみます。
関数は戻り値ありと戻り値なしの2つに分けることができます。
戻り値とは関数が行った処理をデータにしたものです。
関数を実行すると戻り値がデータとして出てきます。
これを「返す」と言います。
ちょっとうまく説明できませんが、サンプルコードを見て理解してもらえればと思います。
戻り値ありの関数
戻り値ありの関数の書式は
関数のデータ型 関数(引数1のデータ型 引数1, 引数2のデータ型 引数2, …)
{
関数のデータ型 戻り値=引数などを使った処理;
return(戻り値);
}
のようになります。
関数に引数を与えると引数を使って処理をし、その結果を戻り値として返します。
引数というのはPrint関数でいえば「()」の中に書き入れたものです。
関数は引数を材料に何らかの処理をしますが、引数なしで何らかの処理をすることもできます。
つまり、引数はなくても関数は作れます。
引数なしの場合は「()」の中に何も書かないか、「void」とだけ書きます。
「void」とは英語で「空っぽ」というような意味です。
MetaEditorには両方の例がありますが、シンプルイズベストで、ここでは省略して書かないことにします。
戻り値なしの関数
戻り値なしの関数の書式は
void 関数(引数1のデータ型 引数1, 引数2のデータ型 引数2, …)
{
引数などを使った処理;
}
のようになります。
引数がない場合、「void」と書くことができたように、戻り値がない場合、関数のデータ型のところには「void」と書きます。
ただし、こちらのほうは省略できません。
なお、Print関数やOnTick関数も戻り値なしの関数です。
戻り値なしの関数も引数なしで作ることができます。
さて、これだけでは抽象的すぎて分からないと思うので、サンプルコードを見ていきましょう。
サンプルコード
int CalcAdd(int a, int b)
{
int res=a+b;
return(res);
}
void OutputAdd(int a, int b)
{
Print(a+b);
}
void OnTick()
{
int i=CalcAdd(1,2);
Print(i);
OutputAdd(3,4);
}
先ず、戻り値ありの関数としてint型のCalcAdd関数を作りました。
引数に2つの整数を与えると、それを加算して、結果を戻り値として返します。
上の例では引数として1と2が与えられているので、それを加算すると3になります。
そして、3を戻り値として格納します。
最後に、関数は3を返します。
言い換えると、関数そのものが3というデータに変わります。
コード中に「3」と書いてそのままというわけにはいかないので、「3」を受け取る必要があります。
ここでは、変数「i」が「3」を受け取り、格納しています。
次に戻り値なしの関数としてOutputAdd関数を作りました。
引数に2つの整数を与えると、それを加算して、結果を出力しています。
上の例では引数として3と4が与えられているので、それを加算すると7になります。
そして、7を出力します。
この関数は戻り値を返さないので、それを受け取る必要はありません。
書式について、いくつか説明します。
引数を区切る「,」の後に半角スペース1個を置いています。
また、「{」と「}」には半角スペース2個のインデント、その他の処理には半角スペース3個のインデントを使っています。
これもMetaEditorのサンプルコードの例に従ったものです。
メッセージ
3
7
プログラミング言語の共通部分は終了
さて、これまで紹介してきた内容は他のプログラミング言語でも共通しているものです。
多少の違いはありますが、これまでの知識は他のプログラミング言語でも活用することができます。
逆に他のプログラミング言語を勉強したことのある人には単なる復習になったでしょう。
この共通部分は今回で終了です。
ようやく次回からMQL5ならではの内容になっていきます。
実際に自動売買やバックテストのできるEAを作っていくことになります。