Pine scriptのススメ

インジケーター色々作ってきたけど書ける人が増えたらもっといいものできるのではないかと思ったので興味の一つにでもしてもらえれば。
このnoteは最後まで無料で読めます。
役に立った、興味を持ったと思った時にでも購入なり投げ銭してもらえればがんばれます。

追記

10/5「 MACDを作ってみましょう」 を追加
10/5「せっかくなのでGCとDCにサインが出るようにしてみましょう」 を追加

Pine Scriptとは

Trading view上で動作する専用スクリプト。
自分はプログラミング経験はありませんが最初に手を出したのがこれでした。
「チャート上で読み取れるものはだいたいなんでもできる」
のではないかと思います。

現在のバージョンと過去のバージョン互換性

現在はバージョン4になっており、バージョン3以前と若干変更点があるため互換性がありません。
なお3以前のバージョンで書いたスクリプトはバージョン指定でそれぞれ対応したバージョンに記述しなおせば使えるようになります。(詳細後述)

早速だけれど始めてみましょう

無題

チャート下部にある「Pine エディタ」を開いてみましょう

無題

スクリプトの編集画面が出てきました。
新規に作成する場合、タイトルは「名前なしのスクリプト」がデフォルトになっていて、保存する際にインジケーターリストで表示する名前を決めます(インジケーター名とは別物)

//@version=4
study("マイスクリプト")
plot(close)

最初はこれがデフォルトのはずです。
上から順に
「//@version=4」…Pine scriptのバージョン。このnoteではversion4準拠で進めていきます。
「study("マイスクリプト")」…インジケーターの基本情報。
「plot(close)」…描画設定。
となります。さらに詳しく見てみます。

//@version=4
study("Danjo study indicator",overlay=true)
plot(close)

このように変更してみます。
「overlay=true」というのは、チャート画面に表示されるタイプで、これを「false」にした場合、別ウィンドウで表示されるようになります。(RSIなどの表示と同じ)
一度保存しましょう。

無題

ここでのスクリプト名は自分のインジケータリスト内の名前になるので、紛らわしくしたくなければそのままにしておくのが無難です。

無題

保存が完了するとタイトルが変わります。
ではチャートに表示してみましょう。

無題

「チャートに追加」ボタンでチャート上に表示されます。
(めっちゃみづらいですが表示されてます)

デフォルトのコードでは「終値を表示する」だけなので色やその他の設定は何もありません。
エラーなど問題なければ表示されますが、間違ったコードを書いていたり、読み出しできない数値などがある場合、インジケーターのタイトルの部分にエラーメッセージが表示されます。(保存した時にもエラーコードが出てきます)

移動平均線を表示してみましょう

EMAの表示はとても簡単です。
スクリプトにemaを計算する関数があるためそれを利用してみましょう。

//@version=4
study("Danjo study indicator",overlay=true)
ema(close,14)
plot(close)

関数の後は基本的に「( )」で括り、必要な引数を入力します。
今回は「終値をベースにした」「バー14本分」の「ema」を入力しました。
保存してみましょう。

無題

表示されません。
勿論です。
先ほどのemaの関数と関連してそれを描画させる設定を何も含んでいないので、表示されるのは「plot(close)」だけです。

ちょっと変えてみます。

//@version=4
study("Danjo study indicator",overlay=true)
ema1 = ema(close,14)
plot(ema1)

今回はemaの設定に「ema1」という名札を付け、「plot」でその名札を呼び出してチャートに描画させました。
すると、

無題

このように14EMAが表示されました。

ちょっとワンポイント加えて使えるようにしてみよう

しかしこれだけでは不満点もいくつかあります。
1、デフォルトカラーは青なので自分のチャートと親和性がない
2、設定画面から色は変更できるが移動平均線の期間を変更することができない

無題

↑このように設定画面から期間変更ができないため、表示されているのは14EMA固定になってしまっている。

ので、改良してみましょう。

まずはplot画面でできることを確認します

plot

plot()でできることは
1、どの設定を描画するのか(必須)
2、描画するもののタイトル(設定画面で表示されます)
3、色(条件によって変えることもできます:後述)
4、太さ
5、透明度
などです。他にもありますが基本的に使うのはこのくらいです。

先ほどのemaの設定を変えてみましょう

//@version=4
study("Danjo study indicator",overlay=true)
ema1 = ema(close,14)
plot(ema1,color=color.red,title="EMA1")

変更点は「色の追加」と「タイトルの設定」です。
これを保存します。

無題

emaの色が赤色に変わり、設定画面でも「EMA1」に変更されています。
このように、線などの描写に関する設定はこの「plot」で殆どを行います。

input

見栄えは少しよくなりましたが、まだ肝心の「数値を変えられない」という問題は解決していません。

なので、これも解決しましょう。
ここで使うのは「input()」です
これで使用できるのは「数値」および「true/false(1か0か)」という項目で、ここの内容は設定画面から変更することができます。

//@version=4
study("Danjo study indicator",overlay=true)
ema1length = input(14,"EMA1 期間")
ema1 = ema(close,ema1length)
plot(ema1,color=color.red,title="EMA1")

このように変更しました。

inputは後の計算の都合上、最初の方の行にまとめることを推奨します。
今回は「ema1length」という名札を付けた「デフォルト数値14」の「"EMA1期間"」という設定名を持つスクリプトの追加と、
それに伴って「ema1」の期間を14固定にしていたものを「ema1length」に置き換えました。

保存してみましょう。

無題

パラメータの設定ができるようになりました。
これを試しに設定から50に変更してみましょう。

無題

このように50emaに変更することができました。

ここで変更した数値は一度インジケーターを削除し再び追加した際にはデフォルトの「14」に戻っています。

三項式を使ってみましょう

先ほどまでの設定でemaは表示できるようになったと思います。
同様の方法でsma/wmaも表示することが可能です。

でもせっかくならトレンドによって色が変わるようなスタイリッシュなインジケーターが作りたいと思いませんか。

そんなときに役に立つのが三項式というものです。

//@version=4
study("Danjo study indicator",overlay=true)
ema1length = input(14,"EMA1 期間")
ema1 = ema(close,ema1length)
ema1color = close>ema1
plot(ema1,color=ema1color?color.green:color.red,title="EMA1")

「ema1color」という名前で簡単な条件を付けてみました。
これはclose(終値)がema1よりも大きい数値(上にいる)というものです。

ではこの条件をplotの色設定に盛り込んでみましょう。
「color=color.red」だったものを置き換えます。
「color=ema1color?color.green:color.red」
というものになりましたが、これに含まれる「?」と「:」がキーポイントです。

「A?B:C」という構成があった場合、
「Aの条件が成立する際はBで、そうでない場合はCを返す」という式です。
今回のemaの設定の場合は
「closeがema1よりも大きい場合は緑で、そうでない場合は赤色で表示する」というものになります。

無題

保存して表示してみましょう。
条件通りに終値がemaより上にいれば緑、下にいれば赤色に表示されます。

無題

この場合の色も設定可能です。条件成立時には色0、そうでない場合は色1ですね。

MACDを作ってみましょう

前回はEMAを出すことができるようになったので今回はそれを応用し移動平均線のインジケーターであるMACDを作ってみましょう。

//@version=4
study("Danjo study indicator",overlay=false)

今回はチャートとは別のウィンドウに表示するため、overlayはfalseにします。

そしてMACD作成に必要な情報を整理してみましょう。

1、短期移動平均線
2、長期移動平均線
3、MACDシグナル

上記三点が必要なものなので、まずはこの移動平均線をそれぞれ作成します

//@version=4
study("Danjo study indicator",overlay=false)
fastlen = input(12,"短期期間")
slowlen = input(26,"長期期間")
macdslen = input(9, "MACDシグナル期間")
fast = ema(close,fastlen)
slow = ema(close,slowlen)
fastp = plot(fast,color=color.lime)
slowp = plot(slow,color=color.red)

この段階では12,26のemaを表示しただけです。

そして、MACDは

MACD=短期移動平均-長期移動平均

で、シグナルラインは

シグナルライン=MACDのシグナル期間の指数移動平均線

になるので改変しましょう。

//@version=4
study("Danjo study indicator",overlay=false)
fastlen = input(12,"短期期間")
slowlen = input(26,"長期期間")
macdslen = input(9, "MACDシグナル期間")
fast = ema(close,fastlen)
slow = ema(close,slowlen)
macd = fast-slow
signal = ema(macd,macdslen)
//fastp = plot(fast,color=color.lime)
//slowp = plot(slow,color=color.red)
macdp = plot(macd,color=color.aqua)
signalp = plot(signal,color=color.white,style=plot.style_histogram)

MACDは「macd = fast-slow」
シグナルは「signal = ema(macd,macdslen)」、つまりemaであるmacdをさらにシグナル期間のemaにしていることになります。

無題

今回はシグナルを「sytle=plot.style_histogram」にてヒストグラムにし少し見やすくしました。

(コードは取り出せるように残したいけど無効にしたい場合、「//」で無効にできます。「//@version=x」は除く)

これでMACDの完成です。

なお、macdに関しては実は便利な関数があり、

「macd(終値,短期期間,長期期間,シグナル期間)」

でそれぞれ入力するだけで完成してしまう便利なものが既にあります。徒労。

せっかくなのでGCとDCにサインが出るようにしてみましょう

//@version=4
study("Danjo study indicator",overlay=false)
fastlen = input(12,"短期期間")
slowlen = input(26,"長期期間")
macdslen = input(9, "MACDシグナル期間")
fast = ema(close,fastlen)
slow = ema(close,slowlen)
macd = fast-slow
signal = ema(macd,macdslen)
gc = crossover(macd,signal)
dc = crossunder(macd,signal)
plotshape(gc,style=shape.triangleup,location=location.bottom,color=color.lime,size = size.tiny)
plotshape(dc,style=shape.triangledown,location=location.top,color=color.red,size = size.tiny)
//fastp = plot(fast,color=color.lime)
//slowp = plot(slow,color=color.red)
macdp = plot(macd,color=color.aqua)
signalp = plot(signal,color=color.white,style=plot.style_histogram)

追加したのは

「gc = crossover(macd,signal)」

「dc = crossunder(macd,signal)」
の2つです。
これはゴールデンクロスとデッドクロスの条件ですね。
「crossover(A,B)」は「AがBを上抜いたかどうか」で
「crossunder(A,B)」は逆に「AがBを下抜いたかどうか」
を判断します。

そして、plotshapeは図形を描画する関数です。
こちらはちょっと特殊で、線のように常に描画するものではなく条件によって出現するものでこれらには「〇〇 =」という名札を付けることができません(背景の色を変える「fill 関数」も同様)

先ほどのGCとDCの条件が満たされた時にplotshapeで指定された図形を描画するというものになります。

保存してみましょう。

無題

今回は描画位置を「location.bottom」と「location.top」でウィンドウの上端と下段に出るように設定しました。チャート画面に表示するならチャートの上下などにも表示できます。


おわり

今後も徐々に追加していきます。
修正箇所の発見や要望、どうしてもサポートしたくて仕方がない人は@lasthopelongerまでご連絡をお待ちしております。

ここから先は

0字

¥ 300

この記事が気に入ったらサポートをしてみませんか?