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

TradingView Pine Script security函数if内调用报错修复方案

问题修复方案

错误原因

Pine Script明确限制security()、financial()这类全局计算函数不能在if、for等分支/循环代码块内调用,这类函数需要在每根K线的全局上下文完成计算,条件分支会破坏其计算逻辑导致报错。

修复思路

将security()调用移到全局作用域预先计算,再通过三元运算符根据判断条件选择对应取值即可,无需把函数调用放到if分支内。

修复后完整代码

var float close_lock    = na
var float open_lock     = na
var float high_lock     = na
var float low_lock      = na

var bool normal_ticker_check = syminfo.type != 'spread'
// 全局预先计算security取值,不放在if块内
_sec_close = security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , close ,barmerge.gaps_off, barmerge.lookahead_on) 
_sec_open = security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , open  ,barmerge.gaps_off, barmerge.lookahead_on) 
_sec_high = security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , high  ,barmerge.gaps_off, barmerge.lookahead_on) 
_sec_low = security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , low   ,barmerge.gaps_off, barmerge.lookahead_on) 

// 用三元运算符替代if分支完成赋值
close_lock := normal_ticker_check ? _sec_close : close
open_lock := normal_ticker_check ? _sec_open : open
high_lock := normal_ticker_check ? _sec_high : high
low_lock := normal_ticker_check ? _sec_low : low

改动说明

  • 把原if块内的4个security()调用全部移到全局作用域预先计算,存储到临时变量中
  • 去掉原if/else分支逻辑,改用三元运算符条件 ? 符合条件取值 : 不符合条件取值完成变量赋值,逻辑和原代码完全一致,同时符合Pine Script语法要求
  • 优化了normal_ticker_check的赋值逻辑,直接在var定义时赋值,无需重复计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:05