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

Pine Script分割字符串绘制hline时解决series数组类型错误

解决Pine Script中hline参数类型不匹配问题

问题说明

  • 需求目标:
    • 脚本获取输入字符串
    • 按|分割字符串为多个分组
    • 每个分组再按,分割,提取数值部分
    • 为每个数值绘制水平线
  • 报错信息:无法调用'hline',参数'price'='level'使用了series float类型,但需要input float类型

错误原因

Pine Script的hline()函数要求price参数是编译期常量(input float类型),原代码中通过str.tonumber()在bar_index == 0条件块内转换得到的level是运行时动态计算的series float类型,不符合函数参数类型要求,因此触发报错。

解决方案

核心是在全局作用域完成字符串解析,确保生成的水平线数值是编译期可识别的常量:

  1. 在全局作用域将输入字符串按|分割为分组数组
  2. 对每个分组,按,分割后过滤掉名称、空字符串,转换为float类型数组
  3. 遍历每个分组的数值数组,调用hline()绘制对应水平线

完整修正代码

//@version=5
indicator("Split Example", overlay=true)

// 输入字符串
paste_values_here = input(defval = "GEXFLIPS,147, 148, 150, 153, 156, 159, 161, 165, 166, 180, 181, 182, 183, 184, 186, 187, 188, 189|GEXLEVELSP,147, 157, 200|GEXLEVELSN,192, 205|GEXLEVELSHP,147, 200, 157|GEXLEVELSHN,205, 192|VOLLEVELSC,195|VOLLEVELSP,174, 186|VOLLEVELSHC,195|VOLLEVELSHP,174, 186", title="输入水平线索引字符串")

// 全局作用域解析字符串:按|分割为分组
groups = str.split(paste_values_here, "|")

// 定义颜色映射,对应不同分组
color_map = dict.new(string, color)
dict.set(color_map, "GEXFLIPS", color.blue)
dict.set(color_map, "GEXLEVELSP", color.green)
dict.set(color_map, "GEXLEVELSN", color.red)
dict.set(color_map, "GEXLEVELSHP", color.new(color.green, 50))
dict.set(color_map, "GEXLEVELSHN", color.new(color.red, 50))
dict.set(color_map, "VOLLEVELSC", color.orange)
dict.set(color_map, "VOLLEVELSP", color.purple)
dict.set(color_map, "VOLLEVELSHC", color.new(color.orange, 50))
dict.set(color_map, "VOLLEVELSHP", color.new(color.purple, 50))

// 遍历每个分组解析并绘制水平线
for group in groups
    group_parts = str.split(group, ",")
    if array.size(group_parts) < 2
        continue  // 跳过无数值的分组
    group_name = str.trim(array.get(group_parts, 0))
    // 提取数值部分,转换为float
    levels = array.new_float()
    for i = 1 to array.size(group_parts) - 1
        val_str = str.trim(array.get(group_parts, i))
        val = str.tonumber(val_str)
        if not na(val)
            array.push(levels, val)
    // 绘制当前分组的所有水平线
    group_color = dict.get(color_map, group_name, color.gray)
    for level in levels
        hline(level, group_name + " " + str.tostring(level), color=group_color)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:53:14