如何在特定时间在Tradingview的pinescript中绘制一条垂直线?

时间:2020-01-20 17:52:51

标签: pine-script

我想在每天的某个当地时间(例如格林尼治标准时间18:00)绘制一条垂直线。

自从我的last post关于竖线以来,松木脚本已更新为包含vline(),但是,这里的问题是正确的时机。大多数服务器(用于FX)似乎都基于美国,并且“交易视图”本地时间设置(如左下方所示)似乎完全与pine脚本中的操作无关。

//@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

我无法使以上内容正常工作,但我至少可以显示以下内容:

//@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)

但是,这些行是完全错误的:

enter image description here

如何扩展上面的代码,每天在特定时间绘制一条垂直线,并获得正确的时间位置?


可能有用的链接:


更新

由于 PineCoders-LucF ,我可以使用以下代码大致获得所需的内容:

//@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)

但是,此代码有两个问题。

  1. 它没有使用不错的timeframe.period功能,该功能不允许您在一个地方指定特定的日期和时间间隔。
  2. 它将线放置在蜡烛的“中间”,因此,如果您在1H图表上并且想要08.00的线,则将其放置在中间。因此,除非您使用<= 1分钟的时间范围,否则不适合用作警报/信号。

2 个答案:

答案 0 :(得分:2)

版本1

timestamp()函数的一个版本可以使用时区参数:

//@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")

图表以UTC + 1的形式显示,并且指示器设置为“无标度”以不破坏价格标度:

enter image description here

版本2

使用此版本,您可以选择:

  • 一个小时到一个小时的范围
  • 仅在工作日显示该行
  • 在bgcolor或vline模式之间
//@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)

enter image description here

答案 1 :(得分:0)

这是我使用过的一些代码:

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)

它每 1 小时绘制一次银色线条,除了每 4 小时绘制一次黄色线条。它倒退了。

Image

请记住,FOR LOOP 的响应时间是有限制的。