それでは、PineScriptでコードを書く基本を説明します。

コードを書くエディタを開く
TradingView のチャートの下の部分に「Pineエディタ」というタブがあります。そこをクリックすると、その下の部分にPine Scriptコードを書いたり編集したりするエリアが出てきます。
下記の手順で操作してください。
1.「Pineエディタ」をクリック
2.「開く」をクリック
3.「新規インジケーター」をクリック

画像出典:TradingView
画像出典:TradingView

するとタブの下に下記のような表示が出てきます。
これは、デフォルトで書かれているテンプレートみたいなもので、「終り値をプロット(描画)する」というひとつのプログラムになっています。

1 // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
2 // © peacefulBook5158
3
4 //@version=5
5 indicator(“マイスクリプト”)
6 plot(close)

左側の数字は、単なる行番号です。プログラムの意味には関係がありません。
以後、行番号は基本的に省略して説明していきます。

// で始まる行はコンピュータは読まない
1行目に書いてある文章ですが、// で始まっている行は、あとで人が読むときにわかりやすくするための説明文です。プログラムの本文ではありません。コンピューターは//で始まる文は読みません。
人間がコードを読みやすくするためにコメントを入れるときに、その行の初めに // を入れます。
//の横には何を書いてもよいということです。
ここでは著作権情報が書かれているわけですが、かりに//で始まる最初の2行を消してもプログラム自体はちゃんと動きます。

ただし//@version=5 は大事です
ただし、その次の //@ で始まる行は消してはいけません。 
//@version=5
これは、その下に書かれているコードが、PineScriptのバージョン5で書かれたコードであるという宣言文です。この部分を消してしまうとエラーになってしまいます。
プログラム言語はPineScriptに限らず、時々バージョン更新が行われます。バージョン更新が行われると、コードの文法やコマンドが変わってしまうので、PineScriptの場合はコードの本文の前に、このようにPineScriptのバージョンの宣言をします。
以後、このブログではPine script バージョン5で説明をしていきます。また、各コメントの終わりにバージョンを明記することにします。

初期値のコードの意味
さて、いよいろプログラム文の本体の説明に入ります。
「新規インジケーター」をクリックしたら表示される初期値のコードの意味を、それぞれコードの行の下の行に // をつけて書いていきます。

(例文)
//@version=5
//このコードはバージョン5である
indicator(“マイスクリプト”)
//このコードは”マイスクリプト”というタイトルのインジケーターである
plot(close)
//終り値をプロット(描画)する
(例文終わり)

上記のコードは、チャートの下のエリアに終り値をプロット描画する、というプログラム文です。
まずはこのプログラムを実行してみましょう。
コードを書くエリアの上の右側に「チャートに追加」というアイコンがありますので、ここをクリックしてみます。

すると、チャートの下のエリアに終値がプロットされます。つまらないプログラムですが、先ほどの例文のコードが実行されたわけです。

それでは2行しかないコードですが、1行ずつ詳しく解説していきます。

indicator(“マイスクリプト”)は indicator()関数
コード本文の1行目は下記となっています。

indicator(“マイスクリプト”)

これは、このページに書かれているコードが「マイスクリプト」というタイトルであり、テクニカルインジケーターを描画するためのコードであることを宣言しています。例えば移動平均線をチャート上に引いたり、RSIやストキャスティクスなどのテクニカルインジケーターをチャートの下に表示するためのコードを書くときは、かならず indicator() 関数を先に書きます。
indicator(“私の特製テクニカルライン”) のようにタイトルは好きな名前をつけてかまいません。

テクニカルインジケーターには、移動平均線やボリンジャーバンドのようにチャートのローソク足にかぶせるようにプロットしていく線もあれば、RSI、MACD、ストキャスティクスのように、チャートの下にプロットしていく線もあります。

チャートのローソク足にかぶせて線をプロットする場合は、
indicator(“私のテクニカルライン”, overlay=true)

ローソク足にかぶせないで、チャートの下の部分に線をプロットする場合は、
indicator(“私のテクニカルライン”, overlay=false)

と書きます。
overlay=true に書き換えて先ほどのコードを「更新をチャートに反映」してましょう。「更新をチャートに反映」する前に、いまのプロットを先に消してから反映してから「更新をチャートに反映」します。

画像出典:TradingView

前のプロット消してから「更新をチャートに反映」をクリックすると下記のようになります。

画像出典:TradingView

ここで、関数という言葉を使いましたが、英語では function といいます。パターン化した処理や計算式を関数と言います。

関数と引数
関数のあとには必ずカッコがあって、そのなかに関数の設定条件が記載されます。上記のコード例は一部省略されている部分があって、省略しないで書くと下記のようになります。

indicator(title=”私のテクニカルライン”, overlay=false)
または
indicator(title=”私のテクニカルライン”, overlay=true)

この例の場合、カッコの中の
title=”私のテクニカルライン”
overlay=true
overlay=false
などの関数の設定条件をことを引数(ひきすう)とよびます。英語では argument といいます。argumentは日常英語では「議論」の意味ですが、プログラミングでは関数で使われる引数という意味です。
上記の例では、indicator()関数の中に、title=”私のテクニカルライン” と、overlay=trueの二つの引数が設定されている訳です。

プログラミングではいろんな関数を使っていきますが、
関数名(引数1=_____, 引数2=_____, 引数3=____)
のように関数を指定して、その関数の条件をカッコの中に書いていくのがパターンになります。
関数は自分で作ることもできますが、Pine scriptでコードを書く場合は普通は事前に組み込まれた関数を使うことが多いと思います。

title=”私のテクニカルライン” のように、人間の言葉をタイトルとして使ったりする場合は、言葉の部分を” ” でかこみます。title=’私のテクニカルライン’ でも大丈夫です。” ” でも ‘ ‘ でもどちらでもよいです。

plot(close) はplot()関数
2行目の下記コードを解説します。

plot(close)

これはplot()関数といって、カッコの中に引数として指定したことをチャート上にプロットする、という意味の関数です。
ここでは、plot(close) ですので、closeすなわち終値をチャート上にプロットする、という意味のコードです。このまま「更新をチャートに反映」を押してプログラムを実行すると、チャート上に各ローソク足の終値がプロット描画されて、ラインチャートのように表示されます。
indicator()関数で overlay=falseと指定しているとチャートの下のエリアに終値のラインチャートが表示されます。overlay=trueと指定されている場合は、ローソク足にかぶさるように終値のラインチャートが表示されるはずです。
カッコの中には引数としていろんな変数を入れることができます。
plot(open) //それぞれのローソク足の初値をプロット描画する
plot(close) // 終値をプロットする
plot(high) //最高値をプロットする
plot(low) //最安値をプロットする
plot(400) //チャート上に400ドル(または400円)の横一本の直線がプロットされる

計算した値をプロットする
単に終値や最安値をプロットしたり、数値をプロットするだけではなく、計算した数値をプロットすることもできます。
下記の記号を使うと四則計算をすることができます。
足し算 +
引き算 -
掛け算 *
割り算 /
また、式が長い場合は小学校でならった計算の順序で計算されていきます。下記が計算順序のきまりです。
1.基本は右から左に計算される。
2.ただし、掛け算と割り算が先に計算され、そのつぎに足し算と引き算が計算される。
3.掛け算、割り算、足し算、引き算がいくつも続いている式の場合は、先に掛け算と割り算を左から計算していき、つぎに足し算と引き算を左から計算していく。
4.( )があると、( )の中を先に計算する。( )の中が長い式の場合は ( )の中も左から計算していく。


例えば、
plot(low-30)
とすると、最安値より30下の値をプロットすることができます。
plot((open+close)/2)
とすると、初値と終値を足して2で割った値、すなわち「初値と終値の平均」をプロットします。

練習してみましょう

(基本形)
//@version=5
indicator(“テストプロット”, overlay=true)
//「テストプロット」という題名のインジケーターでロウソク足エリアにプロット
plot(close)
// 終値をプロットする

(練習)
上記の例文のplot(close) の部分を下記のコードを書き替えて「チャートに追加」してみてください。
plot(low) //最安値をプロットする
plot(low-30) //最安値より30低い値をプロットする
plot(low*0.9) //最安値の90%の値をプロットする
plot((open+close)/2) //初値と終値の平均値をプロットする
plot((open+high+low+close)/4) //初値、高値、安値、終値の平均値をプロットする
plot(440) //440の値をプロットする

プロットの線の色やスタイルを変える
plot(low)は plot(series=low) と書き換えることができます。
これは、plot()関数のなかのseriesという引数に low (安値) を設定している、という意味です。

plot() 関数には他にいくつも引数がり、プロットする線の色やスタイルを変えたりすることができます。たとえば、
plot(series=low, title=”Low”, color=color.red, linewidth=2, style=plot.style_stepline)
と書いてみましょう。
“Low”というタイトルのプロット線を、
赤い色で、
2ポイントの太線で、
ステップライン線で
プロット線を引くという指示になります。
この例の場合、plot()関数にseries, title, color, linewidth, styleの5つの引数を指定していることになります。seriesは必須の引数ですが、それ以外の引数は指定をしなければディフォルト(初期値)の値が自動的に指定されます。
引数を指定する際は = をつけてその右側に指定する値を書きます。
引数と引数の間は , カンマで区切ります。カンマの後に半角スペースを入れると見やすいですが、入れなくても構いません。
plot以外の関数も同様で、カッコの中に引数=指定値を、いくつも入れるときはカンマで区切って書きます。
関数(引数1=値, 引数2=値, 引数3=値)
のようになります。






コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です