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

为何在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进入条件判断:

  1. 给sl1添加var声明,让它成为持久化变量,或者初始化时赋予默认有效值:
var float sl1 = 0.0
sl1 := close[0] * 0.993
  1. 在条件判断中加入非空检查,过滤na的情况:
mprice:=close[0]
if not na(sl1) and mprice <= sl1
    wasstop:=true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:51:08