You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

错误原因

  1. 副作用函数与分辨率冲突:box.new()属于有副作用的绘图函数,当脚本设置了自定义resolution参数时,直接在主脚本流中调用这类函数会触发冲突——PineScript不允许在跨分辨率的上下文中执行修改绘图状态的操作。
  2. 变量索引错误:原代码中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:22:02