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

Pine Script:含盘前盘后数据的前一日高低值变量异常问题

问题分析与修复方案

你的代码存在两个核心问题,导致调用prevsessionhigh/prevsessionlow时返回0,但绘图能正常显示:

1. 时段判断的语法错误

你写的hour >= 0400是错误逻辑:hour函数返回0-23的整数,而0400作为整数是400,这个条件永远不成立。虽然hour <=2000永远为真让整体条件没完全失效,但这种写法逻辑混乱,可能导致初始化或更新逻辑在错误时机触发。

正确的时段判断应该用hour >= 4 and hour < 20,或者直接用你定义的i变量判断当前K线是否在自定义时段内(not na(i))。

2. 前一交易日高低值的赋值时机错误

你用dayofweek[1] != dayofweek判断新交易日,但你的自定义交易日是04:00-20:00,而非自然日(午夜切换)。比如每天4点就进入新的自定义交易日,此时应该把上一个时段(前一天4点-20点)的高低值存入prevsessionhigh,而不是等到自然日切换(周一凌晨)才赋值。这就导致大部分时间prevsessionhigh都是初始的NA,Pine Script在显示变量时会把NA转为0,但绘图函数会自动处理NA,只绘制有值的部分,所以线条能正常显示。


修正后的代码

//@version=5
indicator("自定义时段前一日高低值", overlay=true)

// 定义自定义交易日:04:00-20:00
session_custom = session.new("0400-2000")
is_in_session = session.isintraday(session_custom)
// 判断是否是自定义交易日的第一根K线
is_new_session = ta.change(session.isnew(session_custom))

// 初始化变量(用var保证值持续保留)
var float session_high = na
var float session_low = na
var float prev_session_high = na
var float prev_session_low = na

// 处理自定义交易日的高低值更新
if is_new_session
    // 新自定义交易日开始时,保存上一交易日的高低值
    prev_session_high := session_high
    prev_session_low := session_low
    // 初始化当前交易日的高低值
    session_high := high
    session_low := low
elif is_in_session
    // 在自定义时段内,持续更新高低值
    session_high := math.max(session_high, high)
    session_low := math.min(session_low, low)

// 绘制前一交易日高低线
plot(prev_session_high, style=plot.style_line, title="前一交易日高点", color=#FFFFFF, linewidth=1, trackprice=true)
plot(prev_session_low, style=plot.style_line, title="前一交易日低点", color=#FFFFFF, linewidth=1, trackprice=true)

关键改进点

  • 用Pine Script v5内置的session函数精准判断自定义时段,避免手动判断hour的错误。
  • 在自定义交易日开始时自动保存上一交易日的高低值,时机完全匹配你的时段需求。
  • 使用var关键字初始化变量,保证值在所有K线中持续保留,不会被反复重置。

内容的提问来源于stack exchange,提问作者Brian H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:23:19