新型コロナの治療薬ができるまで感染スピードを抑えて大切な人を守りましょう。詳細はこちら

Trading Viewに無料で3つ以上のインジケータ(出来高プロファイル含む)を表示する方法

Trading View
この記事は約12分で読めます。

無料で扱いやすい株式チャートが見れる「Trading View」ですが、無料だと使えるインジケータが3つまでという制限があり、そのうえ出来高プロファイルも表示できません。。

でもそこは太っ腹の「Trading View」様。インジケータを自作すれば、移動平均線(短期・中期・長期・超長期)、ボリンジャーバンド、RSI、MACD、出来高プロファイル(固定期間)を同時に表示できる道を残してくださっています(感謝です<(__)>)。

「インジケータの自作なんてハードルが高そう…」と思うところですが大丈夫です。コピペだけで簡単にできます。

※この方法はPCでChromeブラウザを利用している方を対象としています。(スマホやタブレットの方ごめんなさい)

移動平均線、ボリンジャーバンド、出来高プロファイルをまとめて設定する

この方法がすべてです(これができればあとはMACD・RSI・出来高を通常通りに追加するだけです)。

移動平均線、ボリンジャーバンド、出来高プロファイルの3つのインジケーターを1つのインジケーターとして自作します。

まず「Trading View」を開きます。

画面の下にある「Pine エディタ」をクリックします。

以下のように「名前なしのスクリプト」というファイルが表示されます。

以下の2行を削除します。 ※上から4行目までは必要なので消さないでください。

study("マイスクリプト")
plot(close)

4行目の「//@Version=数字」の下に以下のPineソースコードを貼り付けます。

study("My_MA_BB_VP",
      overlay=true,
      precision       = 4,
      linktoseries    = true, 
      max_bars_back   = 1000, 
      max_lines_count = 500)

//移動平均線
day5 = input( 5 ,title="MA短期:算出期間" )
day25 = input( 25 ,title="MA中期:算出期間" )
day75 = input( 75 ,title="MA長期:算出期間" )
day200 = input( 200 ,title="MA超長期:算出期間" )
ma5 = sma(close, day5)
ma25 = sma(close, day25)
ma75 = sma(close, day75)
ma200 = sma(close, day200)
plot(ma5, title='短期移動平均線', color=color.blue, linewidth=1)
plot(ma25, title='中期移動平均線', color=color.yellow, linewidth=1)
plot(ma75, title='長期移動平均線', color=color.orange, linewidth=1)
plot(ma200, title='超長期移動平均線', color=color.purple, linewidth=1)

//ボリンジャーバンド
length = input( 20 ,title="BB:算出する期間" )
price = input( close ,title="BB:計算の対象" )
sma = sma ( price ,length ) //移動平均線
dev = stdev( price ,length ) //標準偏差
bb2h = sma + dev * 2
bb1h = sma + dev
bb1l = sma - dev
bb2l = sma - dev * 2
p2h = plot( bb2h, title='BB2σ+', color=color.new(color.gray, 39), linewidth=1)
plot( bb1h, title='BB1σ+', color=color.new(color.gray, 77), linewidth=1)
plot( sma, title='BBMA20', color=color.new(color.gray, 90), linewidth=1 )
plot( bb1l, title='BB1σ-', color=color.new(color.gray, 77), linewidth=1)
p2l = plot( bb2l, title='BB2σ-', color=color.new(color.gray, 39), linewidth=1)
fill(p2h, p2l, title='BB2背景', color=color.new(color.gray, 96))

//出来高プロファイル
//////////////////////////////////////////////////////
//// INPUTS
//////////////////////////////////////////////////////
vp_lookback   = input(defval = 260, 
                     title   = "VP:対象期間(日数) [10-1000]", 
                      type    = input.integer, 
                      minval  = 10, 
                      maxval  = 1000)
vp_max_bars   = input(defval = 90, 
                      title   = "VP:横棒グラフの数 [10-500]",
                      type    = input.integer, 
                      minval  = 10, 
                      maxval  = 500)
vp_bar_mult   = input(defval = 13, 
                      title   = "VP:横棒グラフの長さ [10-100]",
                      type    = input.integer, 
                      minval  = 10, 
                      maxval  = 100)
vp_bar_offset = input(defval = 13, 
                      title   = "VP:横棒グラフのオフセット [0-100]", 
                      type    = input.integer, 
                      minval  = 0, 
                      maxval  = 100)
vp_bar_width  = input(defval = 2, 
                      title   = "VP:横棒グラフの太さ [1-20]", 
                      type    = input.integer, 
                      minval  = 1, 
                      maxval  = 20)
// As suggested by @NXT2017
vp_delta_type = input(defval = "Both",
                      title   = "VP:Delta Type",
                      type    = input.string,
                      options = ['Both', 'Bullish', 'Bearish'])
vp_poc_show   = input(defval = true, 
                      title   = "VP:POC(最高値ライン)を表示", 
                      type    = input.bool)
vp_bar_color  = input(defval = color.new(color.yellow, 0) , 
                      title   = "VP:グラフの色", 
                      type    = input.color)
vp_poc_color  = input(defval = color.new(color.orange, 0), 
                      title   = "VP:POCの色", 
                      type    = input.color)
//////////////////////////////////////////////////////
//// VARIABLES
//////////////////////////////////////////////////////
float vp_Vmax = 0.0
int vp_VmaxId = 0
int vp_N_BARS = vp_max_bars
var int vp_first = time
vp_a_P = array.new_float((vp_N_BARS + 1), 0.0)
vp_a_V = array.new_float(vp_N_BARS, 0.0)
vp_a_D = array.new_float(vp_N_BARS, 0.0)
vp_a_W = array.new_int(vp_N_BARS, 0)
//////////////////////////////////////////////////////
//// CALCULATIONS
//////////////////////////////////////////////////////
float vp_HH = highest(high, vp_lookback)
float vp_LL = lowest(low, vp_lookback)
if barstate.islast
    float vp_HL = (vp_HH - vp_LL) / vp_N_BARS
    for j = 1 to (vp_N_BARS + 1)
        array.set(vp_a_P, (j-1), (vp_LL + vp_HL * j))
    for i = 0 to (vp_lookback - 1)
        int Dc = 0
        array.fill(vp_a_D, 0.0)
        for j = 0 to (vp_N_BARS - 1)
            float Pj = array.get(vp_a_P, j)
            if low[i] < Pj and high[i] > Pj and (vp_delta_type == "Bullish" ? 
             close[i] >= open[i] : (vp_delta_type == "Bearish" ? close[i] <= open[i] : true))
                float Dj = array.get(vp_a_D, j)
                float dDj = Dj + nz(volume[i])
                array.set(vp_a_D, j, dDj)
                Dc := Dc + 1
        for j = 0 to (vp_N_BARS - 1)
            float Vj = array.get(vp_a_V, j)
            float Dj = array.get(vp_a_D, j)
            float dVj = Vj + ((Dc > 0) ? (Dj / Dc) : 0.0)
            array.set(vp_a_V, j, dVj)
    vp_Vmax := array.max(vp_a_V)
    vp_VmaxId := array.indexof(vp_a_V, vp_Vmax)
    for j = 0 to (vp_N_BARS - 1)
        float Vj = array.get(vp_a_V, j)
        int Aj = round(vp_bar_mult * Vj / vp_Vmax)
        array.set(vp_a_W, j, Aj)
//////////////////////////////////////////////////////
//// PLOTING
//////////////////////////////////////////////////////
if barstate.isfirst
    vp_first := time
vp_change = change(time)
vp_x_loc = timenow + round(vp_change * vp_bar_offset)
f_setup_bar(n) =>
    x1 = ((vp_VmaxId == n) and vp_poc_show) ? max(time[vp_lookback], vp_first) : 
         (timenow + round(vp_change * (vp_bar_offset - array.get(vp_a_W, n))))
    ys = array.get(vp_a_P, n)
    line.new(x1     = x1, 
             y1     = ys, 
             x2     = vp_x_loc, 
             y2     = ys, 
             xloc   = xloc.bar_time, 
             extend = extend.none, 
             color  = (vp_VmaxId == n ? vp_poc_color : vp_bar_color), 
             style  = line.style_solid, 
             width  = vp_bar_width)
if barstate.islast
    for i = 0 to (vp_N_BARS - 1) by 1
        f_setup_bar(i)
//////////////////////////////////////////////////////
//// END
//////////////////////////////////////////////////////

貼り付け終わったら「保存」します。

スクリプト名を聞かれるので、適当な名前を付けて「保存」を押します。

「チャートに追加」をクリックすると、チャートに移動平均線、ボリンジャーバンド、出来高プロファイル(固定期間)が表示されます。

最後にエディターの右上にある「ー」を押してエディタを閉じます。

MACD、RSI、出来高インジケーターを表示する

あとは通常通り、内臓のインジケーターから「MACD」「RSI(相対力指数)」「Volume(出来高)」を追加します。

MACD

RSI

出来高

完成!

以上で移動平均線、ボリンジャーバンド、出来高プロファイル、MACD、RSI、出来高を無料でも同時に表示できるようになります。

今回Pineエディタからら追加した「移動平均線」「ボリンジャーバンド」「出来高プロファイル」は、内臓のインジケーターと同じように設定ボタンから期間や色を変更できます。お好みに合わせて色々いじってみて下さい。

最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました