如何修改TradingView CPR脚本实现每日凌晨4点绘制枢轴区间
问题原因
原脚本存在两处逻辑问题,导致无法在凌晨4点提前绘制CPR:
- 直接调用交易所预设的日K周期数据源,默认日切时间和要求的凌晨4点计算规则不匹配
- 跨周期调用函数默认开启数据对齐校验,必须等当日第一根K线完全走完才会返回前一交易日的枢轴计算值,即便前一交易日的高低收数据在收盘时已经完全固化。
修改思路
- 自定义日K切分规则,将每日K线的重置时间设为凌晨4点,对齐预期的计算时间节点
- 调整跨周期函数的参数,关闭不必要的延迟,在凌晨4点日切完成的第一时间,就拉取已收盘的前一交易日数据计算CPR,不需要等当日开盘K线走出
- 完全保留原脚本的CPR计算公式、绘制样式,不引入未来函数,不会出现数值漂移
修改后完整代码
study(title="Central Pivot Range", shorttitle="CPR", overlay=true) sd = input(true, title="Show Daily Pivots?") //Pivot Range Calculations - Mark Fisher pivot = (high + low + close ) / 3.0 bc = (high + low ) / 2.0 tc = (pivot - bc) + pivot // 自定义日切规则:每日凌晨4点重置日K,无延迟拉取上一交易日CPR值 // 如需调整计算时间,修改下方"0400-0400"即可,格式为24小时制的"开始时间-结束时间" daily_cutoff = "0400-0400" custom_daily_ticker = ticker.new(syminfo.prefix, syminfo.ticker, daily_cutoff, "D") dtime_pivot = request.security(custom_daily_ticker, "D", pivot[1], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) dtime_bc = request.security(custom_daily_ticker, "D", bc[1], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) dtime_tc = request.security(custom_daily_ticker, "D", tc[1], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) plot(sd and dtime_pivot ? dtime_pivot : na, title="Daily Pivot",style=circles, color=fuchsia,linewidth=3) plot(sd and dtime_bc ? dtime_bc : na, title="Daily BC",style=circles, color=blue,linewidth=3) plot(sd and dtime_tc ? dtime_tc : na, title="Daily TC",style=circles, color=blue,linewidth=3)
使用注意事项
- 加载脚本前请将图表时区设置为交易对应的时区,保证凌晨4点的日切时间计算准确
- 如果需要调整每日枢轴的计算时间,直接修改代码中
daily_cutoff的时间值即可,比如要改为凌晨5点计算就替换为"0500-0500" - 所有CPR数值均基于已收盘的前一交易日行情数据计算,不存在未来函数,盘中不会出现数值偏移
内容的提问来源于stack exchange,提问作者maumercado
相关产品推荐
相关产品推荐

