求助:如何在TradingView上绘制仅覆盖最后5根K线的单个箱体?
修复Pine Script箱体绘制问题
问题根源
原代码存在两个核心问题:
- 未限制箱体创建时机:
box.new在每根K线都会执行,导致生成大量无效箱体(前序K线中left为na),同时造成资源浪费。 - 左边界计算错误:
bar_index-5会让箱体覆盖6根K线,而非目标的5根。
修复后的代码
// @version=5 indicator("One Box", overlay=true) if barstate.islast // 计算最后5根K线的左边界(包含当前K线) left_bar = bar_index - 4 // 获取这5根K线的最高、最低价 top_price = ta.highest(5) bottom_price = ta.lowest(5) // 创建箱体,可自定义颜色和透明度 box.new(left=left_bar, top=top_price, right=bar_index, bottom=bottom_price, color=color.new(color.blue, 90))
代码说明
- 限制创建时机:通过
barstate.islast确保仅在最后一根K线执行箱体创建,避免重复生成。 - 修正左边界:
bar_index - 4对应最后5根K线的起始索引(例如当前bar索引为10,则左边界为6,覆盖6-10共5根K线)。 - 匹配高低价范围:
ta.highest(5)和ta.lowest(5)在最后一根K线时,恰好取到bar_index-4到bar_index区间的极值,和箱体范围完全对应。 - 视觉优化:添加
color.new(color.blue, 90)设置半透明颜色,避免遮挡K线细节,可根据需求调整颜色和透明度参数。
内容的提问来源于stack exchange,提问作者PineEditor22
相关产品推荐
相关产品推荐

