Pine Script代码第27行语法错误(输入‘i’时出错)求助
解决Pine Script语法错误及逻辑问题
嗨,我帮你定位到了代码里的几个问题,正是这些问题引发了第27行的语法错误,还有一些潜在的逻辑问题也一起给你修正了:
错误原因分析
- 数组访问逻辑错误:你在刚执行
array.push(longStopLoss, ...)后,直接用longStopLoss[i]访问元素,但Pine Script的数组不能这样直接用索引变量访问刚插入的元素,而且当处理多笔开仓时,循环变量i和数组索引会出现不匹配的情况,这直接导致了语法报错。 - 持仓方向判断不准确:你用
strategy.position_size > 0判断整体持仓方向,但在循环处理每一笔独立开仓时,应该判断单笔开仓的方向,否则所有开仓都会套用同一个方向的逻辑。 strategy.exit参数误用:profit和loss参数接收的是入场价到目标价的点数差,不是价格乘以100,这种写法会导致止盈止损价格完全错误。
修正后的完整代码
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © VaheHV //@version=5 strategy("Momentum Signal", overlay=true) // MACD 指标计算 ema12 = ta.ema(close, 12) ema26 = ta.ema(close, 26) macdLine = ema12 - ema26 macdSignal = ta.ema(macdLine, 9) // 交叉信号判断 crossover = ta.crossover(macdLine, macdSignal) crossunder = ta.crossunder(macdLine, macdSignal) // 多头开仓条件 if crossover and macdLine < 0 and macdSignal < 0 and close > ta.ema(close, 200) strategy.entry("Long", strategy.long) // 空头开仓条件 if crossunder and macdLine > 0 and macdSignal > 0 and close < ta.ema(close, 200) strategy.entry("Short", strategy.short) // 为每笔开仓设置止损止盈 if strategy.opentrades != 0 for i = 0 to strategy.opentrades - 1 entryPrice = strategy.opentrades.entry_price(i) // 判断当前这笔开仓是多头还是空头 isLongPosition = strategy.opentrades.size(i) > 0 if isLongPosition // 多头止损:最近15根K线的最低价 longStopLevel = ta.lowest(low, 15) // 多头止盈:1.5倍风险收益比 longProfitLevel = entryPrice + 1.5 * (entryPrice - longStopLevel) // 绑定对应开仓的退出指令,设置唯一ID避免冲突 strategy.exit("LongClose_" + str.tostring(i), "Long", limit=longProfitLevel, stop=longStopLevel) else // 空头止损:最近15根K线的最高价 shortStopLevel = ta.highest(high, 15) // 空头止盈:1.5倍风险收益比 shortProfitLevel = entryPrice - 1.5 * (shortStopLevel - entryPrice) // 绑定对应开仓的退出指令 strategy.exit("ShortClose_" + str.tostring(i), "Short", limit=shortProfitLevel, stop=shortStopLevel)
关键修正说明
- 移除了冗余的数组存储,直接在循环中计算每笔开仓的止损止盈价格,避免数组访问错误
- 用
strategy.opentrades.size(i)判断单笔开仓的方向,确保每笔开仓的逻辑独立 - 使用
limit和stop参数直接指定止盈止损价格,逻辑更直观,避免点数计算错误 - 给每个退出指令设置了唯一ID(比如
LongClose_0),确保每笔开仓对应独立的退出规则,不会出现指令冲突
内容的提问来源于stack exchange,提问作者VaheHV
相关产品推荐
相关产品推荐

