Pine Script需求:绘制前一日亚洲时段固定高低点至当日0400
解决TradingView Pine Script亚洲时段高低点水平线问题
需求与现有问题
需求:绘制前一日亚洲交易时段(2000-0000)的高低点水平线,并仅在当日04:00前显示。
现有代码存在两个核心问题:
- 水平线会在所有历史时段全程显示,而非仅从对应高低点的次日时段开始
- 价格突破该时段高低点时,水平线会随价格偏移,无法保持固定值直到04:00
问题根源
- 原代码用
var声明的高低点变量会持续更新,导致价格突破时原时段的高低点被覆盖 - 缺乏对水平线显示区间的精准控制,没有限制仅在次日00:00-04:00显示
- 日期判断逻辑仅限制了当日,未处理前一日时段结束后的显示窗口
修正后的完整代码
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © marc_Q //@version=5 indicator("亚洲时段高低点水平线", overlay = true) // 时区设置 tz_incr = input.int(-5, 'UTC 偏移量', group = '时区设置') use_exchange = input(false, '使用交易所时区', group = '时区设置') tz = use_exchange ? syminfo.timezone : str.format('UTC{0}{1}', tz_incr >= 0 ? '+' : '-', math.abs(tz_incr)) // 时段定义 asian_session = input.session('2000-0000', '亚洲交易时段', group = '时段设置') display_until = input.session('0000-0400', '水平线显示截止时段', group = '时段设置') // 判断当前K线是否属于目标时段 in_asian_session = not na(time(timeframe.period, asian_session, tz)) in_display_window = not na(time(timeframe.period, display_until, tz)) // 存储每日亚洲时段的高低点(每日重置) var float daily_asian_high = na var float daily_asian_low = na // 每日开盘时重置高低点变量 if ta.change(time("D", tz)) daily_asian_high := na daily_asian_low := na // 亚洲时段内实时更新高低点 if in_asian_session daily_asian_high := na(daily_asian_high) ? high : math.max(daily_asian_high, high) daily_asian_low := na(daily_asian_low) ? low : math.min(daily_asian_low, low) // 提取前一日的亚洲时段最终高低点 prev_asian_high = ta.valuewhen(ta.change(time("D", tz)), daily_asian_high, 1) prev_asian_low = ta.valuewhen(ta.change(time("D", tz)), daily_asian_low, 1) // 控制水平线显示条件:仅在当日显示窗口内,且前一日高低点有效 show_line = in_display_window and not na(prev_asian_high) and not na(prev_asian_low) // 绘制固定水平线 plot(show_line ? prev_asian_high : na, color=#C70039, title="前一日亚洲高点", linewidth=2) plot(show_line ? prev_asian_low : na, color=color.rgb(141, 241, 9), title="前一日亚洲低点", linewidth=2) // 可选:高亮亚洲时段背景(取消注释启用) // bgcolor(in_asian_session ? color.new(color.orange, 90) : na)
关键修改说明
- 固定高低点数值:使用
ta.valuewhen提取前一日亚洲时段结束后的最终高低点,数值不再随后续价格变动 - 控制显示区间:通过
in_display_window变量限制水平线仅在当日00:00-04:00显示,解决历史时段乱显示问题 - 每日重置机制:在每日开盘时重置高低点变量,确保每个交易日的亚洲时段数据独立存储,互不干扰
- 优化参数管理:统一时区和时段的输入设置,提升代码可维护性
内容的提问来源于stack exchange,提问作者marcq
相关产品推荐
相关产品推荐

