Pine Script报错‘未声明标识符slowHA’问题求助
Pine Script报错‘未声明标识符slowHA’问题求助
嘿,我来帮你排查这个问题!首先看你遇到的Undeclared identifier 'slowHA'错误,主要有两个核心原因:
1. 变量声明语法用错了
在Pine Script v4里,:=是赋值运算符,只能给已经用=声明过的变量更新值,不能用来创建新变量。你直接用fastHA := sma(...)和slowHA := sma(...),相当于没先告诉编译器这两个变量的存在,自然会报错找不到它们。
2. 跨时间周期数据的获取方式不对
你想获取小时线的20/50周期SMA,直接在sma函数里加"hour"参数是行不通的。Pine Script里要调取其他时间框架的数据,必须用request.security()函数来实现。
下面是修正后的完整代码,我标注了关键修改点:
//@version=4 strategy("MA Crossover") // Define the daily moving averages fastDA = sma(close, 20) slowDA = sma(close, 50) // Define the hourly moving averages - 核心修改部分 // 先调取1小时周期的收盘价,再计算对应均线 hourly_close = request.security(syminfo.tickerid, "60", close) fastHA = sma(hourly_close, 20) slowHA = sma(hourly_close, 50) // Buy when fast DA is above slow DA and fast HA crosses above slow HA longCondition = fastDA > slowDA and crossover(fastHA, slowHA) if (longCondition) strategy.entry("Long", strategy.long) // Sell when fast HA crosses under slow HA(和你描述的平仓逻辑完全匹配) shortCondition = crossunder(fastHA, slowHA) if (shortCondition) strategy.close("Long") // Plot the moving averages plot(fastDA, color = color.red, linewidth = 2, title = "Fast DA") plot(slowDA, color = color.blue, linewidth = 2, title = "Slow DA") plot(fastHA, color = color.orange, linewidth = 1, title = "Fast HA", style = plot.style_line) plot(slowHA, color = color.green, linewidth = 1, title = "Slow HA", style = plot.style_line)
简单说下修改细节:
- 用
request.security(syminfo.tickerid, "60", close)获取当前标的1小时周期的收盘价("60"代表60分钟,也就是1小时) - 改用
=来声明fastHA和slowHA变量,符合Pine v4的语法规范 - 简化了平仓条件,完全贴合你描述的“20小时均线下穿50小时均线时平仓”的逻辑
这样修改后,既解决了未声明标识符的错误,也能正确获取小时线的均线数据啦!
备注:内容来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

