Pine Script自定义函数提取颜色值报cColor修改错误咨询
问题原因
- Pine Script对自定义函数有强制作用域限制:不允许在普通函数内部直接修改全局作用域的变量,这就是你碰到
Cannot modify global variable 'cColor' in function报错的核心原因。 - 你写的
lset函数没有定义返回值,函数内部计算得到的颜色、temp值默认仅在函数内部生效,外部作用域无法读取。 - 你定义的入参
col在函数内部没有被调用,属于冗余参数。
正确实现方式
使用Pine Script原生支持的多返回值语法,把需要提取的颜色值、其他计算结果作为元组返回,调用函数时直接用变量承接返回值即可,完全不需要在函数内操作全局变量。
修正后的函数代码:
lset(l, x1, y1, x2, y2) => line.set_xy1(l, x1, y1) line.set_xy2(l, x2, y2) line.set_width(l, 5) line.set_style(l, line.style_solid) // 先把计算好的颜色存为函数局部变量 cColor = y2 > y1 ? color.new(#ff1100, 0) : color.new(#39ff14, 0) line.set_color(l, cColor) temp = line.get_price(l, bar_index) // 按顺序返回需要外部调用的所有值 [cColor, temp]
调用方法
调用函数时按返回顺序承接值,拿到的cColor可以直接用于K线着色、绘制其他指标,不会触发任何作用域报错:
// 示例:先创建空line对象 myLine = line.new(na, na, na, na) // 调用lset函数,同时接住两个返回值 [lineColor, lineTempPrice] = lset(myLine, bar_index[10], low[10], bar_index, high) // 用提取到的颜色给K线着色 barcolor(lineColor) // 也可以直接用返回的价格值绘制指标线 plot(lineTempPrice, color=lineColor, linewidth=2)
注意:Pine Script中的颜色值建议用
color.new()封装透明度参数,直接写十六进制色值在部分版本会触发类型不匹配报错。
内容的提问来源于stack exchange,提问作者Paul Townsend
相关产品推荐
相关产品推荐

