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

PineScript报错:Series float传fun_arg[]及函数返回数组问题求助

问题解决思路与修正代码

错误原因分析

  1. 类型不匹配错误:percentR1是Pine Script的series float类型(逐K线的序列值),但你试图用array.size()去处理它——这个函数仅支持数组类型,因此触发类型不匹配报错。
  2. for循环错误:array.size()返回的是series int(随K线动态变化的序列值),而Pine Script的for循环要求终止值是常量数值,不能是动态序列;另外你试图用数组处理序列值的思路完全错误,Pine Script是矢量化语言,无需手动遍历序列元素。

修正方案

无需使用数组,直接对series类型的Williams %R值做矢量化运算即可,函数直接返回转换后的序列:

//@version=5
indicator("Williams Percent Range Average", shorttitle="Williams %R", format=format.price, precision=2, timeframe="", timeframe_gaps=true)

// Williams Settings
williamsGroup = "=== WILLIAMS ==="
lengthWilliams1 = input(title="Length", defval=13, group=williamsGroup)
lengthWilliams2 = input(title="Length", defval=21, group=williamsGroup)
lengthWilliams3 = input(title="Length", defval=34, group=williamsGroup)

lengthWilliamsAverage = math.round((lengthWilliams1 + lengthWilliams2 + lengthWilliams3) / 3)
srcWilliams = input(close, "Williams Source")

_pr(length) =>
    max = ta.highest(length)
    min = ta.lowest(length)
    100 * (srcWilliams - max) / (max - min)

percentR1 = _pr(lengthWilliams1)
percentR2 = _pr(lengthWilliams2)
percentR3 = _pr(lengthWilliams3)
percentR4 = _pr(lengthWilliamsAverage)

// 修正后的转换函数:直接处理series类型,无需数组
convertWilliams(williamsSeries) =>
    multiplier = 0.0625
    diff_n = williamsSeries + 80
    n_multi = diff_n * multiplier 
    new_n = (williamsSeries / (-4 + n_multi)) + 20
    new_n

// 调用转换函数得到转换后的序列
modifiedR1 = convertWilliams(percentR1)
modifiedR2 = convertWilliams(percentR2)
modifiedR3 = convertWilliams(percentR3)
modifiedR4 = convertWilliams(percentR4)

// 可选:绘制转换后的指标
plot(modifiedR1, color=color.new(color.blue, 0), title="Modified R1")
plot(modifiedR2, color=color.new(color.red, 0), title="Modified R2")
plot(modifiedR3, color=color.new(color.green, 0), title="Modified R3")
plot(modifiedR4, color=color.new(color.orange, 0), title="Modified Average R")

关键说明

  • Pine Script的核心是矢量化运算:对series类型的变量做运算时,会自动对每一根K线的数值执行计算,无需手动遍历或使用数组。
  • 修正后的convertWilliams函数直接接收series float参数,返回转换后的series float,完全适配原代码的变量类型。

内容的提问来源于stack exchange,提问作者PleaseSir MayIHaveSomeMore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:20:07