見出し画像

Pine Script™ (v5) の覚書 - 8 : UDTs(user-defined types)を使ってみる (6)

前回までの話


htf_candle型のオブジェクトの各値を設定するあたりが複雑なので、なんとかしたい。methodを用いる方法と、関数を用いる方法をそれぞれやってみる。

methodを用いる方法

// ローソク本体
myCandle.body.set_lefttop(dayCandle.t,dayCandle.o)
myCandle.body.set_rightbottom(dayCandle.tc-timeframe.in_seconds(timeframe.period)*1000,dayCandle.c)
myCandle.body.set_border_color(dayCandle.o<dayCandle.c?myColor.lime70:myColor.red70)
myCandle.body.set_bgcolor(dayCandle.o<dayCandle.c?myColor.lime70:myColor.red70)
// ローソク上ヒゲ
myCandle.wick.set_xy1((dayCandle.t+dayCandle.tc)/2,math.max(dayCandle.o,dayCandle.c))
myCandle.wick.set_xy2((dayCandle.t+dayCandle.tc)/2,dayCandle.h)
myCandle.wick.set_color(dayCandle.o<dayCandle.c?myColor.lime80:myColor.red80)
// ローソク下ヒゲ
myCandle.tail.set_xy1((dayCandle.t+dayCandle.tc)/2,math.min(dayCandle.o,dayCandle.c))
myCandle.tail.set_xy2((dayCandle.t+dayCandle.tc)/2,dayCandle.l)
myCandle.tail.set_color(dayCandle.o<dayCandle.c?myColor.lime80:myColor.red80)

htf_candle型に対して、candle型のローソク足データと2色(濃い色と薄い色)を引数として渡すことで、ローソクの値を更新する。

method update(htf_candle h, candle c, color c1, color c2)=>
    // ローソク本体
    h.body.set_lefttop(c.t,c.o)
    h.body.set_rightbottom(c.tc-timeframe.in_seconds(timeframe.period)*1000,c.c)
    h.body.set_border_color(c1)
    h.body.set_bgcolor(c2)

    _x=int(math.avg(c.t,c.tc)) // ヒゲのx座標

    // ローソク上ヒゲ
    myCandle.wick.set_xy1(_x,math.max(dayCandle.o,dayCandle.c))
    myCandle.wick.set_xy2(_x,dayCandle.h)
    myCandle.wick.set_color(c2)
    // ローソク下ヒゲ
    myCandle.tail.set_xy1(_x,math.min(dayCandle.o,dayCandle.c))
    myCandle.tail.set_xy2(_x,dayCandle.l)
    myCandle.tail.set_color(c2)

これを使うと、ローソク足更新部分は以下のようになる。

myCandle.update(dayCandle, dayCandle.o<=dayCandle.c?myColor.lime70:myColor.red70, dayCandle.o<=dayCandle.c?myColor.lime80:myColor.red80)

関数を用いる方法

関数にすると以下のようになる。

update_candle(htf_candle h, candle c, color c1, color c2)=>
    // ローソク本体
    h.body.set_lefttop(c.t,c.o)
    h.body.set_rightbottom(c.tc-timeframe.in_seconds(timeframe.period)*1000,c.c)
    h.body.set_border_color(c1)
    h.body.set_bgcolor(c2)

    _x=int(math.avg(c.t,c.tc)) // ヒゲのx座標

    // ローソク上ヒゲ
    myCandle.wick.set_xy1(_x,math.max(dayCandle.o,dayCandle.c))
    myCandle.wick.set_xy2(_x,dayCandle.h)
    myCandle.wick.set_color(c2)
    // ローソク下ヒゲ
    myCandle.tail.set_xy1(_x,math.min(dayCandle.o,dayCandle.c))
    myCandle.tail.set_xy2(_x,dayCandle.l)
    myCandle.tail.set_color(c2)

関数の場合の、ローソク足更新部分は以下のようになる。

update_candle(myCandle, dayCandle, dayCandle.o<=dayCandle.c?myColor.lime70:myColor.red70,dayCandle.o<=dayCandle.c?myColor.lime80:myColor.red80)

続く


この記事が気に入ったらサポートをしてみませんか?