ThinkScript转Pine Script v5语法错误求助:ChgRatio行报错
Pine Script v5 条件语句语法错误修复
你的问题出在第三行的if语句语法上,Pine Script v5的条件表达式必须严格遵循if 条件 then 结果1 else 结果2的结构,你省略了then和else关键字,导致语法解析失败。
修正后的完整代码(适配原ThinkScript的均线类型选择)
//@version=5 indicator("ChgRatio Conversion", overlay=false) // 定义输入参数,对应原ThinkScript的Length和averageType Length = input.int(14, title="Length") averageType = input.string("EMA", title="Average Type", options=["SMA", "EMA", "WMA"]) // 替换为你实际使用的变量X,示例用close X = close priceChange = X - X[1] // 根据选择的均线类型计算指标 FNetChgAvg = switch averageType "SMA" => ta.sma(priceChange, Length) "EMA" => ta.ema(priceChange, Length) "WMA" => ta.wma(priceChange, Length) FTotChgAvg = switch averageType "SMA" => ta.sma(math.abs(priceChange), Length) "EMA" => ta.ema(math.abs(priceChange), Length) "WMA" => ta.wma(math.abs(priceChange), Length) // 修正后的条件语句 FChgRatio = if FTotChgAvg != 0 then FNetChgAvg / FTotChgAvg else 0 plot(FChgRatio, title="Chg Ratio", color=color.blue)
关键修正点
- 第三行补充
then和else关键字,符合Pine Script v5语法要求:FChgRatio = if FTotChgAvg != 0 then FNetChgAvg / FTotChgAvg else 0 - 额外适配了原ThinkScript中
averageType参数的多类型选择,通过switch语句实现不同均线类型的切换。
简化版(仅保留EMA)
如果不需要多种均线类型,只保留EMA的话,修正后的代码可以是:
//@version=5 indicator("ChgRatio EMA", overlay=false) Length = input.int(14, title="Length") X = close // 替换为你实际使用的变量X FNetChgAvg = ta.ema(X - X[1], Length) FTotChgAvg = ta.ema(math.abs(X - X[1]), Length) // 修正后的条件语句 FChgRatio = if FTotChgAvg != 0 then FNetChgAvg / FTotChgAvg else 0 plot(FChgRatio, title="Chg Ratio", color=color.blue)
内容的提问来源于stack exchange,提问作者microhtml
相关产品推荐
相关产品推荐

