Pine Script 5中switch语句语法错误求助
问题描述
编程经验不足,首次尝试使用Pine Script的switch函数,无法排查代码问题。报错信息为“Syntax error at input 'US02Y'”,switch语句中首个“US02Y”条件前的括号被红色下划线标记为错误位置。相关代码如下:
// Get the current ticker currentTicker = syminfo.ticker // Get the related ivol ticker string ivolString = switch ticker.standard(currentTicker) "US02Y" => "CBOE:VXTLT" "US10Y" => "CBOE:VXTLT" "US30Y" => "CBOE:VXTLT" "TLT" => "CBOE:VXTLT" "SPX500USD" => "TVC:VIX" "SPX" => "TVC:VIX" "SPY" => "TVC:VIX" "QQQ" => "NASDAQ:VOLQ" "NDQ" => "NASDAQ:VOLQ" "US100" => "NASDAQ:VOLQ" "DJI" => "CBOE:VXD" "DIA" => "CBOE:VXD" "IWM" => "CBOE:RVX" "RUT" => "CBOE:RVX" "US2000" => "CBOE:RVX" "EEM" => "CBOE:VXEEM" "EFA" => "CBOE:VXEFA" "EWZ" => "CBOE:VXEWZ" "GOLD" => "CBOE:GVZ" "GLD" => "CBOE:GVZ" "FXI" => "CBOE:VXFXI" "USOIL" => "CBOE:OVX" "WTI" => "CBOE:OVX" "FXE" => "CBOE:EVZ" "EURUSD" => "CBOE:EVZ" "IBM" => "CBOE:VXIBM" "GOOGL" => "CBOE:VXGOG" "AMZN" => "CBOE:VXAZN" "AAPL" => "CBOE:VXAPL" => na ivolSymbol = request.security(ivolString, "", close) ivolSymbol_availabilityCheck = str.contains(ivolString, "V") ? true : false
问题排查与解决
报错核心原因是Pine Script对switch语句的缩进有严格要求:switch表达式的下一行开始,每个case必须使用至少4个空格(或1个制表符)缩进,你当前仅用1个空格,编译器无法识别case结构,因此抛出语法错误。
修正后的代码(注意每个case前的4个空格缩进):
// Get the current ticker currentTicker = syminfo.ticker // Get the related ivol ticker string ivolString = switch ticker.standard(currentTicker) "US02Y" => "CBOE:VXTLT" "US10Y" => "CBOE:VXTLT" "US30Y" => "CBOE:VXTLT" "TLT" => "CBOE:VXTLT" "SPX500USD" => "TVC:VIX" "SPX" => "TVC:VIX" "SPY" => "TVC:VIX" "QQQ" => "NASDAQ:VOLQ" "NDQ" => "NASDAQ:VOLQ" "US100" => "NASDAQ:VOLQ" "DJI" => "CBOE:VXD" "DIA" => "CBOE:VXD" "IWM" => "CBOE:RVX" "RUT" => "CBOE:RVX" "US2000" => "CBOE:RVX" "EEM" => "CBOE:VXEEM" "EFA" => "CBOE:VXEFA" "EWZ" => "CBOE:VXEWZ" "GOLD" => "CBOE:GVZ" "GLD" => "CBOE:GVZ" "FXI" => "CBOE:VXFXI" "USOIL" => "CBOE:OVX" "WTI" => "CBOE:OVX" "FXE" => "CBOE:EVZ" "EURUSD" => "CBOE:EVZ" "IBM" => "CBOE:VXIBM" "GOOGL" => "CBOE:VXGOG" "AMZN" => "CBOE:VXAZN" "AAPL" => "CBOE:VXAPL" => na ivolSymbol = request.security(ivolString, "", close) ivolSymbol_availabilityCheck = str.contains(ivolString, "V") ? true : false
补充说明:Pine Script的switch语法中,缩进是区分代码块的关键,所有case分支必须与switch表达式保持正确的缩进层级,否则会被编译器判定为语法错误。
内容的提问来源于stack exchange,提问作者Skylimit
相关产品推荐
相关产品推荐

