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
相关产品推荐
相关产品推荐

