如何用PineScript编写该语句?代码第23行报数组类型变量不支持错误
PineScript v4 买卖信号代码报错修复与说明
报错原因
第23行的Syntax error: Variables of array type are not supported!错误,是因为:
macd()函数在v4中返回三元数组(MACD线、信号线、柱状图),直接将数组赋值给单个变量并做数值比较不符合语法要求- 代码中使用的
bb()并非官方内置函数,正确的布林带计算函数是bbands(),该函数同样返回三元数组(上轨、中轨、下轨)
修正后的完整代码
//@version=4 // 基于RSI、MACD和布林带的买卖信号策略 // RSI参数设置 rsiPeriod = 14 // MACD参数设置 fastLength = 12 slowLength = 26 macdLength = 9 // 布林带参数设置 length = 20 stdDev = 2 // 计算各技术指标 rsiVal = rsi(close, rsiPeriod) // 解构MACD返回值,提取MACD线和信号线,忽略柱状图 [macdLine, signalLine, _] = macd(close, fastLength, slowLength, macdLength) // 解构布林带返回值,提取上轨和下轨,忽略中轨 [upperBand, _, lowerBand] = bbands(close, length, stdDev) // 买入信号条件:RSI<30 + MACD线上穿0 + 收盘价低于布林带下轨 bool buySignal = rsiVal < 30 and crossover(macdLine, 0) and close < lowerBand // 卖出信号条件:RSI>70 + MACD线下穿0 + 收盘价高于布林带上轨 bool sellSignal = rsiVal > 70 and crossunder(macdLine, 0) and close > upperBand // 绘制买卖信号标记 plot(buySignal ? 1 : 0, "买入", color.green, 4) plot(sellSignal ? 1 : 0, "卖出", color.red, 4)
核心修正说明
- 数组解构赋值:针对返回数组的指标函数,使用
[变量1, 变量2, 变量3]的解构语法提取需要的序列,用_占位忽略不需要的部分 - 交叉信号实现:原代码仅判断MACD正负,未实现“穿越0轴”的逻辑,改用
crossover()(向上穿越)和crossunder()(向下穿越)函数满足信号要求 - 函数替换:将不存在的
bb()替换为官方标准函数bbands(),保证代码可正常运行
内容的提问来源于stack exchange,提问作者Baguette
相关产品推荐
相关产品推荐

