为何在Pine Script的if语句中使用两个float变量会报错?
Pine Script编译错误:float变量用于if条件导致的问题
问题描述
编写Pine Script代码时遇到编译错误,提示需传入bool变量以避免潜在错误,相关代码片段如下:
变量初始化代码
var float E1=na var float E2=na var float SL1=0 var float SL2=0 var bool waslong=na var bool wasstop=false var float mprice=na
变量赋值代码
e1=close[0] sl1=e1*0.993
触发报错的条件判断代码
mprice:=close[0] if mprice<= sl1 wasstop:=true
替换为以下代码则可正常运行:
if close[0]<= close[5] wasstop:=true
疑问:为何使用两个float变量在if语句中会出现该问题?
问题原因与解决方法
- 核心原因:你代码里的
sl1是未用var声明的普通变量,而mprice是持久化变量。脚本首次运行时,sl1可能还没完成赋值,导致mprice <= sl1的比较结果为na(非有效值)。但Pine Script的if条件要求必须是明确的bool类型(true/false),不允许传入na,所以触发了编译错误。 - 反观可运行的代码:
close[0]和close[5]都是K线序列的有效值,它们的比较结果始终是明确的bool值,不会出现na,因此能正常编译。
可行的解决办法
保证参与比较的两个变量在首次运行时都有明确的有效值,避免na进入条件判断:
- 给
sl1添加var声明,让它成为持久化变量,或者初始化时赋予默认有效值:
var float sl1 = 0.0 sl1 := close[0] * 0.993
- 在条件判断中加入非空检查,过滤
na的情况:
mprice:=close[0] if not na(sl1) and mprice <= sl1 wasstop:=true
内容的提问来源于stack exchange,提问作者all gm
相关产品推荐
相关产品推荐

