どんな記事
TradingViewのv4(バージョン4)がリリースされました。主な変更点はLine(直線)とLabel(文字や図形)が自由に設置できるようになったことです。これは、MT4に出来てTradingViewでは出来なかったことです。残る大きな違いは「自動売買ができるかどうか」くらいかもしれません。
自分の備忘録も兼ねて、少しまとめてみたいと思います!
Pineスクリプトv4の情報源
この記事を執筆している時点で、まだ日本では正式に公表されていません。現時点で確認できる情報源は英語のサイトがほとんどですね。
Pineスクリプトv4の変更点
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
のスタイルは以下で確認できます。(以下のスクショは一部です)
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
引用元: Pine Script v4 documentation: Essential features > Drawings
line
のスタイルは以下で確認できます。(以下のスクショは一部です)
文字列のシリーズに対応
これは今まで変数に格納できるのが数字(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
Var での変数の宣言
これはコードで比較するとわかりやすいと思います。
例えばv3で次のようなコードを書いたとします。
//@version=3
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のものの方が書きやすそうかなと思います。
一部のビルトイン変数名の変更
これは単純に変数名が変更になっただけです。v3のコードをv4で動かすときに一番影響がでるのはこの点かもしれません。
- カラーコード:
red
→color.red
color.new(color.red, 50)
でカラーコードの透明度を調整- inputタイプ:
integer
→input.integer
- plotスタイル:
histogram
→plot.style_histogram
- hlineスタイル:
dotted
→hline.style_dotted
- 曜日:
sunday
→dayofweek.sunday
- timeframe系:
period, isintraday
→timeframe.period, timeframe.isintraday
interval
→timeframe.multiplier
ticker, tickerid
→syminfo.ticker, syminfo.tickerid
n
→bar_index
変数の型を明示的に宣言
この変更はちょっとだけうれしかったりします。
これもコードを見るのが早いと思うのですが、次のように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
とできるようになるとちょっとスッキリします。
Pineスクリプトv4の活用例
[RS]ZigZag Percent Reversal - Forecast - patterns - labels
[RS]Volume Bars
[RS]Profiler
Trendlines - JD
Pivot Points Standard
開発を承っています
- Pineスクリプト(インジケーターやストラテジー)
- Google Apps Script
- Python
- MQL4
などの開発を承っています。とくに投資関連が得意です。過去の事例は「実績ページ(不定期更新)」でご確認ください。ご相談は「お問い合わせ」からお願いします。
- 記事をシェア