Reputation: 16912
I would like to draw a vertical line, every day at a certain local time (e.g. 08:00 GMT+1).
Since my last post about vertical lines, pine-script has been updated to include vline()
, however, the issue here is getting the time right. Most servers (for FX) seem to be US based and the Trading view local time settings (shown on bottom left) seem totally independent of what is done in pine-script.
//@version=4
study("Time Adjusted Vertical Line", overlay=true)
vline(BarIndex, Color, LineStyle, LineWidth) => // Verticle Line, 54 lines maximum allowable per indicator
return = line.new(BarIndex, -1000, BarIndex, 1000, xloc.bar_index, extend.both, Color, LineStyle, LineWidth)
if(bar_index%10==0.0)
vline(bar_index, #FF8000ff, line.style_solid, 1) // Variable assignment not required
I couldn't get the above to work, but I got this to at least show the lines:
//@version=4
study(title="Time Based Session Bars", shorttitle="NowOpen", overlay=true)
line_height = 2 // We must define a height that reaches far above the highest price level in main chart!
gmt_offs = 2 // GMT + X
nys_offs = 6 // EST (in GMT)
t1 = time(timeframe.period, "0930-0935:23456")
//t1 = time(timeframe.isintraday, "0930-0935:23456")
//t2 = t1 + gmt_offs*60*60*60
t2 = t1 + 2
plot(na(t2) ? 0 : line_height, title='Hello!', color=#101010, linewidth=1, style=plot.style_histogram, transp=50, offset=0, trackprice=false)
However, the lines are totally wrong:
How can I extend the above code, to plot a vertical line, every day at a certain time, and get the correct time placement?
Possibly Useful links:
Sessions and time functions (The official Documentation)
Sessions_and_time_functions (The Github Repo Docs)
UPDATE
Thanks to PineCoders-LucF, I was able to get approximately what I wanted, with the following code:
//@version=4
study("Line at time",overlay=true)
t1 = timestamp("GMT+2", year, month, dayofmonth, 07, 00, 00)
//t2 = timestamp("GMT+2", year, month, dayofmonth, 10, 00, 00) // Uncomment this to make a range
t2=t1 // Comment out this to use a range
bgcolor( (time >= t1) and (time <= t2) ? color.silver : na, transp = 0)
However, there are two issues wit this code.
timeframe.period
functionality that allow you to specify certain days and time intervals in one place. Upvotes: 9
Views: 26829
Reputation: 2382
This is some code I've used:
enableTimeLines = input(defval=true, type=input.bool, title="Enable Time Lines")
// Chartlines 1h and 4h
if enableTimeLines
timeA = 21 // starts at 21:00 hs
timeB = 21
for i = 0 to 60
timeA := timeA - 4 // and from 21hs goes backwards
targetTimeA = timestamp("GMT-3", year, month, dayofmonth, timeA, 00, 00)
line.new(x1=targetTimeA, y1=open, x2=targetTimeA, y2=close, xloc=xloc.bar_time, extend=extend.both, color=color.new(color.yellow, 20), style=line.style_dotted, width=1)
timeB := timeB - 1
if timeB != (21 or 01 or 05 or 09 or 13 or 17)
targetTimeB = timestamp("GMT-3", year, month, dayofmonth, timeB, 00, 00)
line.new(x1=targetTimeB, y1=open, x2=targetTimeB, y2=close, xloc=xloc.bar_time, extend=extend.both, color=color.new(color.silver, 50), style=line.style_dotted, width=1)
It paints silver lines every 1 hour, except every 4 hours, where it paints yellow lines. It goes backwards.
Keep in mind that there's a limit for the FOR LOOP's time response.
Upvotes: 0
Reputation: 8779
One version of the timestamp()
function can use a timezone parameter:
//@version=4
study("Line at time", overlay=true)
targetTime = timestamp("GMT+1", year, month, dayofmonth, 08, 00, 00)
bgcolor(targetTime == time ? color.silver : na, transp = 0)
// Debugging: these plots lines in separate window
plot(targetTime, "targetTime", color.orange)
plot(time, "time")
Chart is shown with UTC+1 times and indicator is set to "No Scale" not to disrupt price scale:
With this version you can choose:
//@version=4
study("Line at time",overlay=true)
fromHour = input(7)
toHour = input(10)
weekdaysOnly = input(true)
useVline = input(false)
dayIsOk = not weekdaysOnly or (dayofweek != dayofweek.saturday and dayofweek != dayofweek.sunday)
t1 = timestamp("GMT+2", year, month, dayofmonth, fromHour, 00, 00)
t2 = timestamp("GMT+2", year, month, dayofmonth, toHour, 00, 00)
timeIsOk = (time >= t1) and (time <= t2)
bgcolor( not useVline and timeIsOk and dayIsOk ? color.orange : na, transp = 80)
if useVline and timeIsOk and dayIsOk
line.new(bar_index, low * .9999, bar_index, high * 1.0001, xloc.bar_index, extend.both, #FF8000ff, line.style_solid, 1)
Upvotes: 8