Pineスクリプト道場は、Pineスクリプト入門からコード作成までをサポートする初心者の方のための記事です。
Pineスクリプトをある程度使える方は「Pineスクリプトの学校」にて記事を書いておりますのでそちらをどうぞ。
では、今回は自作の関数を作ってみよう。ここまで習得すれば、いよいよ本格的にPineスクリプトが書けるようになるぞ!では早速!
1、関数とは?
そもそも関数ってなに?という方のために簡単に説明する。理解している方は飛ばしてもらって構わない。
関数とはユーザーの入力を変換して出力してくれる変換装置のこと
である。
例えば、手元にあるりんごから果汁100%のリンゴジュースを作りたいとき、
りんごを用意してジューサーにかけることでジュースを作ることができる。
この場合の「ジューサー」が関数にあたる。
「ジューサー」は「りんご」という入力を「りんごジュース」に変換してくれている。
このように、とある入力を希望の出力に変換してくれるものが関数だ。
また、関数に入力する値を「引数(ひきすう)」といい処理の結果、関数から出力される値を「戻り値(もどりち)」という。
2、なぜ関数を使用するのか
では、なぜプログラムにおいて関数を使用するのだろうか。簡単に言えば、
プログラムを簡潔に記述するため
である。
引き続き先ほどのアップルジュースの例で説明する。例えば以下のようなレシピがあったとする。
1、りんごの皮をむく
2、皮を剥いたりんごをざく切りにする
3、ジューサーにかける
4、りんごジュースを絞り出す
5、パイナップルの皮をむく
6、パイナップルの身をざく切りにする
7、ジューサーにかける
8、パイナップルジュースを絞り出す
9、その二つを混ぜる
このレシピで注目すべきは、「1〜4、5〜8」の処理が同じであるところだ。
つまり、果物が違うだけで同じ処理を実施しているのにわざわざ二回も手順を解説しているのがセンスがない。
ならばこうしたらどうだろうか。
【ジュースの作り方】
1、果物の皮をむく
2、皮を剥いた果物をざく切りにする
3、ジューサーにかける
4、ジュースを絞り出す
【フルーツジュースのレシピ】
1、【ジュースの作り方】にそって、りんごとパイナップルをジュースにする
2、その二つを混ぜる
こちらの方が簡潔に処理を記述できることがわかる。
このように、一連の流れをひとまとめに記述して関数として定義すれば、後から使用する際に記述が楽になるのである。
こういった場面で関数が活躍するのだ。
3、ビルトイン関数とは?
次にPineスクリプトで登場するビルトイン関数について説明する。
ビルトイン(built-in)とは「組み込みの」という意味であるため、ビルトイン関数は組み込みの関数という意味になる。
要するに、
ビルトイン関数とは、Pineスクリプトに初めから用意されている関数のこと
だ。どんなビルトイン関数が存在するのかについてはPineスクリプトの公式リファレンスを参照してほしい。一部を以下に紹介する。
ビルトイン関数名 | 役割 |
abs(x) | 入力xの絶対値を出力 |
floor(x) | 入力xの値を小数点以下切り捨てて出力 |
highest(x, y) | 入力xのy期間内での最高値を出力 |
stdev(x, y) | 入力xのy期間での標準偏差を出力 |
他にも便利な関数が存在するので、リファレンスをあらかじめ読み込んでおくといいだろう。
4、オリジナルの関数を作る方法
先ほどPineスクリプトにあらかじめ用意されているビルトイン関数を紹介した。しかし、ここに用意されていない関数などは使用することができないとなると相当不便である。
そこで、
Pineスクリプトでは「アロー関数式」という記述方法でオリジナルの関数を作ることが可能
となっている。
では記述方法について以下に解説する。
関数名(引数1、引数2、引数3・・・) =>
____処理
____戻り値
このように、関数名、引数の後に 「=>」を記述することでオリジナルの関数を作成できる。このように、関数を作ることを「関数を定義する」という。
ちなみに、アローとは矢のことを意味し「=>」が矢のように見えることからアロー関数と呼ばれている。
それぞれについて詳しく説明していく。
(1)関数名
オリジナル関数の名前をここに記入する。基本的に関数名はどんな働きをする関数なのか分かるように&長過ぎない名前が良い。どんな名前でも良いがビルトイン関数と重複する名前(先ほどのabs()やfloor()など)や数字から始まる名前などは使えないので注意する。
(2)引数
「ひきすう」と読む。これは関数に与える入力を示す。
定義する関数によって、与える情報の数が異なるため必要なだけ引数を用意する。
先ほどジューサーの例を挙げたが、例えばりんごとパイナップルを混合したジュースが作りたい場合、りんごの他にパイナップルもジューサーにかける必要がある。
この場合、入力が二つ必要となるので引数は二つ必要というわけだ。
このように、関数が必要とする情報の数だけ引数を用意する。
(3)処理
与えられた引数をもとに行う処理を記述する。
ジューサーの例であれば、果物を粉砕して果汁だけを遠心分離する処理が必要だ。
この処理をプログラムとして書いていく場所がここだ。
(4)戻り値
「もどりち」と読む。これは、関数を実行した後に出力したい値を記述する。
ジューサーの例であれば、ジュースが戻り値となる。
5、実際に関数を定義してみる!
では、ジューサーの例を挙げただけではふんわりしていると思うので、次に実際に関数を定義してみよう。
今回定義する関数は以下の働きを行うものとする。
与えられた2つの数のうち、大きい数を返す関数「large」を定義する。
関数の名前は、largeと名付けることにする。
イメージとしては、
large(2,3) → 3
large(31,21) → 31
のような感じで、与えられた引数のうち大きな数を出力する関数を定義する。
コードは以下のようになった。(これ以外にも正解はあります)
まずx、yという2つの変数を用意。
次に、二つの引数のうち大きい数を収納するための変数lを用意。
そして、条件分岐分(if文)にてxがy以上であれば変数lにxを代入。
そうでなければ変数lにyの値を代入し、最後に戻り値としてlを記述する。
といった流れで処理を行えば、希望の関数を定義できる。
ここで出てきた「変数」や「条件分岐」について理解ができない場合は以下の記事で復習してほしい。
(おまけ)戻り値の記述は省略可能
今回のプログラムでは戻り値をしっかりと記述したが実は戻り値の記述は省略できる。
戻り値を省略することで簡潔にプログラム書けるので、慣れてきたら戻り値を省略して記述すると良い。
【戻り値省略前】
【戻り値省略後】
戻り値を省略した場合、最後に登場した変数が戻り値となるようだ。
そのため、上記の戻り値を省略したプログラムであれば数値によってx、yのいずれかの値が処理されるのでその値が戻り値となる。
6、まとめ
・関数とはユーザーの入力を変換して出力してくれる変換装置のこと
・関数はプログラムを簡潔に記述するために使用する
・ビルトイン関数とはPineスクリプトに初めから用意されている関数のこと
・Pineスクリプトでは「アロー関数式」という記述方法でオリジナルの関数を作ることが可能
これで、便利なオリジナル関数の定義ができるようになった。
次回は変数を宣言する際の「var」について、Pineスクリプトのコード処理の流れを基にして解説していく。
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。