見出し画像

Pine Script™ (v5) の覚書 - 作ってみる:MTF RSIを表示するインジケータの作成 (2)

前回までの話


MTF RSIをプロットするためのパーツ

上位のtimeframeを取得する関数

上位のtimeframeを取得する関数を定義し、1〜3段階上のtimeframeを変数に設定する。

higher_tf(tf=timeframe.period)=>
    _s=timeframe.in_seconds(tf)
    timeframe.in_seconds("1")>_s?"1":
      timeframe.in_seconds("5")>_s?"5":
      timeframe.in_seconds("15")>_s?"15":
      timeframe.in_seconds("60")>_s?"60":
      timeframe.in_seconds("240")>_s?"240":
      timeframe.in_seconds("D")>_s?"D":
      timeframe.in_seconds("W")>_s?"W":
      timeframe.in_seconds("M")>_s?"M":
      timeframe.in_seconds("3M")>_s?"3M":
      timeframe.in_seconds("12M")>_s?"12M":na

var htf1=higher_tf() // 1段上のtimeframe
var htf2=higher_tf(htf1) // 2段上
var htf3=higher_tf(htf2) // 3段上

RSIの期間を定義

RSIの期間を定義する変数を設定する。

rs=input.int(7,'短期')
rm=input.int(14,'中期')

買われすぎ(RSI70)と売られすぎ(RSI30)の水平線を定義

買われすぎ(RSI70)と売られすぎ(RSI30)の値に水平線を引くための変数を定義する。

水平線のスタイルを一括で変更出来るようにしたいので、設定画面のパラメータで線種('...','---')を選べるようにし、選んだ線種を元にhlineのスタイルを決定出来るようにする。

hlc=input.color(color.new(color.gray,40),'hline 線色')
hs=input.string('...','hline 線種',['...','---']) // 水平線のスタイルを選択する為の文字列(一括変更用)
hls=hs=='...'?hline.style_dotted:hline.style_dashed
hlw=input.int(2,'hline 線幅',minval=1,maxval=4)
rob=input.int(70,'買われすぎライン')
ros=input.int(30,'売られすぎライン')

RSI値をプロットする色を扱う型を定義

RSI値をプロットする色を扱う型を定義する。

type rsi_colors
    color s
    color m

var rc=rsi_colors.new()
var rc1=rsi_colors.new()
var rc2=rsi_colors.new()
var rc3=rsi_colors.new()

TFごとのRSI値の太さと色を定義

TFごとのRSI値をプロットする太さと色を定義する。

rw=input.int(1,'current 線幅',minval=1,maxval=4)
rc.s:=input.color(color.new(color.yellow,10),'current 短期')
rc.m:=input.color(color.new(color.orange,10),'current 中期')
rw1=input.int(2,'htf1 線幅',minval=1,maxval=4)
rc1.s:=input.color(color.new(color.yellow,50),'htf1 短期')
rc1.m:=input.color(color.new(color.orange,50),'htf1 中期')
rw2=input.int(3,'htf2 線幅',minval=1,maxval=4)
rc2.s:=input.color(color.new(color.yellow,70),'htf2 短期')
rc2.m:=input.color(color.new(color.orange,70),'htf2 中期')
rw3=input.int(4,'htf3 線幅',minval=1,maxval=4)
rc3.s:=input.color(color.new(color.yellow,90),'htf3 短期')
rc3.m:=input.color(color.new(color.orange,90),'htf3 中期')

RSI値を扱うための型を定義

RSI値を扱うための型を定義する。

type rsi_value
    float s
    float m

RSI値を取得

RSI値を取得する。

var rsi=rsi_value.new()
rsi.s:=ta.rsi(close,rs)
rsi.m:=ta.rsi(close,rm)
var rsi1=rsi_value.new()
rsi1.s:=request.security(syminfo.tickerid,htf1,ta.rsi(close,rs))
rsi1.m:=request.security(syminfo.tickerid,htf1,ta.rsi(close,rm))
var rsi2=rsi_value.new()
rsi2.s:=request.security(syminfo.tickerid,htf2,ta.rsi(close,rs))
rsi2.m:=request.security(syminfo.tickerid,htf2,ta.rsi(close,rm))
var rsi3=rsi_value.new()
rsi3.s:=request.security(syminfo.tickerid,htf3,ta.rsi(close,rs))
rsi3.m:=request.security(syminfo.tickerid,htf3,ta.rsi(close,rm))

MTF RSIをプロットする

買われすぎ、売られすぎの水平線を引く。

hline(rob,'買われすぎライン',hlc,hls,hlw)
hline(ros,'売られすぎライン',hlc,hls,hlw)

RSI値をプロットする。

plot(rsi3.s,'htf3 短期',rc3.s,rw3)
plot(rsi3.m,'htf3 中期',rc3.m,rw3)
plot(rsi2.s,'htf2 短期',rc2.s,rw2)
plot(rsi2.m,'htf2 中期',rc2.m,rw2)
plot(rsi1.s,'htf1 短期',rc1.s,rw1)
plot(rsi1.m,'htf1 中期',rc1.m,rw1)
plot(rsi.s,'短期',rc.s,rw)
plot(rsi.m,'中期',rc.m,rw)

この時点での描画状態は以下となる。

図1 この時点での描画状態

続く


いいなと思ったら応援しよう!

rca
よろしければ応援お願いします!