見出し画像

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
よろしければ応援お願いします!