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

修改TradingView指标每日起始时间为UTC-4(GMT-5)

自定义PineScript每日周期时区(UTC-4/GMT-5)解决方案

问题核心

当前指标默认使用UTC时区的00:00-00:00作为每日周期,导致指标从17:00开始(对应UTC-4时区的时间偏移)。需要将每日周期改为UTC-4时区的17:00至次日17:00,原有的时区下拉选项及syminfo.timezone尝试均未生效,需通过自定义周期逻辑实现。

修改后的完整代码

//@version=5
indicator(title='CPR, VWAP, EMAs, MASTER - CAM', shorttitle='CPR,VWAP,EMAs, MASTER', overlay=true)

// 输入参数保持不变
daily_cpr = input.int(title='Number of Daily CPR Back', defval=100, minval=0)
onehr_cpr = input.int(title='Number of 1HR CPR Back', defval=0, minval=0)
fourhr_cpr = input.int(title='Number of 4HR CPR Back', defval=0, minval=0)
eighthr_cpr = input.int(title='Number of 8HR CPR Back', defval=0, minval=0)
weekly_cpr = input.int(title='Number of Weekly CPR Back', defval=0, minval=0)
monthly_cpr = input.int(title='Number of Monthly CPR Back', defval=0, minval=0)

// 通用周期切换判断函数
new_period(condition, src) =>
    result = 0.0
    result := condition ? src : result[1]
    result

// --------------------------
// 核心修改:自定义UTC-4时区的每日周期(17:00-次日17:00)
// UTC-4的17:00对应UTC时间21:00,因此会话定义为UTC的21:00开始,持续24小时
session_def = "2100-2100:24/7"
is_new_daily_session = ta.session.new(session_def)

// 跟踪当前自定义日的高低收盘价
var float daily_high = na
var float daily_low = na
var float daily_close = na

if is_new_daily_session
    daily_high := high
    daily_low := low
    daily_close := close
else
    daily_high := math.max(daily_high, high)
    daily_low := math.min(daily_low, low)
    daily_close := close

// 保存前一个自定义日的高低收盘价(用于计算CPR)
var float prev_daily_high = na
var float prev_daily_low = na
var float prev_daily_close = na

if is_new_daily_session
    prev_daily_high := daily_high[1]
    prev_daily_low := daily_low[1]
    prev_daily_close := daily_close[1]

// 计算前一个自定义日的CPR值
pivot = (prev_daily_high + prev_daily_low + prev_daily_close) / 3.0
bc = (prev_daily_high + prev_daily_low) / 2.0
tc = pivot - bc + pivot

dpp = pivot
dbc = bc
dtc = tc
// --------------------------

one_day = 1000 * 60 * 60 * 24
// 替换原UTC日周期判断为自定义会话的新周期判断
new_day = daily_cpr > 0 and timenow - time < one_day * daily_cpr and is_new_daily_session

dpp_ = new_period(new_day, dpp)
dtc_ = new_period(new_day, dtc)
dbc_ = new_period(new_day, dbc)

// 绘图逻辑保持不变
plot(timeframe.isintraday ? dtc_ >= dbc_ ? dtc_ : dbc_ : na, title='Daily TC', style=plot.style_steplinebr, color=color.new(#238859, 0), linewidth=1)
plot(timeframe.isintraday ? dpp_ : na, title='Daily PP', style=plot.style_steplinebr, color=color.new(#238859, 0), linewidth=1)
plot(timeframe.isintraday ? dtc_ >= dbc_ ? dbc_ : dtc_ : na, title='Daily BC', style=plot.style_steplinebr, color=color.new(#238859, 0), linewidth=1)

关键修改说明

  1. 自定义会话周期:通过ta.session.new()定义UTC时间21:00-21:00(对应UTC-4时区的17:00-次日17:00)作为每日周期,替代默认的UTC日周期。
  2. 跟踪自定义日数据:实时计算当前自定义日的最高、最低、收盘价,切换新周期时保存上一周期的数据,用于计算CPR指标。
  3. 替换周期触发条件:将原代码中基于UTC日的new_bar('D')替换为自定义会话的is_new_daily_session,确保CPR指标在目标时区的每日17:00更新。

内容的提问来源于stack exchange,提问作者Cam B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:54:55