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

Pine Script需求:绘制前一日亚洲时段固定高低点至当日0400

解决TradingView Pine Script亚洲时段高低点水平线问题

需求与现有问题

需求:绘制前一日亚洲交易时段(2000-0000)的高低点水平线,并仅在当日04:00前显示。

现有代码存在两个核心问题:

  • 水平线会在所有历史时段全程显示,而非仅从对应高低点的次日时段开始
  • 价格突破该时段高低点时,水平线会随价格偏移,无法保持固定值直到04:00

问题根源

  1. 原代码用var声明的高低点变量会持续更新,导致价格突破时原时段的高低点被覆盖
  2. 缺乏对水平线显示区间的精准控制,没有限制仅在次日00:00-04:00显示
  3. 日期判断逻辑仅限制了当日,未处理前一日时段结束后的显示窗口

修正后的完整代码

// 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:05:35