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)

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

興味のある方は使ってみてください。
続く。
いいなと思ったら応援しよう!
よろしければ応援お願いします! 