【トレーディングビュー】Pineスクリプトで単純移動平均線(SMA)を描いてみる
こんにちは、rakkosanです。
こちらの記事でPineスクリプトの新規作成時のテンプレについて解説しましたが、そこから一歩進めて単純移動平均線(SMA)を描写する方法を解説します。
SMAの値を求めよう
SMAの計算式
そもそも作ろうとするインジケーターの計算式を知らなければ始まりません。
今回作ろうとするSMAは、指定期間の終値の平均値です。
詳しい解説はこちらのコラムが参考になります↓
5SMAだったら直近5本の終値の平均です。
sma()関数
SMAの計算式を確認しましたが、Pineスクリプトではわざわざ自分で計算する必要はありません。
ta.sma()関数が用意されているので、パラメーターを設定するだけでSMAの値を求めることができます。
source に平均を求めたい値
length に期間を入力します。
例えば20SMAだと、期間20の終値の平均なので
となります。
決められた順番で記載する場合は引数(パラメーターの項目)を省略でき、
でも同じ意味になります。
smaは引数が2つしか無いので覚えやすいのですが、引数たくさんある関数だと混乱するので省略しないでいいかもしれません。
SMAをプロットしよう
SMAの値を求めましたのでこれをチャートに描写します。
前回解説したテンプレを元にしてみましょう。
おさらいすると、このスクリプトは
バージョン5で、サブエリアに、終値をプロット
しています。
SMAはメインエリアにプロットしたいのでoverlayをtrueにします。
※ちなみに()内でこまめに半角スペースを入れていますが、あっても無くても影響ありません。見やすくするためのものです。
次にplot(close)を修正します。
終値のところを先程のSMAにします。
これで改めてインジケーターをチャートに追加すると20SMAが表示されています。
Pineエディタのオートサジェスト
Pineエディタは非常に賢くて、「overlay」を入れてたいときには「o」を入力した時点で候補を表示してくれます。
「sma」と入力すれば候補を表示してくれます。
青時の関数名にマウスオーバーすると、関数の説明が表示されます。
このおかげでうろ覚えでも結構大丈夫です。
変数を使おう
よく言われるのは、変数とは「値を入れておく箱」です。
先程はplot()関数内に直接ta.sma()関数を入れましが、普通はSMAの値を変数に格納してからplot()関数で使います。
具体的に見ていきましょう。
変数を定義する
変数名を決めます。
Pineスクリプト上の制約で使えない文字や単語はありますが、
基本的には自由に決められます。
今回は変数名を「MA」としてSMAの値を格納します。
「変数名 = 値」と記載します。
右側の値を左側の変数(箱)に入れるイメージです。
変数MAにSMAの値を格納できました。
これで今後はMAと記載すればta.sma(close, 20)の値を使用することができます。
plot()関数で使う
さっそくplot()関数で使ってみます。
変数を使うと、スクリプトの構成が分かりやすくなります。
繰り返し同じ値を使う場合は記述が短く済み、修正も一箇所で済みますので、基本的には計算式等は一旦変数に格納します。
※「close」も変数の一つです。自分でわざわざ定義しなくても、よく使うものはビルトイン変数として色々なデータが用意されています。
SMAの期間も変数にできますので、ついでにしておきましょう。
変数名を「Len」とします。
※順番に注意。変数Lenを使うには、事前に定義しておく必要があります。
Pineスクリプトは上から順に処理するので「MA = ta.sma(close, Len)」より上に「Len = 20」がなくてはいけません。
パラメーターを設定できるようにしたい
今は下記のようなスクリプトになっています。
20SMAを表示することはできましたが、期間が20で固定されています。
インジケーターの設定画面を開くと、パラメーターのタブがありません。
※プロットのスタイルは何しなくても後から変えられます。
このあたりも親切設計です。
このままだとスクリプトを直接書き換えないと期間を変更できません。
期間を40にしたい時にいちいち「Len = 40」と直すのは面倒くさいですね。
input()関数を使う
こんな時はinput()関数を使えばパラメーター画面で数値を設定することができるようになります。
こうなります⇓
スクリプトはこうなりました⇓
変数Lenにinput()関数を格納し、パラメーター画面で入力した数値を変数として使えるようになりました。
パラメーターで20と入力 → 変数Lenに20が入る → MA = ta.sma(close , Len)のLenに20が入る → plot(MA)で20SMAが描写されるイメージです。
ちなみに defval はパラメーターの初期値です。
input()関数の設定項目は他にもありますが細かいことは省きます。
おわりに
これで期間指定可能なSMAを表示するインジケーターができました。
たった5行のスクリプトですがもう立派なインジケーターですね。
3つSMAを表示するインジケーターにしたければ、下記のように変数名を変えて3つプロットしてあげればすぐできます。
今回はイメージだけ掴んで欲しかったので細かいところは省きましたが、
それぞれの関数の使い方を勉強すればすぐ上達します。
線と線の間を色塗りしたり、条件によって背景色を変えたり自由自在です。
Pineスクリプトを学ぶならこれが入門書としておすすめの1冊です。
これからも一緒に学んで行きましょう。
移動平均線、ボリンジャーバンド、一目均衡表、平均足を1つにまとめたインジケーターを販売しています。
良ければこちらも御覧ください!