![見出し画像](https://assets.st-note.com/production/uploads/images/145119656/rectangle_large_type_2_f91a87e9a9452d8ac75c9d755b6c88b5.png?width=1200)
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)
続く
この記事が気に入ったらサポートをしてみませんか?