开启confirm9E时触发历史K线引用过多(5235)错误求助
问题排查与解决
错误说明
开启confirm9E后触发的错误提示翻译为:"该指标引用了过多历史K线(5235)"
问题根源
你的代码在confirm9E生效时,会通过循环遍历i=0到9的历史偏移,去检查transport_buy[i]和transport_sell[i]。如果transport_buy/transport_sell本身是依赖大量历史数据的指标(比如包含长周期均线、多K线回溯计算),叠加循环的偏移引用,会导致脚本需要加载的历史K线总量超出平台限制。
修复方案
1. 用内置函数替代循环,优化历史引用
TradingView的Pine Script内置了高效的历史检查函数,能替代手动循环,大幅降低历史回溯需求:
if confirm9E mark_long := ta.barssince(transport_buy) <= 9 ? 1 : 0 mark_short := ta.barssince(transport_sell) <= 9 ? 1 : 0
这段代码和原循环逻辑完全一致——检查最近10根K线(含当前)内是否出现过transport_buy/transport_sell,但内置函数的执行效率远高于手动遍历。
2. 明确设置最大历史回溯限制
在脚本开头声明版本后,通过indicator()的max_bars_back参数指定允许的最大历史K线引用数:
//@version=5 indicator("你的指标名称", max_bars_back=5000)
数值需根据实际需求调整,不能超过平台上限,同时要覆盖指标正常运行所需的历史数据量。
3. 简化transport_buy/transport_sell的计算逻辑
如果这两个变量本身依赖超长周期计算(比如ta.sma(close, 5000)),需缩短周期或改用更轻量化的计算方式,从根源减少历史数据的需求。
内容的提问来源于stack exchange,提问作者Erfan jafari
相关产品推荐
相关产品推荐

