見出し画像

Pine Script™ (v6) の覚書 - コラム : チャートの1日はいつ始まるの?(TimeZoneについて) (3)

前回までの話

前回書いたスクリプトを拡張して、複数のtickerIDに対して、週足と日足と4時間足の時間を表示するスクリプトを書いてみます。
まず、request.securityで、syminfo.timezoneとtime/time_closeの一括でデータ取得するためにtimeopenclose型を定義します。

type timeopenclose
    string  timezone  // syminfo.timezone
    int     t         // time
    int     tc        // time_close

次にチャートの切り替えなしに複数のTickerIDのデータを取得するために、TickerIDのリストを定義します。
あとで、設定で変えられるように、text_areaに1行にTickerID書けるようにしておきます。

ListOfTickerID=input.text_area("TSE:7203\nNASDAQ:TSLA")

tl=str.split(ListOfTickerID,"\n")
for i = 0 to tl.size()-1                       //空白行を無視するための処理
    s = str.match(tl.get(i), "[\\S]+:[\\S]+")
    if str.length(s) == 0
        tl.remove(i)

週足の曜日を表示するための関数を用意します。

unixtime2dow(int unixtime,string timezone=syminfo.timezone)=>
    switch dayofweek(unixtime,timezone)
        dayofweek.sunday=>"(日)"
        dayofweek.monday=>"(月)"
        dayofweek.tuesday=>"(火)"
        dayofweek.wednesday=>"(水)"
        dayofweek.thursday=>"(木)"
        dayofweek.friday=>"(金)"
        dayofweek.saturday=>"(土)"
        =>na

次に表のレイアウトを設定します。TickerID、マーケットのTimeZone、週足・日足・4時間足の時間と並ぶようにします。

t=table.new(position.middle_center,100,100,color.new(color.blue,60),color.blue,1,color.yellow,1)

t.cell(9,9,"tickerid",text_color=color.orange)
t.merge_cells(9,9,9,10)
t.cell(10,9,"syminfo.timezone",text_color=color.orange)
t.merge_cells(10,9,10,10)

t.merge_cells(11,9,11,10)

t.cell(12,9,"週足(1W)",text_color=color.orange)
t.merge_cells(12,9,13,9)

t.cell(12,10,"time",text_color=color.orange)
t.cell(13,10,"time_close", text_color=color.orange)

t.cell(22,9,"日足(1D)",text_color=color.orange)
t.merge_cells(22,9,23,9)

t.cell(22,10,"time",text_color=color.orange)
t.cell(23,10,"time_close", text_color=color.orange)

t.cell(32,9,"4時間足(240)",text_color=color.orange)
t.merge_cells(32,9,33,9)

t.cell(32,10,"time",text_color=color.orange)
t.cell(33,10,"time_close", text_color=color.orange)

最後に、データを取得して表のデータ系列を埋めます。

var offset=11
for i = 0 to tl.size()-1
    rows=3
    r=offset+i*3

    w=request.security(tl.get(i),"1W",timeopenclose.new(syminfo.timezone,time,time_close))
    d=request.security(tl.get(i),"1D",timeopenclose.new(syminfo.timezone,time,time_close))

    t.cell(9,r,tl.get(i),text_color=color.lime)
    t.merge_cells(9,r,9,r+2)
    t.cell(10,r,d.timezone,text_color=color.lime)
    t.merge_cells(10,r,10,r+2)
    t.cell(11,r,"unixtime",text_color=color.orange)
    t.cell(11,r+1,"@GMT",text_color=color.orange)
    t.cell(11,r+2,"@syminfo.timezone",text_color=color.orange)

    t.cell(12,r,str.tostring(w.t),text_color=color.lime)
    t.cell(12,r+1,str.format_time(w.t,"MM/dd HH:mm","GMT")+unixtime2dow(w.t,"GMT"),text_color=color.lime)
    t.cell(12,r+2,str.format_time(w.t,"MM/dd HH:mm",w.timezone)+unixtime2dow(w.t,w.timezone),text_color=color.aqua)

    t.cell(13,r,str.tostring(w.tc),text_color=color.lime)
    t.cell(13,r+1,str.format_time(w.tc,"MM/dd HH:mm","GMT")+unixtime2dow(w.tc,"GMT"),text_color=color.lime)
    t.cell(13,r+2,str.format_time(w.tc,"MM/dd HH:mm",d.timezone)+unixtime2dow(w.tc,w.timezone),text_color=color.aqua)

    t.cell(22,r,str.tostring(d.t),text_color=color.lime)
    t.cell(22,r+1,str.format_time(d.t,"MM/dd HH:mm","GMT"),text_color=color.lime)
    t.cell(22,r+2,str.format_time(d.t,"MM/dd HH:mm",d.timezone),text_color=color.aqua)

    t.cell(23,r,str.tostring(d.tc),text_color=color.lime)
    t.cell(23,r+1,str.format_time(d.tc,"MM/dd HH:mm","GMT"),text_color=color.lime)
    t.cell(23,r+2,str.format_time(d.tc,"MM/dd HH:mm",d.timezone),text_color=color.aqua)

    f=request.security(tl.get(i),"240",timeopenclose.new(syminfo.timezone,time,time_close))

    t.cell(32,r,str.tostring(f.t),text_color=color.lime)
    t.cell(32,r+1,str.format_time(f.t,"MM/dd HH:mm","GMT"),text_color=color.lime)
    t.cell(32,r+2,str.format_time(f.t,"MM/dd HH:mm",f.timezone),text_color=color.aqua)

    t.cell(33,r,str.tostring(f.tc),text_color=color.lime)
    t.cell(33,r+1,str.format_time(f.tc,"MM/dd HH:mm","GMT"),text_color=color.lime)
    t.cell(33,r+2,str.format_time(f.tc,"MM/dd HH:mm",f.timezone),text_color=color.aqua)

これで、調べたいTIckerIDを並べると、週足・日足・4時間足の開始時間(time)と終了時間(time_close)が表示されるスクリプトができました。(図1)

図1 トヨタ自動車とテスラを表示

設定画面を開いて、調べたいTickerIDを追加すると表が更新されます。(改行区切り)(図2)
デフォルトのTickerIDを全て削除して、自分の興味のあるものだけ表示することもできます。

図2 TickerIDの編集画面

興味のある方は使ってみてください。

続く。


いいなと思ったら応援しよう!

rca よろしければ応援お願いします!