Pine Script编译错误求助:第6行输入'(',期望ID
Pine Script v5编译错误排查:第6行'('不匹配问题
错误原因
第6行的import("sma")是完全错误的写法:
- Pine Script v5中
sma()是内置技术分析函数,无需导入 - 正确的
import语法用于导入公共脚本,格式为import <用户名>/<脚本名> as <别名>,括号包裹函数名的写法违反语法规则,导致编译器识别到不匹配的括号,触发"输入'('不匹配,期望ID"的报错
修复后的完整代码
// © Gittiwilo //@version=5 strategy("EMA Cross Strategy", overlay=true) // 补充策略初始化,这是策略脚本的必要结构 // 定义参数:均线周期、止损止盈幅度 emaShortPeriod = 10 emaLongPeriod = 20 stopLoss = 0.005 // 原0.5为50%幅度,调整为0.5%更符合常规交易逻辑,可按需修改 takeProfit = 0.015 // 原1.5为150%幅度,调整为1.5%,可按需修改 // 计算均线(注:原代码注释写EMA但调用sma,若需EMA可改为ta.ema) emaShort = ta.sma(close, emaShortPeriod) emaLong = ta.sma(close, emaLongPeriod) // 生成多空入场信号 longEntry = ta.cross(emaShort, emaLong) shortEntry = ta.cross(emaLong, emaShort) // 绘制入场信号标记 plotchar(longEntry, "Long Entry", "▲", location.belowbar, color=color.green, transp=0) plotchar(shortEntry, "Short Entry", "▼", location.abovebar, color=color.red, transp=0) // 策略交易逻辑:入场后设置止损止盈 if (longEntry) strategy.entry("Long", strategy.long) strategy.exit("Long Exit", "Long", stop=strategy.position_avg_price * (1 - stopLoss), limit=strategy.position_avg_price * (1 + takeProfit)) if (shortEntry) strategy.entry("Short", strategy.short) strategy.exit("Short Exit", "Short", stop=strategy.position_avg_price * (1 + stopLoss), limit=strategy.position_avg_price * (1 - takeProfit)) // 绘制均线 plot(emaShort, color=color.green, title="Short SMA") plot(emaLong, color=color.red, title="Long SMA")
额外修复说明
- 补充
strategy()声明:原代码缺失策略初始化语句,这是运行策略的必要前提 - 修正内置函数调用:Pine Script v5要求技术分析函数需加
ta.前缀(如ta.sma、ta.cross) - 调整止损止盈数值:原参数幅度过于激进,修改为常规交易中的百分比幅度
- 优化信号位置:多单标记放在K线下方、空单放在上方,符合视觉习惯
- 拆分入场与止盈止损逻辑:原代码直接在
strategy.entry中设置止盈止损会因无持仓均价报错,改用strategy.exit在入场后设置
内容的提问来源于stack exchange,提问作者Gittiwilo
相关产品推荐
相关产品推荐

