如何在TradingView分屏的30m及5m图表上绘制同一水平线?
在TradingView分屏的5m图表绘制30m周期计算的水平线
要在5m次级时间框架图表上绘制30m主框架计算出的水平线,核心是跨周期调用主时间框架的计算结果,使用TradingView内置的request.security()函数即可实现。
完整代码示例
//@version=5 indicator("跨周期水平线", overlay=true) // 定义对应颜色(和你原代码的lgrLevelColor匹配) lgrLevelColor = color.new(color.blue, 0) // 1. 调用30m周期数据计算目标水平线数值 [upperlimit_30m] = request.security(syminfo.tickerid, "30", [close[1] - (close[1] - low[2])]) // 2. 在当前5m图表绘制并更新水平线 var line upperLine = na // 仅当30m周期的数值更新时,创建/更新线条 if ta.change(upperlimit_30m) upperLine := line.new(bar_index, upperlimit_30m, bar_index + 1, upperlimit_30m, color=lgrLevelColor, extend=extend.right) else // 数值未变化时,持续把线条终点延伸到最新bar if not na(upperLine) line.set_xy2(upperLine, bar_index, upperlimit_30m)
关键逻辑说明
request.security(syminfo.tickerid, "30", ...):指定调用当前标的的30m周期数据,计算并返回我们需要的upperlimit值,这是实现跨周期数据传递的核心。ta.change(upperlimit_30m):仅在30m周期的水平线数值发生变化时才更新线条,避免在5m的每根K线上重复创建线条,减少资源占用。var line upperLine = na:用var声明线条变量,确保它只会被初始化一次,不会随5m的每根K线重置。- 线条延伸:通过
line.set_xy2持续更新线条终点到最新K线,实现和原代码extend.right一致的向右延伸效果。
额外提示
如果需要让指标同时适配30m和5m图表,可以添加时间框架判断逻辑:
if timeframe.is("30") // 原30m图表的绘制逻辑 upperlimit = close[1] - (close[1] - low[2] ) line.new(bar_index - 2, upperlimit, bar_index, upperlimit, color = lgrLevelColor, extend = extend.right) else if timeframe.is("5") // 上述5m图表的绘制逻辑 [upperlimit_30m] = request.security(syminfo.tickerid, "30", [close[1] - (close[1] - low[2])]) // ...后续线条绘制代码
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

