PineScript v3报'if'匹配错误:期望无续行符的行尾
问题分析与解决方案
你的代码出现mismatched input 'if' expecting 'end of line without line continuation'错误,根源是前面的代码存在语法错误,导致解析器误判到后续的if语句块,具体错误点和修正如下:
错误点1:prevClose变量使用错误
你定义prevClose = close[1]得到的是单个标量值,而非数组,循环中调用prevClose[i]属于非法操作。应直接用close[i-1]获取第i根K线的前收盘价。
错误点2:fibonacci函数用法错误
PineScript v3没有接受(high, low, close, 23.6)参数的fibonacci函数,若要计算23.6%的斐波那契回调位,需手动计算(示例用当前周期高低点,若需固定高低点可另行处理)。
错误点3:手动计算OBV冗余且易出错
PineScript内置了ta.obv()函数,无需手动循环实现,直接调用即可避免循环中的语法问题。
修正后的完整代码
//@version=3 // Define variables length = 20 stdDev = 2 error_range = 0.5 fastLength = 12 slowLength = 26 macdLength = 9 rsiLength = 14 a = 0 // Calculate the moving average ma = sma(close, length) // Calculate the upper and lower bands upper = ma + stdDev * stddev(close, length) lower = ma - stdDev * stddev(close, length) // Calculate On Balance Volume - 使用内置函数 obv = ta.obv // Calculate MACD macd = ema(close, fastLength) - ema(close, slowLength) signal = ema(macd, macdLength) // Calculate RSI rsi = rsi(close, rsiLength) // Calculate Fibonacci retracements - 手动计算23.6%回调位 fib_23_6 = low + (high - low) * 0.236 // Define conditions for buy and sell signals buy = crossover(obv, upper) and obv > upper + error_range and crossover(macd, signal) and rsi < 30 and close > fib_23_6 sell = crossunder(obv, lower) and obv < lower - error_range and crossunder(macd, signal) and rsi > 70 and close < fib_23_6 // Set variable a to positive or negative based on buy or sell signals if (buy) a := abs(a) else if (sell) a := -abs(a) else a := 0
另外,注意PineScript v3中if块与else if之间无需空行,虽然这不是直接报错原因,但保持紧凑格式可避免解析器误判。
内容的提问来源于stack exchange,提问作者user20856357
相关产品推荐
相关产品推荐

