Pine Script v6动态生成合约名调用request.security获收盘价报错咨询
Pine Script v6动态获取期权合约收盘价解决方案
可以实现动态生成合约并获取收盘价,你遇到的Script requests too many securities. The limit is 40错误,是因为每次合约名变化时,request.security()都会发起新的证券请求,而Pine Script限制最多同时请求40个不同标的,频繁切换合约就会触发这个限制。
解决思路和代码示例
核心是减少不必要的重复请求,只在合约真正变更时发起新请求,避免每根K线都触发请求:
//@version=6 indicator("动态期权收盘价获取", overlay=false) // 示例变量(替换成你实际的变量) tradeSymbol = "BANKNIFTY" expiry = "250130" CE = "C" CEstrikePrice = 48300 // 记录上一次的合约名和收盘价 var string last_strike = "" var float strike_close = na // 生成当前合约名称 current_strike = tradeSymbol + expiry + CE + str.tostring(CEstrikePrice) // 仅当合约名称变化时,才发起新的请求 if current_strike != last_strike last_strike := current_strike // 使用request.security_lowerbar减少重复请求(适合低频切换场景) strike_close := request.security_lowerbar(current_strike, "5", close) else // 合约未变更时,沿用已有数据或同步最新收盘价 strike_close := request.security(current_strike, "5", close, barmerge.gaps_on, barmerge.lookahead_on) // 可视化收盘价 plot(strike_close, title="期权合约收盘价", color=color.new(color.blue, 0), linewidth=2)
额外优化建议
- 用
request.security_lowerbar()替代普通request.security():它会在合约切换时仅请求一次数据,而非每根K线都请求,大幅降低请求次数。 - 避免高频切换合约:如果你的策略需要频繁切换期权合约,建议限制切换频率(比如仅在特定时间或信号触发时切换),避免触发40个标的的上限。
- 清理过期请求:如果同时监控多个合约,及时移除不再需要的标的请求,保持活跃请求数在40以内。
内容的提问来源于stack exchange,提问作者Bhairav BankNifty
相关产品推荐
相关产品推荐

