ハウツー

From TradingView Wiki
Jump to: navigation, search
Language: English  • 日本語 • Русский


平均足チャートで実際のOHLC値を取得する

例えば、平均足チャート (もしくは練行足, カギ足, ラインブレイクなど) を開いて、そこにこちらのPineスクリプトを追加しているとします。

//@version=2
study("Visible OHLC", overlay=true)
c = close
plot(c)

変数 ‘c’ は平均足の終値であり、実際のOHLC価格とは異なることがわかります。これはビルトイン変数の ‘close’ は、常にチャート上の可視バー (またはローソク足) に対応する値だからです。

では現在のチャートタイプが非標準である場合、Pineスクリプトで実際のOHLC価格を取得するにはどうすればよいでしょうか? この答えとしては ‘security’ 関数を ‘tickerid’ 関数と組み合わせて利用するべきです。こちらに例を示します。

//@version=2
study("Real OHLC", overlay=true)
t = tickerid(syminfo.prefix, ticker)
realC = security(t, period, close)
plot(realC)

同様の方法で、他のOHLCの価格 (Open: 始値、High: 高値、low: 安値) を取得できます。

チャート上に売買矢印を描画する

plotshape で描写スタイル (style) に shape.arrowupshape.arrowdown を使うことができます。

study('Ex 1', overlay=true)
data = close >= open
plotshape(data, color=lime, style=shape.arrowup, text="Buy")
plotshape(not data, color=red, style=shape.arrowdown, text="Sell")

Buy sell chart1.png

plotchar で 任意のUnicode文字を使うことができます。

study('buy/sell arrows', overlay=true)
data = close >= open
plotchar(data, char='↓', color=lime, text="Buy")
plotchar(data, char='↑', location=location.belowbar, color=red, text="Sell")

Buy sell chart2.png

(変化する) 水平線の描画

Pineスクリプトには hline 関数があります。しかし現在は一定値の描画だけに制限されています。変化する水平線を描画する為の回避策はこちらです。

//@version=2
study("Horizontal line", overlay=true)
plot(close[10], trackprice=true, offset=-9999)
// trackprice=true plots horizontal line on close[10]
// offset=-9999 hides the plot
plot(close, color=#FFFFFFFF) // forces to show study

条件付で垂直線を描画

//@version=2
study("Vertical line", overlay=true, scale=scale.none)
// scale.none means do not resize the chart to fit this plot
// if the bar being evaluated is the last baron the chart (the most recent bar), then cond is true
cond = barstate.islast
// when cond is true, plot a histogram with a line with height value of 100,000,000,000,000,000,000.00 
// (10 to the power of 20)
// when cond is false, plot no numeric value (nothing is plotted)
// use the style of histogram, a vertical bar
plot(cond ? 10e20 : na, style = histogram)

前の値にアクセスする

//@version=3
//...
s = 0.0
s := nz(s[1]) // Accessing previous values
if (condition)
    s := s + 1

5日高値の取得

過去5日間の高値を検出し、現在のバーの上に、その高値の位置を示す星印を描画する。

Error creating thumbnail: File missing
Mark the highest bar within a 5 day lookback window range
//@version=3
study("Range Analysis", overlay=true)

// find which bar is 5 days away from the current time
milliseconds_in_5days = 1000 * 60 * 60 * 24 * 5 // millisecs * secs * min * hours * days
// plot(milliseconds_in_5days, title="ms in 5d", style=circles) //debug
// subtract timestamp of the bar being examined from the current time
// if value is less than 5 days ago, set variable "leftborder" as true
// this is set true at the bar being examined as the left border of the 5 day lookback window range
leftborder = (timenow - time) < milliseconds_in_5days  // true or na when false
// plot(leftborder ? 1 : na, title="bar within leftborder")  //debug
// plot(time, title="bartime") //debug
// plot(timenow - time, title="timenow minus bartime")  //debug

// treat the last bar (most recent bar) as the right edge of the lookback window range
rightborder = barstate.islast

// initialize variable "max" as na
max = na

// if bar being examined is not within the lookback window range (i.e. leftborder = false)
// change the variable "max" to be na
// else, test if value of "max" stored in the previous bar is na
// (bcuz first bar being examined in the lookback window will not have a previous value ), 
// if it is na, use the high of the current bar, 
// else, use the value of "max" stored in the previous bar
max := not leftborder ? na : na(max[1]) ? high : max[1]
// plot(max ? max : na, title="max b4 compare")  // debug

// compare high of current bar being examined with previous bar's high
// if curr bar high is higher than the max bar high in the lookback window range
if high > max // we have a new high
    max := high // change variable "max" to use current bar's high value
// else keep the previous value of max as the high bar within this lookback window range
// plot(max ? max : na, title="max after compare")  //debug

// if examining the last bar (newest bar, rightborder is true)
// set variable "val" to the previous value of series variable "max"
// else set to na so nothing is plotted
val = rightborder ? max[1] : na

// if val is true (a number, not na) 
// plot character
// since no character is specified, a "star" will be plotted
// location.absolute uses the value of val as the y axis value
// the x axis location will be the last bar (newest bar)
plotchar(val, size=size.normal, location=location.absolute)

// fill the background of the 5 day lookback window range with aqua color
bgcolor(leftborder and not rightborder ? aqua : na, transp=70)

バーの数を取得する

ロードされたバーの総数を取得します。バーの数によって計算期間を変更する場合に役立つかもしれません。

//@version=3
study("Bar Count", overlay=true, scale=scale.none)
plot(n + 1, style=histogram)

(日毎に)日中のバーを列挙する

//@version=3
study("My Script", overlay=true, scale=scale.none)

is_new_day() => 
    d=dayofweek
    na(d[1]) or d != d[1]

plot(barssince(is_new_day()), style=cross)

データセット全体の高値と安値を見つける

//@version=3
study("My Script")

biggest(series) =>
    max = 0.0
    max := nz(max[1], series)
    if series > max
        max := series
    max

smallest(series) =>
    min = 0.0
    min := nz(min[1], series)
    if series < min
        min := series
    min

plot(biggest(close), color=green)
plot(smallest(close), color=red)

直近の空で無い値を問い合わせる

下記のスクリプトを利用すると、データ系列のギャップを避ける事ができます。

//@version=3
study("My Script")
series = close >= open ? close : na
vw = valuewhen(not na(series), series, 0)
plot(series, style=linebr, color=red) // series has na values
plot(vw) // all na values are replaced with the last non-empty value

前の項目: ストラテジー, 次の項目: インジケーターのリペイント, メニューに戻る: Pineスクリプトチュートリアル