TradingView:Pineスクリプトv4 がリリース! Line(直線)とLabel(文字や図形)が自由自在に!

TradingView:Pineスクリプトv4 がリリース! Line(直線)とLabel(文字や図形)が自由自在に!

TradingViewのv4(バージョン4)がリリースされました。主な変更点はLine(直線)とLabel(文字や図形)が自由に設置できるようになったことです。これは、MT4に出来てTradingViewでは出来なかったことです。残る大きな違いは「自動売買ができるかどうか」くらいかもしれません。

自分の備忘録も兼ねて、少しまとめてみたいと思います!

Pineスクリプトv4 がリリース!

  1. Pineスクリプトv4の情報源
  2. Pineスクリプトv4の変更点
    1. Label(文字や図形)の描画
    2. Line(直線)の描画
    3. 文字列のシリーズに対応
    4. Var での変数の宣言
    5. 一部のビルトイン変数名の変更
    6. 変数の型を明示的に宣言
  3. Pineスクリプトv4の活用例

1. Pineスクリプトv4の情報源

この記事を執筆している時点で、まだ日本では正式に公表されていません。現時点で確認できる情報源は英語のサイトがほとんどですね。

目次へ

2. Pineスクリプトv4の変更点

2―1. Label(文字や図形)の描画

v3でもplotshape()という文字や図形を描画する関数はありました。しかし、この関数では位置や図形の大きさに制限が多く、限られた用途でしか使うことが出来ませんでした。

今回、新たに導入されたlabelという関数は、MT4のObjectのような自由度があります。この関数を使うことで、例えば大きな時間軸のローソク足を描画したり、好きなところに文字を出力したりということができるようになります。

例えば次のようなことができるようです。

Creating drawings

文字を出力する
//@version=4
study("My Script", overlay=true)
dt = time - time[1]
if barstate.islast
    label.new(time + 3*dt, close, xloc=xloc.bar_time)
好きな位置に配置することもできる
//@version=4
study("My Script", overlay=true)
label.new(bar_index, high, style=label.style_none,
          text="x=" + tostring(bar_index) + "\ny=" + tostring(high))
引用元Pine Script v4 documentation: Essential features > Drawings

labelのスタイルは以下で確認できます。(以下のスクショは一部です)

様々なlabelスタイル

目次へ

2―2. Line(直線)の描画

v3では、plot()を使って間をnaで空けたり、角度を計算して直線を描くしかありませんでした。やはり自由度が少なく、何本も直線を引くような処理には向きませんでした。v4は、MT4のようにプログラムで自由に直線が引けるようになっています。

Linear Regression

//@version=4
study("Linear Regression", overlay=true)
src = input(close)
len = input(50)

calcSlope(src, len0) =>
    if not barstate.islast
        [float(na), float(na), float(na)]
    else
        sumX = 0.0
        sumY = 0.0
        sumXSqr = 0.0
        sumXY = 0.0
        for i = 0 to len - 1
            val = src[i]
            per = i + 1.0
            sumX := sumX + per
            sumY := sumY + val
            sumXSqr := sumXSqr + per * per
            sumXY := sumXY + val * per
        slope = (len * sumXY - sumX * sumY) / (len * sumXSqr - sumX * sumX)
        average = sumY / len
        intercept = average - slope * sumX / len + slope
        [slope, average, intercept]

[s, a, i] = calcSlope(src, len)

startPrice = i + s * (len - 1)
endPrice = i
var line baseLine = na
if na(baseLine)
    baseLine := line.new(bar_index - len + 1, startPrice, bar_index, endPrice, width=4, extend=extend.right)
else
    line.set_xy1(baseLine, bar_index - len + 1, startPrice)
    line.set_xy2(baseLine, bar_index, endPrice)
    na // To match the 'then' block type
引用元Pine Script v4 documentation: Essential features > Drawings

lineのスタイルは以下で確認できます。(以下のスクショは一部です)

様々なlineスタイル

目次へ

2―3. 文字列のシリーズに対応

これは今まで変数に格納できるのが数字(intやfloat)だけだったのに対して、文字列も格納できるようになったということですね。

具体的には、v4から次のようなコードが動くようになったようです。

Series String

We now support variables of a series string data type. Here is an example of using series strings in labels:

//@version=4
study("Series string", overlay = true)
draw_label(title) =>
    label.new(bar_index, high, text=title)
t = close >= open ? "green" : "red"
draw_label(t)
引用元TradingView Blog: Introducing Pine Script v4! > Series String

目次へ

2―4. Var での変数の宣言

これはコードで比較するとわかりやすいと思います。

例えばv3で次のようなコードを書いたとします。

//@version=4
study("My Script")
s = 0.0
s := close >= open ? s + 1 : s[1]
plot(s)

これが、v4ではVarを使って、次のように書くことができます。

//@version=4
study("My Script")
var s = 0.0
if close >= open
    s := s + 1
plot(s)

個人的には行数が少なくて済むのでv3での書き方が好きですが、条件分岐が複雑な場合はv4のものの方が書きやすそうかなと思います。

目次へ

2―5. 一部のビルトイン変数名の変更

これは単純に変数名が変更になっただけです。v3のコードをv4で動かすときに一番影響がでるのはこの点かもしれません。

  1. カラーコード:redcolor.red
  2. color.new(color.red, 50)でカラーコードの透明度を調整
  3. inputタイプ:integerinput.integer
  4. plotスタイル:histogramplot.style_histogram
  5. hlineスタイル:dottedhline.style_dotted
  6. 曜日:sundaydayofweek.sunday
  7. timeframe系:period, isintradaytimeframe.period, timeframe.isintraday
  8. intervaltimeframe.multiplier
  9. ticker, tickeridsyminfo.ticker, syminfo.tickerid
  10. nbar_index

目次へ

2―6. 変数の型を明示的に宣言

この変更はちょっとだけうれしかったりします。

これもコードを見るのが早いと思うのですが、次のようにfloatで変数の型を明示する書き方ができるようになりました。

//@version=4
study("NA", overlay=true)
float a = na
a := if close >= open
    high
else
    low
plot(a)

今まではa = 0.0とかa = closeとかで誤魔化して書いていたので、頭の値がいらない箇所をnaとできるようになるとちょっとスッキリします。

目次へ

3. Pineスクリプトv4の活用例

[RS]ZigZag Percent Reversal - Forecast - patterns - labels

[RS]ZigZag Percent Reversal - Forecast - patterns - labels

[RS]Volume Bars

[RS]Volume Bars

[RS]Profiler

[RS]Profiler

Trendlines - JD

Trendlines - JD

Pivot Points Standard

Pivot Points Standard

目次へ

Back to Top

abbamboo

タカハシ / 7年目の兼業トレーダー

このブログの目的は、「学習の備忘録」と「アウトプットして理解を深めること」。「トレードで稼ぐために学んだこと」を徹底的に公開していきます。

元・日本料理の板前、現・金融畑のウェブ屋さん
保有資格:証券外務員1種、認定テクニカルアナリスト

更新のお知らせは、各SNS や LINE@ で。LINE@ だと1対1でお話することもできます!

>> このブログと著者についての詳細
>> 使っているツールの紹介

Investment Tech Hack

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser. Investment Tech Hackではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。