You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pine Script中获取每日特定时间的OHLC数据?

获取每日特定时间OHLC的Pine Script实现方案

嘿,这个需求在量化分析里挺实用的,我来给你详细讲讲怎么在Pine Script里搞定每天中午12点的OHLC数据提取,分两种常见场景来拆解:

场景1:当前图表时间框架 ≤ 1小时(比如15分钟、30分钟)

如果你的图表用的是小时以内的时间框架,我们可以直接在当前bar中检测时间是否匹配目标点,然后记录对应OHLC:

//@version=5
indicator("每日特定时间OHLC", overlay=false)

// 自定义目标时间参数
target_hour = input.int(12, title="目标小时", minval=0, maxval=23)
target_minute = input.int(0, title="目标分钟", minval=0, maxval=59)
target_timezone = input.timezone("Exchange", title="时区(默认交易所时区)")

// 初始化变量存储每日目标时间的OHLC
var float daily_open = na
var float daily_high = na
var float daily_low = na
var float daily_close = na

// 检测当前bar的结束时间是否匹配目标时间
is_target_time = hour(time_close, target_timezone) == target_hour and minute(time_close, target_timezone) == target_minute

// 当匹配时更新OHLC数据
if is_target_time
    daily_open := open
    daily_high := high
    daily_low := low
    daily_close := close

// 可视化输出结果
plot(daily_open, color=color.new(color.green, 0), title="目标时间开盘价", linewidth=2)
plot(daily_high, color=color.new(color.red, 0), title="目标时间最高价", linewidth=2)
plot(daily_low, color=color.new(color.blue, 0), title="目标时间最低价", linewidth=2)
plot(daily_close, color=color.new(color.orange, 0), title="目标时间收盘价", linewidth=2)

// 可选:在目标时间bar上标记标签
if is_target_time
    label.new(bar_index, high, str.format("12PM OHLC\nO: {0}\nH: {1}\nL: {2}\nC: {3}", daily_open, daily_high, daily_low, daily_close), color=color.gray, textcolor=color.white)

代码解释:

  • 我们用time_close判断bar的结束时间,因为你要的是中午12点整的快照,对应结束时间为12:00的bar数据
  • target_timezone参数可以让你切换到本地时区(比如GMT+8),避免交易所时区和需求时区不一致的问题
  • var关键字确保变量不会在每个bar都重置,只会在目标时间更新

场景2:当前图表时间框架 > 1小时(比如4小时、日线)

如果你的图表用的是更大的时间框架,直接在当前bar里没法定位到12点的细分数据,这时候需要用request.security()调用更低时间框架(比如1小时)的数据来提取:

//@version=5
indicator("跨时间框架提取特定时间OHLC", overlay=false)

// 自定义参数
target_hour = input.int(12, title="目标小时", minval=0, maxval=23)
target_minute = input.int(0, title="目标分钟", minval=0, maxval=59)
target_resolution = input.string("60", title="用于提取数据的低时间框架(分钟)")
target_timezone = input.timezone("Exchange", title="时区")

// 定义函数:从低时间框架获取目标时间的OHLC
f_get_target_ohlc() =>
    // 调用低时间框架的OHLC数据
    [o, h, l, c] = request.security(syminfo.tickerid, target_resolution, [open, high, low, close])
    // 构造目标时间戳
    target_timestamp = timestamp(year, month, dayofmonth, target_hour, target_minute, 0, target_timezone)
    // 检测当前低时间框架bar的结束时间是否匹配目标时间
    if time_close == target_timestamp
        [o, h, l, c]
    else
        [na, na, na, na]

// 调用函数获取数据
[daily_open, daily_high, daily_low, daily_close] = f_get_target_ohlc()

// 可视化输出
plot(daily_open, color=color.green, title="目标时间开盘价", linewidth=2)
plot(daily_high, color=color.red, title="目标时间最高价", linewidth=2)
plot(daily_low, color=color.blue, title="目标时间最低价", linewidth=2)
plot(daily_close, color=color.orange, title="目标时间收盘价", linewidth=2)

代码解释:

  • request.security()用来拉取指定时间框架的历史数据,这里我们用1小时("60")来定位12点的bar
  • 通过timestamp()构造精确的目标时间戳,确保匹配到准确的时间点
  • 函数返回的OHLC数据只有在匹配到目标时间时才有效,其余时间为na,不会干扰图表显示

注意事项

  • 时区问题:一定要确认设置的时区和需求一致,比如要北京时间中午12点,就把target_timezone改成"GMT+8"
  • 数据精度:如果目标时间刚好落在两个bar的交界处(比如12:00是某个bar的开始时间),可以把判断条件改成hour(time, target_timezone) == target_hour and minute(time, target_timezone) == target_minute,用time(bar开始时间)来匹配

内容的提问来源于stack exchange,提问作者Kamalakannan J

火山引擎 最新活动