見出し画像

Pine Script™ (v5) の覚書 - 作ってみる:日足と週足と月足を描くインジケータの作成 (5)

前回までの話


ローソクとboxを描く

日足(あるいは週足や月足)が切り替わらない場合、既存の足の値を最新値に更新し、切り替わったら新しい足を描く。

var D=new_day_candle()
if newD
    D:=new_day_candle()
D.update_day(dayCandle,candleColor)

var W=new_week_candle()
if newW
    W:=new_week_candle()
W.update_week(weekCandle,candleColor)

var M=new_month_candle()
if newW
    M:=new_month_candle()
M.update_month(monthCandle,candleColor)

(前回作成した)method(update_day/update_week/update_month)はつくらなくても、以下の感じでできる。どちらでも良い。

var D=new_day_candle()
if newD
    D:=new_day_candle()
D.set_lefttop(dayCandle.t,dayCandle.o)
D.set_rightbottom(dayCandle.tc-timeframe.in_seconds()*1000,dayCandle.c)
D.set_bgcolor(dayCandle.bullish?candleColor.bullish:candleColor.bearish)

var W=new_week_candle()
if newW
    W:=new_week_candle()
W.set_lefttop(weekCandle.t,weekCandle.o)
W.set_rightbottom(weekCandle.tc-timeframe.in_seconds()*1000,weekCandle.c)
W.set_border_color(weekCandle.bullish?candleColor.bullish:candleColor.bearish)

var M=new_month_candle()
if newM
    M:=new_month_candle()
M.set_lefttop(monthCandle.t,monthCandle.o)
M.set_rightbottom(monthCandle.tc-timeframe.in_seconds()*1000,monthCandle.c)
M.set_border_color(monthCandle.bullish?candleColor.bullish:candleColor.bearish)

日足以上の場合の修正

日足以上になるとエラー発生やローソクやboxの表示がおかしくなるので、修正する。

request.security()を使って、日足と週足と月足のデータを取得する部分を以下のように修正する。

dayCandle:=request.security(syminfo.tickerid,'D',candle_body.new(time,time_close,open,close,open<=close))
if na(dayCandle)
    dayCandle:=candle_body.new()
weekCandle:=request.security(syminfo.tickerid,'W',candle_body.new(time,time_close,open,close,open<=close))
if na(weekCandle)
    weekCandle:=candle_body.new()
monthCandle:=request.security(syminfo.tickerid,'M',candle_body.new(time,time_close,open,close,open<=close))
if na(monthCandle)
    monthCandle:=candle_body.new()

ローソクとboxを描く部分を以下のように修正する。
まずはmethodの場合

if timeframe.in_seconds()<timeframe.in_seconds('D')
    var D=new_day_candle()
    if newD
        D:=new_day_candle()
    D.update_day(dayCandle,candleColor)

if timeframe.in_seconds()<timeframe.in_seconds('W')
    var W=new_week_candle()
    if newW
        W:=new_week_candle()
    W.update_week(weekCandle,candleColor)

if timeframe.in_seconds()<timeframe.in_seconds('M')
    var M=new_month_candle()
    if newW
        M:=new_month_candle()
    M.update_month(monthCandle,candleColor)

次にmethodを使わない場合

if timeframe.in_seconds()<timeframe.in_seconds('D')
    var D=new_day_candle()
    if newD
        D:=new_day_candle()
    D.set_lefttop(dayCandle.t,dayCandle.o)
    D.set_rightbottom(dayCandle.tc-timeframe.in_seconds()*1000,dayCandle.c)
    D.set_bgcolor(dayCandle.bullish?candleColor.bullish:candleColor.bearish)

if timeframe.in_seconds()<timeframe.in_seconds('W')
    var W=new_week_candle()
    if newW
        W:=new_week_candle()
    W.set_lefttop(weekCandle.t,weekCandle.o)
    W.set_rightbottom(weekCandle.tc-timeframe.in_seconds()*1000,weekCandle.c)
    W.set_border_color(weekCandle.bullish?candleColor.bullish:candleColor.bearish)

if timeframe.in_seconds()<timeframe.in_seconds('M')
    var M=new_month_candle()
    if newM
        M:=new_month_candle()
    M.set_lefttop(monthCandle.t,monthCandle.o)
    M.set_rightbottom(monthCandle.tc-timeframe.in_seconds()*1000,monthCandle.c)
    M.set_border_color(monthCandle.bullish?candleColor.bullish:candleColor.bearish)

完成!

画像1 DWMCandleインジケータの完成

今回作成したコード全文は下の有料部分で見ることが出来ます。

ご覧頂いている皆様の中に、私達の活動を支援して頂ける方がいらっしゃいましたら、有料部分をクリックやコメントをして頂けると記事執筆の励みとさせていただきます。

<注意>
以下の有料部分に記載されるコードの内容は全てこれまでの内容と同じで追加される情報はありません。これまでに書いてきたコードを一つにまとめたものです。ご注意ください。

コード全文

ここから先は

3,871字

¥ 500

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