見出し画像

Pine scriptの基本構文 覚書

超基本

一般的なプログラムがデータの取得・処理っていう制御を自作する必要があるのに対して、pine scriptは足更新のタイミングでフレームワークが処理を起動してくれて、データも渡してくれるので、scriptではデータを取得したりするコードが不要。処理も足更新のたびに行われる前提で記述する。


関数定義

1行で定義

<identifier>(<list of arguments>) => <expression>

f(x, y) => x + y

複数行に渡るもの

<identifier>(<list of arguments>) =>
   <Variable Declaration>
   ...
   <Variable Declaration>
   <expression> or <Variable Declaration>
 
geom_average(x, y) =>
   a = x*x
   b = y*y
   sqrt(a + b)

・インデント(4つのスペースまたは1つのタブ)が必要
・インデントは、それがグローバルスコープではなく関数本体の一部であることを示す
・最後の式が変数宣言の場合、その値は関数の結果になる
・結果のリストを返すことも可能

[res0, res1] = fun(open, close)
plot(res0)
plot(res1)


文法

・ステートメントは行の先頭から始める必要があります。改行した時は、ステートメントの次の行は、行頭に1つまたは(4の倍数以外の)複数のスペースを入れなければいけません

a = open +
     high +
         low +
            close

if文

var_declarationX = if condition
   var_decl_then0
   var_decl_then1
   …
   var_decl_thenN
   return_expression_then
else
   var_decl_else0
   var_decl_else1
   …
   var_decl_elseN
   return_expression_else

戻り値は型が一致している必要あり

for文

var_declarationX = for counter = from_num to to_num [by step_num]
   var_decl0
   var_decl1
   …
   continuebreakvar_declN
   return_expression
 
my_sma(price, length) =>
   sum = price
   for i = 1 to length-1
       sum := sum + price[i]
   sum / length
plot(my_sma(close,14))

continue - ループでのみ利用できるキーワードです。次のループ処理に移ります。
break - ループでのみ利用できるキーワードです。ループから抜けます。


特別なビルトイン関数

nz
この関数は引数をとり、NaNに等しい場合は0を返し、そうでない場合は引数の値を返します。
→seriesの一つ前を参照するような場合必須

na
これは1つの引数を持ち論理結果(bool値)を返します。この関数は、引数がNaNかどうかを調べることができます。

security
別のシンボル/時間足をリクエスト
通常は追加したチャートの時間足に基づいた計算になるが、別の時間足も持ってこれる

桁まるめ

round
→四捨五入
*pythonだと切り捨て

floor
→切り捨て

ceil
→切り上げ

input変数

入力変数は便利なTradingViewの機能。これらの変数は、入力オプションによって手動で設定できるため、変数の値を変更するためにスクリプトのソースコードを編集する必要がなくなる。

・数値

numericalVariable = input(title, type=integer/float,
    minval, maxval, step, defval, confirm)

title: 表示名
type: 型
step: ↑↓の矢印を押したときに変動する値

・真偽値

boolVariable = input(title, type=bool, defval, confirm)

type=boolにする

・バックテストしたい時間帯指定

sessionString = input(title, type=session, defval, confirm)

type=sessionにする
defval: "2200-0800"とか指定すればその時間だけ対象にすることが可能

・時間足指定

resolutionString = input(title, type=resolution, defval, confirm)

type=resolutionにする
*指定可能なのはプルダウンに指定できる値のみ("1","5","15"...)
*異なる時間足を持ってくるsecurityについては特別なビルトイン関数を参照

使用例:

timeFrame = input(title="Other time frame", type=resolution,
    defval="180")
symbolHigh = security(tickerid, timeFrame, high)
symbolLow  = security(tickerid, timeFrame, low)


・OHLCの指定

variableSeries = input(title, type=source, defval)

type=sourceにする

使用例:

sourceType = input(title="Source type", type=source, defval=close)
Symbol = security(tickerid, period, sourceType)


描画

テクニカルの表示

描画にはplotを使用する。

折れ線グラフ:指定不要
ヒストグラム:style=histogram
+印:style=cross
〇印:style=circles
塗りつぶし:style=area

色指定:color 色一覧
幅:linewidth
透明度:transp

メインチャート or サブチャート:overlay=true or false

背景着色

bgcolor(color, transp, offset, editable, title)

offset: 指定したバー数過去にずらして着色
color: naを指定すると無色

fill(hline1, hline2, color, transp, title, editable) 

hline: closeとか10とか数値








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