Pine Script:收盘价与回溯期高低价对比绘图报错求助
问题分析与解决方案
你遇到的错误核心原因是 plotshape 函数的第一个参数预期接收布尔类型的序列,但你的代码传入了整数类型的序列;另外,你用 var 声明 plotter 变量是多余的——因为你每根K线都在重新赋值它。
简化修复方案(推荐)
直接将突破条件作为参数传入 plotshape,同时区分向上/向下突破的显示样式,让信号更直观:
//@version=5 indicator("突破信号标记", overlay=true) lookbackPeriod = input(5, "回溯周期") lowP = lowest(lookbackPeriod) highP = highest(lookbackPeriod) // 收盘价突破上方最高价时,在K线上方绘制绿色向上三角 plotshape(close > highP, title="向上突破", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small) // 收盘价跌破下方最低价时,在K线下方绘制红色向下三角 plotshape(close < lowP, title="向下突破", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small)
关键修改点:
- 移除了冗余的
plotter变量,直接将突破逻辑作为plotshape的触发条件 - 拆分两个
plotshape调用,分别处理向上/向下突破的显示位置和样式,避免信号混淆 - 添加
//@version=5声明脚本版本,避免版本兼容问题 - 加入
overlay=true,确保形状绘制在K线图上方
若仍需使用变量跟踪突破状态
可以将变量定义为布尔类型序列,符合 plotshape 的参数要求:
//@version=5 indicator("突破信号标记", overlay=true) lookbackPeriod = input(5, "回溯周期") lowP = lowest(lookbackPeriod) highP = highest(lookbackPeriod) isBreakout = close < lowP or close > highP // 触发突破时绘制形状(注:此方式会在所有突破时都显示在K线上方,不如拆分方案直观) plotshape(isBreakout, title="突破信号", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small)
原代码的问题细节:
var int plotter = na中var关键字是多余的,因为你每根K线都通过:=重新赋值,不需要保留初始值- 整数类型的序列(0/1)在部分Pine Script版本中会触发类型不匹配错误,而布尔类型(true/false)是
plotshape的标准输入类型
内容的提问来源于stack exchange,提问作者Danger Ranger
相关产品推荐
相关产品推荐

