PineScript仅绘制当前K线对应最近5根K线箱体的实现问题
5-K线箱体优化方案
解决两个核心需求:仅保留最近5个箱体 + 透明填充
核心思路
- 用数组存储箱体ID,超过5个就删除最早生成的箱体
- 通过
color.new()函数为箱体设置带透明度的填充色
修改后的完整代码
//@version=5 indicator("5-K线箱体", overlay=true) // 初始化存储箱体ID的数组,var关键字确保仅初始化一次 var box[] boxList = array.new_box() // 计算5根K线的真实最高/最低价(按需求替换原代码的收盘价取值) topPrice = ta.highest(high, 5) bottomPrice = ta.lowest(low, 5) // 仅在最新K线生成箱体,避免重复创建 if barstate.islast // 创建带透明填充的箱体:第二个参数为透明度(0=完全不透明,100=完全透明) currentBox = box.new(bar_index - 5, topPrice, bar_index, bottomPrice, border_color=color.green, border_width=1, bgcolor=color.new(color.green, 80)) // 将新箱体加入数组 array.push(boxList, currentBox) // 数组长度超过5时,删除最早的箱体 if array.size(boxList) > 5 oldestBox = array.shift(boxList) box.delete(oldestBox)
关键细节说明
- 箱体数量控制:
var声明的数组只会在脚本启动时初始化一次,每次生成新箱体后检查数组长度,超过5就用array.shift()取出并删除第一个(最早的)箱体,实现仅保留最近5个箱体的效果 - 透明填充调整:
color.new(color.green, 80)中的80是透明度参数,可根据需求调整为0-100之间的数值,数值越大填充效果越透明 - 价格取值修正:原代码用收盘价计算最高/最低价,按需求改为K线的真实最高
high和最低low,若需求是基于收盘价计算,改回close即可
内容的提问来源于stack exchange,提问作者DeshBhakt
相关产品推荐
相关产品推荐

