Pineスクリプト道場は、Pineスクリプト入門からコード作成までをサポートする初心者の方のための記事です。
Pineスクリプトをある程度使える方は「Pineスクリプトの学校」にて記事を書いておりますのでそちらをどうぞ。
本業が忙しかったことに加え、仮想通貨取引の新しいロジックの考案に時間を費やしていたこともあり最近更新がご無沙汰であった。しかし、更新していない間にもたくさんの人に訪問いただけたようで、あたらめてPineスクリプトの知識をつけたい方が多くいることを実感した。これからも頑張って更新していこうと思う。
そんなどうでもいい話はいいので、本題に入っていく。
1、繰り返し文とは?
そもそも繰り返し文とは、読んで字のごとく
処理の繰り返しを行う構文のこと
を意味する。実際の例で考えてみよう。
例えば、仮に1 ~ 5までの数字を足し合わせた値を変数に代入するプログラムを作成するためにはどうしたら良いか考えてみる。
答えはとても簡単である。今回は変数nを用意し、その変数に1 ~ 5までの数字を足し合わせた答えを格納するものとする。
そもそも変数って何って方は以下の記事を参照してほしい。
すると、以下のようになる。
n = 0 //変数nを用意し、0を代入する。
n := n + 1 //変数nに1を足して再代入する。(この時n=1)
n := n + 2 //変数nに1を足して再代入する。(この時n=3)
n := n + 3 //変数nに1を足して再代入する。(この時n=6)
n := n + 4 //変数nに1を足して再代入する。(この時n=10)
n := n + 5 //変数nに1を足して再代入する。(この時n=15)
しかし、本当にこれでいいのだろうか。今回は1~5までという前提があるから、これで何とかなるが、仮にこれが1~100までとかであればどうだろう。
まずプログラムを書き換える必要が出てくるし、同じ文を100回も書かないといけないし何より美しくない!
ということでこういう場合に繰り返し文が大活躍するのだ。先ほどと同じプログラムを繰り返し文で書き換えたものが以下になる。
n = 0 //変数nを用意し、0を代入する。
for i = 1 to 5
____n := n + i
たったこれだけである。さらに、これが1~100まで足し合わせたいなら、
n = 0 //変数nを用意し、0を代入する。
for i = 1 to 100
____n := n + i
とするだけである。簡単ですね!
では、この便利な繰り返し文について解説していく。
2、繰り返し文の書き方(基本)
繰り返し文は以下のようにforと=とtoで記述する。
for [カウンター変数] = [始める数] to [終わる数]
____繰り返したい処理
それでは、一つ一つ解説していく。
(1)for, = , to
繰り返し文を表す表現。このforと=とtoの中に必要な情報を入れることで繰り返し処理を実現する。
(2)カウンター変数
ここには変数名を入れる。変数名は規則に従えばなんでも良いが、多くの場合はcounterの頭文字のcや、i、nが変数名として使われることが多い。
繰り返し文の中に記述する処理では、このカウンター変数が1,2,3,4,5,6,7・・・・・と変化していく。
(3)始める数、終わる数
どの数から開始してどの数で終わるかを決める部分。先ほどの例のように1から5までであれば、1 to 5と入力すれば良い。開始する数から終わる数まで、カウンター変数内の数が1ずつ増加していく。
では、もっと噛み砕くために繰り返し処理の流れについて説明しよう。
3、繰り返し文の処理の流れ
【例】
n = 0
for i = 1 to 10
____n := n + i
上記のプログラムを例に説明する。
(1)n = 0
ここでは変数nを宣言し、0という値を代入している。
(2)for i = 1 to 10
ここから繰り返し処理が始まる。ここでは、「iは1から10まで1ずつ増加させてね」という指示を与えているのである。そして、この文が初めて処理された時点ではiに1が代入される。
(3)n := n + i
そして、nに0が、iに1が代入されている状態でこの処理を実施する。「nに、nの値(0)とiの値(1)を足したものを代入してね」と言っているので、この時点ではnには1が代入される。
そして、ここからが本領発揮。まだiが指定した数の10になっていないので、再び(2)に戻る。そしてここでiに1が足され今度はiが2になった状態で(3)の処理を行うのである。
つまり、2回目の処理の時はnに1が、iに2が入っている状態となっているため、n := n + iが実行されるとnには1+2=3が代入される。
これがiが10になるまで繰り返される。そして最終的にはnには55という数が入った状態でこの繰り返し処理を抜けるわけだ。
これで処理の流れがイメージできたと思う。
とはいえど、実際のプログラムがないと何かしっくりこないと思うので、実際に例を見てみよう!
4、実際に繰り返し処理を書いてみよう
(1)変数nに1〜10までの掛け算の結果を代入する繰り返し処理(難易度:☆)
まずは、変数nの値(今回は1とする)に1〜10まで全て掛け算した結果を代入する処理を記述してみよう。
では、実際にどのようなプログラムになるか考えてみよう。
先ほどの例の足し算が掛け算になっただけなので簡単である。
【答え】
n = 1
for i = 1 to 10
____n := n * i
(2)変数nに2を10回掛けた数を格納する(難易度:☆☆)
次は変数nの値(今回は1とする)に2を10回掛けた数を格納してみよう。
【答え】
n = 1
for i = 1 to 10
____n := n * 2
一部の人は、「どうやってカウンター変数を処理に使用するのだろうか」と迷ったかもしれないが、実はカウンター変数を必ず処理の中に入れる必要はないのである。
ここでは、単純にn := n * 2という処理を10回繰り返せば良いのでカウンター変数iは処理中に不要である。
若干ひっかけ問題なので難易度は☆☆にしている。
(3)変数nに1〜10までの数の偶数のみを足した数を格納する(難易度:☆☆☆)
最後は少しひねった問題を。1〜10までの数で偶数のみを足し合わせる。
【答え】
n = 0
for i = 1 to 10
____if i%2 == 0
________n := n + i
ここで、前回の記事で解説した条件分岐if文が登場する。
%は、ある数で割った時の余りを返してくれる記号で、4%2なら4を2で割った余り、つまり0を返してくれる。今回は、iを2で割ってその時の余りが0であればiは偶数ということになる。
つまり、その時に足し算を行えば良いので、i%2 == 0 の時だけ実施する条件分岐を記述すれば良いのだ。
5、繰り返し文の発展した使用法
これまでで、繰り返し文の基本的な使用方法について解説したが、ここから少し発展した使用法について解説する。
(1)数を減らしていく使い方
実は、数を減らしていくことも可能である。
例えば、
for i = 10 to 0
と記述すれば、iは10から0まで1ずつ減少していく。
(2)増加(減少)させる数を指定する使い方
ここまでは、カウンター変数の中身は1ずつ増加すると言ってきたが実は増加もしくは減少させる数を指定することもできる。そのようにするためには、「by 増加(減少)させる数」で指定をする。
for i = 1 to 10 by 2
こうすることで、カウンター変数iは1,3,5,7,9と2ずつ増加していく。
ちなみに、数を減少させる際もマイナスの符号は必要ない。その前の記述が10 to 1 などと記述されていれば勝手に減少方向であると認識されるためである。
これを使えば、先ほどの4項(3)のプログラム「変数nに1〜10までの数の偶数のみを足した数を格納する(難易度:☆☆☆)」も簡単に記述できる。
【改良前】
n = 0
for i = 1 to 10
____if i%2 == 0
________n := n + i
【改良後】
n = 0
for i = 0 to 10 by 2
____n := n + i
改良前ではi = 1 to 10となっているが、改良後はi = 0 to 10となっている。
これは、改良前のようにiを1から始めると、1,3,5,7,9が足し合わされてしまうためiは0から始めるようにする必要があるためだ。
6、まとめ
1、繰り返し文とは処理の繰り返しを行う構文のこと
2、繰り返し文はfor [カウンター変数] = [始める数] to [終わる数]と記述を行う
3、カウンター変数は数を減少させていくことも可能
4、カウンター変数は増加または減少させる数を指定できる
今回はここまで。次回はオリジナル関数の定義について解説を行っていく。
それではまた!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。