TradingView自定义Jurik RSX Pine Script函数报错修复求助
修复Jurik RSX Pine Script函数的语法错误
错误原因分析
你遇到的Mismatched input 'f90_' expecting 'end of line without line continuation'错误主要来自三个问题:
- 函数未声明
src参数,但代码中直接使用了该变量 - 未使用
var关键字声明需要保留历史值的变量,导致Pine Script解析器无法识别变量的历史引用(如f90_[1]) - 嵌套三元运算符的优先级不明确,引发语法解析冲突
修复后的完整代码
//@version=5 indicator("Jurik RSX Custom", overlay=false) jrsx(src, length)=> var float f90_ = 1.0 var float f88 = 5.0 var float f28 = 0.0 var float f30 = 0.0 var float f38 = 0.0 var float f40 = 0.0 var float f48 = 0.0 var float f50 = 0.0 var float f58 = 0.0 var float f60 = 0.0 var float f68 = 0.0 var float f70 = 0.0 var float f78 = 0.0 var float f80 = 0.0 var float f90 = 0.0 // 初始化与更新f90_和f88 f90_ := (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1]) + 1 : nz(f90_[1]) + 1 f88 := (nz(f90_[1]) == 0.0) and (length - 1 >= 5) ? length - 1.0 : 5.0 f8 = 100.0 * src f18 = 3.0 / (length + 2.0) f20 = 1.0 - f18 f10 = nz(f8[1]) v8 = f8 - f10 // 平滑计算 f28 := f20 * nz(f28[1]) + f18 * v8 f30 := f18 * f28 + f20 * nz(f30[1]) vC = f28 * 1.5 - f30 * 0.5 f38 := f20 * nz(f38[1]) + f18 * vC f40 := f18 * f38 + f20 * nz(f40[1]) v10 = f38 * 1.5 - f40 * 0.5 f48 := f20 * nz(f48[1]) + f18 * v10 f50 := f18 * f48 + f20 * nz(f50[1]) v14 = f48 * 1.5 - f50 * 0.5 // 绝对值平滑计算 f58 := f20 * nz(f58[1]) + f18 * abs(v8) f60 := f18 * f58 + f20 * nz(f60[1]) v18 = f58 * 1.5 - f60 * 0.5 f68 := f20 * nz(f68[1]) + f18 * v18 f70 := f18 * f68 + f20 * nz(f70[1]) v1C = f68 * 1.5 - f70 * 0.5 f78 := f20 * nz(f78[1]) + f18 * v1C f80 := f18 * f78 + f20 * nz(f80[1]) v20 = f78 * 1.5 - f80 * 0.5 // 状态判断与RSX计算 f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0 : 0.0 f90 := ((f88 == f90_) and (f0 == 0.0)) ? 0.0 : f90_ v4_ = ((f88 < f90) and (v20 > 1e-10)) ? (v14 / v20 + 1.0) * 50.0 : 50.0 rsx = math.clamp(v4_, 0.0, 100.0) rsx // 使用示例 lengthInput = input.int(14, "Length") rsxValue = jrsx(close, lengthInput) plot(rsxValue, color=color.blue, title="Jurik RSX") hline(70, "Overbought", color=color.red) hline(30, "Oversold", color=color.green)
关键修复说明
- 添加
src参数:函数需要接收价格数据源(如close)作为输入,否则会找不到src变量 - 用
var声明历史变量:所有需要引用上一根bar值([1])的变量必须用var声明,确保Pine Script保留其跨bar的状态 - 使用
:=更新变量:对于var声明的变量,需要用:=赋值来更新其值,而不是= - 替换嵌套三元的边界判断:用
math.clamp()替代原有的嵌套三元运算符,简化代码同时避免语法歧义 - 调整浮点数精度判断:将
0.0000000001替换为1e-10,代码更简洁且精度一致
内容的提问来源于stack exchange,提问作者Krishnendu Bhattacharyya
相关产品推荐
相关产品推荐

