You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script代码报错修复:输入不匹配问题及代码纠错

Pine Script v5 策略代码修复方案

核心问题排查与修复

1. 语法错误根源

原代码中自定义函数(如trailingStopLoss)的内部代码未按Pine Script要求缩进,导致编译器抛出「Mismatched input 'newStopLoss' expecting 'end of line without line continuation'」错误。Pine Script v5要求函数体语句必须缩进至少4个空格。

2. 功能逻辑缺陷

  • 缺失空头开仓指令,导致空头平仓指令无对应仓位
  • 风险参数设置错误(传入2代表200%账户风险,远超合理范围)
  • 追踪止损/止盈逻辑不符合实际需求,未基于持仓成本动态调整
  • 仓位计算逻辑错误,使用固定数值而非价格百分比计算止损幅度

修正后的完整代码

//@version=5
//@author=Wanderingyoung
strategy("均线多空策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, pyramiding=4)

// 策略参数
period = input.int(10, title="均线周期")
stopLossPercent = input.float(0.05, title="止损百分比", step=0.01) // 5%止损
profitTargetPercent = input.float(0.1, title="止盈百分比", step=0.01) // 10%止盈
riskPercent = input.float(0.02, title="单品种风险占比", step=0.01) // 每次交易最多亏账户2%权益

// 指标计算
movingAverage = ta.sma(close, period)

// 信号生成
buySignal = close > movingAverage
sellSignal = close < movingAverage

// 绘图
plotshape(buySignal, "买入信号", shape.labelup, location.belowbar, color=color.green, size=size.small, textcolor=color.white, text="买")
plotshape(sellSignal, "卖出信号", shape.labeldown, location.abovebar, color=color.red, size=size.small, textcolor=color.white, text="卖")
plot(movingAverage, title="均线", color=color.blue)

// 自定义函数 - 追踪止损(做多时用)
trailingStopLong(avgEntryPrice, currentPrice) =>
    // 当价格上涨时,止损位跟随上移(保留80%的涨幅)
    newStop = avgEntryPrice * (1 - stopLossPercent)
    if currentPrice > avgEntryPrice
        newStop := math.max(newStop, currentPrice * (1 - stopLossPercent))
    newStop

// 自定义函数 - 追踪止盈(做空时用)
trailingProfitShort(avgEntryPrice, currentPrice) =>
    // 当价格下跌时,止盈位跟随下移
    newTarget = avgEntryPrice * (1 + profitTargetPercent)
    if currentPrice < avgEntryPrice
        newTarget := math.min(newTarget, currentPrice * (1 + profitTargetPercent))
    newTarget

// 自定义函数 - 仓位计算
calcPositionSize(stopLossAmt) =>
    // 根据账户风险计算仓位:可承受亏损 = 账户权益 * 风险占比,仓位 = 可承受亏损 / 单股止损幅度
    riskAmount = strategy.equity * riskPercent
    posSize = riskAmount / stopLossAmt
    math.floor(posSize) // 取整避免小数仓位

// 开仓逻辑
if (buySignal)
    // 计算做多时的单股止损幅度
    stopLossAmt = close * stopLossPercent
    qty = calcPositionSize(stopLossAmt)
    strategy.entry("做多", strategy.long, qty=qty)

if (sellSignal)
    // 计算做空时的单股止损幅度
    stopLossAmt = close * stopLossPercent
    qty = calcPositionSize(stopLossAmt)
    strategy.entry("做空", strategy.short, qty=qty)

// 平仓逻辑
strategy.exit("平多", "做多", stop=trailingStopLong(strategy.position_avg_price, close), limit=close * (1 + profitTargetPercent))
strategy.exit("平空", "做空", limit=trailingProfitShort(strategy.position_avg_price, close), stop=close * (1 + stopLossPercent))

修正说明

  • 给所有参数添加可视化输入框,方便实时调整
  • 修复函数缩进问题,符合Pine Script语法规范
  • 新增空头开仓逻辑,完善多空双向交易
  • 调整风险参数为合理的百分比小数形式
  • 重构追踪止损/止盈逻辑,基于持仓成本动态调整
  • 优化仓位计算逻辑,根据账户风险和止损幅度计算合理仓位

内容的提问来源于stack exchange,提问作者wanderingyoung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:04:56