You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pine Script中绘制每日开盘后第二笔成交价并适配多时间周期

问题解决方案

核心问题原因

原有脚本失效的根本原因是:逻辑完全依赖当前图表周期的K线数据运算,切换到15Min、日线等大于1R的周期时,单根K线已经聚合了多笔成交数据,无法捕捉到第二笔成交的精准数值。

修复后脚本

//@version=5
indicator("当日第二笔成交价格绘制", overlay=true)

highTimeFrame = "1R"
sessSpec = "0700-1800"

// 封装1R分辨率下的第二笔成交价计算逻辑
get_second_price() =>
    var float day_open = na
    var float second_price = na
    // 判断1R级别是否是新交易日
    is_new_day = ta.change(time("D", sessSpec))
    if is_new_day
        day_open := open
        second_price := na
    // 还没拿到第二笔价时,取第一个偏离开盘价的成交价格
    if na(second_price)
        if high != day_open
            second_price := high
        else if low != day_open
            second_price := low
    [day_open, second_price, close[1]]

// 调用1R分辨率的计算结果,不受当前图表周期影响
[s1, s2, s3] = request.security(syminfo.tickerid, highTimeFrame, get_second_price())

// 可选:仅在当日第一根K线显示数值,不需要可以删掉这个判断
show_in_first_bar_only = ta.barstate.islast and ta.change(time("D")) or barstate.ishistory and ta.change(time("D", sessSpec), 1) == 0 and ta.change(time("D"), 1) != 0

// 绘图,要全周期都显示就删掉display参数
plot(s1, style=plot.style_circles, linewidth=3, color=color.red, title="开盘价", display = show_in_first_bar_only ? display.data_window : display.none)
plot(s2, style=plot.style_circles, linewidth=3, color=color.blue, title="第二笔成交价", display = show_in_first_bar_only ? display.data_window : display.none)
plot(s3, style=plot.style_circles, linewidth=2, color=color.yellow, title="前一日收盘价", display = show_in_first_bar_only ? display.data_window : display.none)

关键修改说明

  • 用request.security接口指定从1R分辨率拉取数据运算,无论当前图表切换到15Min、日线等任何周期,都能拿到精准的逐笔成交计算结果
  • 修正了原脚本的逻辑漏洞:原逻辑如果开盘后先涨后跌,会把第二笔价错误覆盖为低价,现在只要拿到第一个偏离开盘价的数值就锁定为第二笔成交价不再修改
  • 新增了展示控制逻辑:默认仅在当日第一根K线展示数值,要全周期展示直接删除绘图函数中的display参数即可

内容的提问来源于stack exchange,提问作者Dzulfariz Azman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:04