![見出し画像](https://assets.st-note.com/production/uploads/images/166049287/rectangle_large_type_2_a460dc7779575062c64d197af8cba3ad.png?width=1200)
Pine Script™ (v6) の覚書 - 作ってみる:MTF移動平均線を描くインジケータの作成再び (2)
前回までの話
MTF移動平均線に必要なパーツの作成
MA用label
labelを常に移動平均線の右に表示するために、labelのY座標は常に最新のMA値、X座標は最新のローソク足の2本分右になるようなlabelを再定義する。
ma_label(float y,string t,color c,color ct,int s,string f)=>
var l=label.new(na,na,t,color=c,textcolor=ct,size=s,style=label.style_label_left)
switch f // 設定で指定した書体に変更する
'bold'=>l.set_text_formatting(text.format_bold)
'italic'=>l.set_text_formatting(text.format_italic)
'bold+italic'=>l.set_text_formatting(text.format_bold+text.format_italic)
=>l.set_text_formatting(text.format_none)
l.set_xy(bar_index,y)
l
引数としてlabelのy座標、labelの文字列、labelの色、文字色、書体を指定できるようにして、最初の1回だけlabel objectを生成、以降、書体と座標を更新するようにする。
自動的に一つ上のTFを取得
(1, 5, 15, 60, 240, 1D, 1W, 1M)というTFを配列に入れて、引数のTFと配列要素の秒数を比較して、一段上のTFを取得する。引数のTFより上位が見つからない場合は返り値はnaになる。
higher_tf(string tf=timeframe.period)=>
var tfList=array.from('1','5','15','60','240','1D','1W','1M')
var _s=timeframe.in_seconds(tf)
var string _htf=na
if not na(tf)
for _tf in tfList
if _s<timeframe.in_seconds(_tf)
_htf:=_tf
break
_htf
関数の定義、TF用変数の定義
//@version=6
indicator("noteMTF20MAv6",overlay=true)
ma_label(float y,string t,color c,color ct,int s,string f)=>
var l=label.new(na,na,t,color=c,textcolor=ct,size=s,style=label.style_label_left)
switch f // 設定で指定した書体に変更する
'bold'=>l.set_text_formatting(text.format_bold)
'italic'=>l.set_text_formatting(text.format_italic)
'bold+italic'=>l.set_text_formatting(text.format_bold+text.format_italic)
=>l.set_text_formatting(text.format_none)
l.set_xy(bar_index,y)
l
higher_tf(string tf=timeframe.period)=>
var tfList=array.from('1','5','15','60','240','1D','1W','1M')
var _s=timeframe.in_seconds(tf)
var string _htf=na
if not na(tf)
for _tf in tfList
if _s<timeframe.in_seconds(_tf)
_htf:=_tf
break
_htf
var ctf=timeframe.period//今のTF
var htf1=higher_tf(ctf)//1段上のTF
var htf2=higher_tf(htf1)//2段上のTF(1段上の1段上)
ラベルで変更出来る項目を増やしたので、移動平均線に関する設定とラベルに関する設定にまとめてみる。
移動平均線の設定
mysrc=input.source(close,"ソース",inline="MA",group="移動平均線の設定")
myspan=input.int(20,"期間",1,200,inline="MA",group="移動平均線の設定")
cSMA=input.color(color.new(color.aqua,60),"SMAの色",inline="color",group="移動平均線の設定")
cEMA=input.color(color.new(color.yellow,60),"EMAの色",inline="color",group="移動平均線の設定")
useCTF=input.bool(true,"CTF",inline="CTF",group="移動平均線の設定") // 今のTFのSMA/EMA表示のON/OFF
wCTF=input.int(1,"線幅",1,inline="CTF",group="移動平均線の設定") // 今のTFの線幅
useHTF1=input.bool(true,"HTF1",inline="HTF1",group="移動平均線の設定") // 1段上のTFのSMA/EMA表示のON/OFF
wHTF1=input.int(2,"線幅",1,inline="HTF1",group="移動平均線の設定") // 1段上のTFの線幅
useHTF2=input.bool(true,"HTF2",inline="HTF2",group="移動平均線の設定") // 2段上のTFのSMA/EMA表示のON/OFF
wHTF2=input.int(4,"線幅",1,inline="HTF2",group="移動平均線の設定") // 2段上のTFの線幅
ここまではv6新機能はない。
ラベルの設定
cLSMA=input.color(color.new(color.aqua,60),"ラベルの色(SMA)",inline="color",group="ラベルの設定")
cLTSMA=input.color(color.new(color.aqua,20),"ラベルテキストの色(SMA)",inline="color",group="ラベルの設定")
cLEMA=input.color(color.new(color.yellow,60),"ラベルの色(EMA)",inline="color",group="ラベルの設定")
cLTEMA=input.color(color.new(color.yellow,20),"ラベルテキストの色(EMA)",inline="color",group="ラベルの設定")
useLCTF=input.bool(true,"CTF",inline="CTF",group="ラベルの設定")
sCTF=input.int(12,"サイズ",1,inline="CTF",group="ラベルの設定")
fCTF=input.string('none',"書体",['none','bold','italic','bold+italic'],inline="CTF",group="ラベルの設定")
useLHTF1=input.bool(true,"HTF1",inline="HTF1",group="ラベルの設定")
sHTF1=input.int(16,"サイズ",1,inline="HTF1",group="ラベルの設定")
fHTF1=input.string('italic',"書体",['none','bold','italic','bold+italic'],inline="HTF1",group="ラベルの設定")
useLHTF2=input.bool(true,"HTF2",inline="HTF2",group="ラベルの設定")
sHTF2=input.int(24,"サイズ",1,inline="HTF2",group="ラベルの設定")
fHTF2=input.string('bold+italic',"書体",['none','bold','italic','bold+italic'],inline="HTF2",group="ラベルの設定")
ラベルの方では、ラベルのテキストの色やサイズに加えて、v6で追加された書体も指定できるようにした。
続く
いいなと思ったら応援しよう!
![rca](https://d2l930y2yx77uc.cloudfront.net/assets/default/default_profile_3-39088fff430aa9ec11d6e2a385dbcad45c8b79bde6c0c9ded10cd7abb960174f.png?width=600&crop=1:1,smart)