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

PineScript V4回测策略报错:未声明标识符'macdVal'与'macdSignalVal'

PineScript V4 代码错误排查与修正

错误原因分析

  1. 环境不匹配:你用study()声明指标脚本,但调用了strategy.entry()/strategy.exit()等策略专属函数,导致脚本环境混乱,变量解析失败。
  2. MACD函数使用错误:PineScript V4的macd()返回三元组(MACD线、信号线、柱状图),直接赋值给单个变量会导致未声明标识符的错误,且无需手动计算信号线。

修正后的完整代码

//@version=4

// Paramètres de l'indicateur MACD
fastMA = 12
slowMA = 26
signalMA = 9

// Paramètres de l'indicateur RSI
lengthRSI = 14
overbought = 70
oversold = 30

// 替换study为strategy,适配策略函数
strategy("My Strategy", overlay=true)

// 解构MACD返回值,获取MACD线和信号线
[macdVal, macdSignalVal, _] = macd(fastMA, slowMA, signalMA)
rsiVal = rsi(close, lengthRSI)

// 变量初始化
buyPrice = 0.0
sellPrice = 0.0

// 入场条件
if crossover(macdVal, macdSignalVal) and rsiVal < oversold
    strategy.entry("Long", strategy.long)
else if crossunder(macdVal, macdSignalVal) and rsiVal > overbought
    strategy.entry("Short", strategy.short)

// 出场条件(修正:strategy.exit需要指定关联的入场ID)
if crossover(macdVal, macdSignalVal) or rsiVal > overbought
    strategy.exit("Exit Long", "Long")
else if crossunder(macdVal, macdSignalVal) or rsiVal < oversold
    strategy.exit("Exit Short", "Short")

// 绘图:MACD和信号线叠加在主图,RSI放在副图
plot(macdVal, color = color.blue, linewidth = 2)
plot(macdSignalVal, color = color.red, linewidth = 2)
plot(rsiVal, color = color.yellow, linewidth = 2, display=display.data_window)

关键修改说明

  • 将study()改为strategy():确保脚本运行在策略环境中,支持strategy.entry()等交易函数。
  • 使用解构语法处理macd()返回值:[macdVal, macdSignalVal, _] = macd(...),直接获取MACD线和信号线,忽略柱状图(用_占位)。
  • 修正strategy.exit()参数:需要指定关联的入场订单ID(比如"Long"),否则无法正确匹配平仓。
  • 调整RSI绘图位置:添加display=display.data_window让RSI显示在副图,避免和价格叠加导致显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:56:54