no.1 PineScript超入門プログラミング
今回はみんな大好きSMAを自作していきます。
面白いと思ったら高評価、チャンネル登録お願いします。
プログラムはどのように実行されるか
前回のプログラムでは”Hello Pine”という名前で
終値(close)を使ってグラフを描く(plot)インジケーターを作成しました。
indicator("HelloPine", overlay = true)
plot(close)
何となく察した方がいるかもしれませんが
プログラムはローソクが更新されるたびに実行されます
なので、前回のプログラムは新しいローソク足が出てきたら
ローソク足の終値と前回の終値を線で結ぶプログラムということになります。
ローソクが出てくるたびに実行されるので、結んだ線がグラフになる、というイメージですね。
SMAの要件
さてSMA(移動平均線)ですが
プログラムで実装するにあたって計算方法を知る必要があります。
「SMA 計算式」などでググってみましょう。
SMAは一定期間の価格の平均を結んだ線であり
計算方法は 「n期間の終値を合計し、nで割る」とありました
SMAを図解すると
SMAの期間を「10」とした場合
ローソクの1本目~10本目の終値の合計を10で割るとSMAの数値が求まります
答えは146.378でチャートに印を付けるとこんな感じ
これを前回同様にローソクが更新されるたび計算していけば・・・
SMAになるわけですね!
計算式をプログラムで
計算式は分かりました
SMAの期間を10とした場合、「10本の終値の合計を10で割る」ですね
まず 「10本の終値の合計」を考えます
最新のローソク足の終値であれば
前回使用した close がありますね
close
過去の終値
しかし計算にはN本前の終値が必要になります
N本前の終値をプログラムで取得したい場合
以下のように記述します。
close[N]
現在の終値は close 1本前の終値は close[1] 2本前の終値は close[2] となります
期間が10のSMAの場合
close + close[1] + close[2] + close[3] + close[4] + close[5] + close[6] + close[7] + close[8] + close[9]
とても力業ですがこれで「10本の終値の合計」が求まります
あとは10で割れば良いわけですね。
PineScriptでの割り算は "/" を使用し
6を3で割りたい場合こう書きます
6 / 3
ここで注意しないといけないのが
PineScriptでは掛け算、割り算の方が足し算より先に行われる点です。
たとえば 1+4 を 2 で割りたい場合
1 + 4 / 2
と書いてしまうと先に割り算が実行されるので
1 + 2
こうなってしまい、答えが3になってしまいます
これを回避するためには 1 + 4 を優先させるようにプログラムを書き換える必要があります。
(1 + 4) / 2
このように()カッコで囲うことで掛け算、割り算より先に実行されるので
5 / 2
となり、求めたい答えを計算させることが出来ます。
つまり
close + close[1] + close[2]….
を10で割りたい場合()で囲えばいいわけですね。
(横長になりすみません…
(close + close[1] + close[2] + close[3] + close[4] + close[5] + close[6] + close[7] + close[8] + close[9]) / 10
完成
あとは前回同様 plot() に計算を渡せばSMAをチャートに引いてくれます
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CXX206
//@version=5
indicator("HelloPine", overlay = true)
plot((close + close[1] + close[2] + close[3] + close[4] + close[5] + close[6] + close[7] + close[8] + close[9]) / 10)
お疲れ様です。
今回はここまでです
SMAの期間を延ばしたい場合
計算式がめちゃ長くなるのか!?
と思った方、大丈夫です。
実はもっと簡単にSMAは実装できるのですが
それはまた後の話・・・