如何在PineScript v4中绘制矩形?代码报错求助
PineScript v4 创建矩形报错解决方法
问题代码
b = box.new(bar_index[100], highest(high,50), bar_index[10], lowest(low, 50), color.purple, 1, line.style_solid, extend.none, xloc.bar_index, color.new(color.purple, 90)) box.delete(b[1])
报错信息
The 'resolution' argument is incompatible with functions that have side effects.
错误原因
- 副作用函数与分辨率冲突:
box.new()属于有副作用的绘图函数,当脚本设置了自定义resolution参数时,直接在主脚本流中调用这类函数会触发冲突——PineScript不允许在跨分辨率的上下文中执行修改绘图状态的操作。 - 变量索引错误:原代码中
b是单根bar创建的单个box对象,b[1]尝试访问上一根bar的b值,但b未用var声明,每根bar都会重新赋值,导致索引无意义且触发额外的副作用问题。
修正方案
用var关键字持久化box变量,加入条件控制绘图时机,避免重复执行副作用操作:
//@version=4 study("自定义矩形", overlay=true) // 用var初始化变量,仅在脚本启动时创建一次 var box rect = na // 控制矩形创建/更新的时机(示例:每100根bar更新一次) if bar_index % 100 == 0 // 删除旧矩形(如果存在) if not na(rect) box.delete(rect) // 创建新矩形 rect = box.new(bar_index[100], highest(high, 50), bar_index[10], lowest(low, 50), color.purple, 1, line.style_solid, extend.none, xloc.bar_index, color.new(color.purple, 90))
关键修改说明
var声明确保变量rect不会在每根bar都重新初始化,避免重复创建对象导致的副作用堆积。- 条件判断(
bar_index % 100 == 0)限制绘图操作的执行频率,避免与自定义分辨率的脚本逻辑冲突。 - 先删除旧矩形再创建新的,保持界面整洁,同时符合PineScript对副作用操作的执行规则。
内容的提问来源于stack exchange,提问作者coure2011
相关产品推荐
相关产品推荐

