Pine Script V5报错:期望series float却用series string,数组及绘图问题求助
问题解决:Pine Script V5高成交量区间绘图报错及数组管理优化
核心错误分析
报错**"An argument of 'series string' type was used but a 'series float' is expected"**的直接原因:你将数组中存储的浮点价格值用str.tostring()转为了字符串,而box.new()的y坐标参数要求传入series float类型,类型不匹配导致报错。
修复步骤及优化代码
1. 修复类型不匹配问题
直接使用数组中存储的浮点数值作为box的上下边界,无需做字符串转换。
2. 优化数组与Box对象管理
- 新增
var box[]数组存储创建的box对象,避免重复创建导致的资源浪费 - 当数组长度超过设定的lookback值时,同步删除旧的价格区间数据和对应的box对象,彻底释放资源
完整修复代码
//@version=5 indicator("High Volume Liquidity Zones", overlay=true) int lookback = input.int(50, title="Lookback Period", minval=1) float volumeThreshold = input.float(1.5, title="Volume Threshold (Multiplier of Average Volume)", minval=1.0) int zoneWidth = input.int(5, title="Zone Width (in ticks)", minval=1) // Calculate average volume avgVolume = ta.sma(volume, lookback) // Identify significant volume levels significantVolume = volume > avgVolume * volumeThreshold // Store high/low of significant volume bars and their box objects var float[] zoneHighs = array.new_float() var float[] zoneLows = array.new_float() var box[] zoneBoxes = array.new_box() if significantVolume // Apply zone width (convert ticks to price) adjustedTop = high + zoneWidth * syminfo.mintick adjustedBottom = low - zoneWidth * syminfo.mintick array.push(zoneHighs, adjustedTop) array.push(zoneLows, adjustedBottom) // Create new box and store it newZoneBox = box.new(bar_index, adjustedTop, bar_index + lookback, adjustedBottom, border_color=color.new(color.blue, 0), bgcolor=color.new(color.blue, 90), text="Liquidity Zone") array.push(zoneBoxes, newZoneBox) // Maintain array size within lookback limit while array.size(zoneHighs) > lookback // Delete old box to free memory oldBox = array.shift(zoneBoxes) box.delete(oldBox) // Remove corresponding price data array.shift(zoneHighs) array.shift(zoneLows) // Highlight significant volume bars bgcolor(significantVolume ? color.new(color.orange, 90) : na, title="Significant Volume")
关键优化点说明
- 类型匹配修复:移除
str.tostring()转换,直接传递数组中的浮点价格值给box.new()的y参数 - Box生命周期管理:通过
box[]数组跟踪所有创建的box,超出lookback时用box.delete()彻底删除旧对象,避免内存泄漏 - 区间宽度生效:将输入的tick数转换为实际价格差,扩展区间上下限,符合需求设定
- 循环逻辑优化:使用
while替代if,确保一次出现多根高成交量K线时,数组长度仍能严格控制在lookback范围内
内容的提问来源于stack exchange,提问作者Seeschon
相关产品推荐
相关产品推荐

