はじめに
ここではEAプログラミング未経験者や超初心者といった方向けに、関数について解説していきます。
プログラムを勉強すると必ず出てくるのが関数ですが、関数を覚えることでプログラム開発効率が格段に上がるので是非覚えていきましょう。
関数がわかってくると、いよいよ貴方も一人前のプログラマーです!
前回の記事
前回は、変数について学びました。まだの方は是非こちらもご確認下さい。
関数とは
関数とは、私生活の物で簡単に表すとテレビのリモコンです。
リモコンの電源をONにするだけで、テレビが見れます。そうです、リモコンの電源をONにすればテレビが見れるという事は誰もが皆わかっています。ただし、リモコンがどんな電波を飛ばしてそれをテレビがどう受け取ってテレビがつくのかという原理とか仕組みは殆どの人がよくわかっていませんよね。
要は関数も同じことで、完全に仕組みを理解していなくても既にある作られた物を正しく使ってあげれば正しい結果が起きるということです。
例えば入門記事で使っている「Comment(Ask);」ですが、これも実は関数です。この1文を書くだけで、MT4のチャート画面上にAskの情報を表示するという事ができました。実際Comment()関数を使わずに、自力でMT4のチャート画面上にAskの情報を表示してよ!って熟練のプログラマーに言ってもまずできません。実はとても高度な事が関数を使うことで、初心者でもいとも簡単にできてしまうんです。
では実生活でテレビのリモコンの電源をONにするという事を、関数を使ってプログラムで書くにはどうしたらいいのか・・・。簡単です!もう皆さんがやってきたようにComment(Ask)を書くだけです。
書くと表示されますし、書かないと表示されません。テレビと同じですね!
もうちょっと踏み込んだ例として、ではテレビの番組を別のものに変えたい場合どうするでしょうか。リモコンのONだけでは変わりませんよね。ええ、みんな知っています。別の番組を見るにはリモコンの別のボタンを押すだけですよね。
この別の番組(別の物)というのを、関数で表すと(Ask)の部分です。(Ask)は買値ですが、俺は売値を表示したいんだという場合は(Bid)と書けば売値が表示されます。( )内の部分を変えることで表示内容が変わりますよね。テレビのリモコンと似たような感じですね!
関数の種類
関数は主に3種類に分類できます。
- Comment(Ask)のような、処理を実行してくれるタイプ
- 変数=iHigh(NULL, 0, 2)のような、情報を渡して結果を返すタイプ
- 変数=OrdersTotal()のような、情報を渡さずに結果だけ返すタイプ
1.処理を実行してくれるタイプ
処理を実行してくれるタイプのComment()関数については上記で説明した通りで、書くだけで機能として実行してくれます。一番シンプルなタイプの関数です。
2.情報を渡して結果を返すタイプ
情報を渡して結果を返すようなタイプ「変数=iHigh(NULL, 0, 2) 等」は、関数としては一番オーソドックスな形です。
さっきのテレビの話で強引に結びつけるとしたら、録画機能です。
この番組録画しといての部分が・・・iHigh(NULL, 0, 2) ここ
録画されたHDDの部分が・・・変数 ここ
要は、これが見たいから録画しといて「iHigh(NULL, 0, 2)」とやっておくと「変数」にその番組が入っています。「変数」を見るといつでもその番組が見れます。
どうやって変数を見るのか?
Comment(変数) と書けば見れますよね!プログラムで実際に書いてみるとこうです。
//変数を作る(変数宣言)
double dHigh;
//変数に入れる
dHigh= iHigh(NULL, 0, 2);
//変数の中身を表示する
Comment(dHigh);
じゃあ、Comment(iHigh(NULL, 0, 2))と書いても同じなのでは?という風に思われた方は正解です。
//関数をそのまま表示する
Comment(iHigh(NULL, 0, 2));
前者も後者も同じ情報がチャート上に表示されます!
例で挙げたiHigh()関数のようなものがEAでよく使います。こちらから情報を渡すと、結果を教えてくれる(プログラム用語では結果が返ってくると言う)タイプです。
書き方は、前者のように変数を用意して結果を受け取ってあげる必要があります。
double dHigh;
dHigh = iHigh(NULL, 0, 2);
これは、iHigh()関数です。こちらから(NULL, 0, 2)の部分で、通貨・時間軸・バーの位置情報を渡す(プログラム用語ではこの情報を引数と言う)ことで、渡した情報に対しての価格の最高値を返してくれます。返してくれる情報(プログラム用語ではこの情報を戻り値と言う)はdHigh変数にセットされます。
引数について
Comment()関数では1つ(Ask)のみでしたが、iHigh()関数のように複数の情報 (NULL, 0, 2) をカンマ区切りで渡すパターンもあります。
※3つ渡してあげないとエラーになって結果が返ってきません
1番目のNULLの箇所は通貨の種類(USD,EUR等)で、2番目の0の箇所は時間軸です。3番目の2の箇所はバーの位置になります。 これは関数毎に引数の内容、順番、個数が決まっています。
この引数の内容や順番や個数については覚えておく必要は特にありません。忘れたり、わからなかったらインターネットで調べれば大体出てきます。
3.情報を渡さずに結果だけ返すタイプ
情報を渡さずに結果だけ返すタイプは、情報を渡して結果を返すタイプがわかっていればすぐに理解できます。要は、こちらから何も情報を渡す必要が無いという関数です。
EAでもよく使うもとのしては、 OrdersTotal()関数のようなものとなります。
書き方は、以下のようになります。結果が返ってくるので変数を用意して、結果を変数に入れるような書き方をしています。
int iTotal;
iTotal = OrdersTotal ();
OrdersTotal()関数は現在のポジション数をiTotal変数に返してくれます(プログラム用語ではこの情報を戻り値と言う)。既にポジションを1つ持っている場合は、 iTotalには1がセットされています。ポジションを持っていない場合、0がセットされています。
既にポジションを持っている時はエントリーしたくない場合等、チェックするのにとても便利な関数です。
最後に
関数は、プログラムする上でとても便利です。簡単なプログラムなら関数だけでほぼほぼ作ってしまうことができます。
そして、プログラムを作るうえで必要な事は、どのような機能の関数があるかをザックリと覚えることです。あと、こんな機能の関数はないかな?と調べることです。
20日移動平均線の値を取ってくる関数はあるかな?・・・あります!
10Lot分を買いエントリーする関数はあるかな?・・・あります!
ポジションを決済する関数はあるかな?・・・あります!
という感じに、重要な関数は沢山用意されています。まずは必要な動きの関数があるかを調べて、どういった書き方をするのか・引数は何か・戻り値は何かを確認します。
もし、なかったら自分で処理を作るような感じですが基本なんでもあると思っておいて大丈夫です。
また、応用になりますが自分で関数を作る事もできます。
次回、入門⑦では新規注文の関数を使って簡単なEAを作っていきたいと思います。
※プログラミング知識が無くてもEAが作れる!
※オンラインレッスン
コメント