Pine Script使用bar_index出现运行时错误的原因及解决方法咨询
Pine Script 运行时错误原因及修复方案
错误产生原因
你代码中触发错误的核心原因是使用了**动态计算的偏移量n**来引用历史K线的高低价:
n = bar_index < targetBarIndex ? na : bar_index - targetBarIndex这个值会随着K线推进不断变大,Pine Script无法提前预判该系列需要的最大历史回溯长度,当实际回溯长度超出Pine默认的自动计算范围时,就会抛出该错误。- 你后续通过
low[n]/high[n]引用历史值的写法,依赖动态偏移,不符合Pine对固定回溯长度的要求,也会加剧回溯长度判断的异常。
修复方案
具体修改点
- 在脚本声明行手动指定
max_bars_back参数,预留足够的历史回溯空间,覆盖你可能用到的最大targetBarIndex输入值 - 替换动态偏移取值逻辑为Pine原生的
ta.valuewhen函数,直接精准获取指定bar_index对应K线的高低价,避免动态偏移导致的回溯判定异常
修复后完整代码
//@version=5 indicator("枢轴高低点计算", max_bars_back=10000) // 可根据你需要的最大targetBarIndex调整该值 // 你原代码缺失的变量定义,需根据实际需求补全 trs = "参数组" tradeType = input.string("Long", options=["Long", "Short"], title="交易方向") structureLookback = input(title="Lookback", type=input.integer, defval=7, group=trs) targetBarIndex = input(title="Bar Index", type=input.integer, defval=0, group=trs) // 替换原动态偏移n的取值逻辑,直接取指定bar_index的高低点 targetLow = ta.valuewhen(bar_index == targetBarIndex, low, 0) targetHigh = ta.valuewhen(bar_index == targetBarIndex, high, 0) pivotLowHigh = tradeType == "Long" ? targetLow : targetHigh //Fib Trailing variablen var Price = 0.0 t_Price = tradeType == "Long" ? ta.highest(high, structureLookback) : ta.lowest(low, structureLookback) //Berechnung des Fib-Levels fib_m23 = Price-(Price-pivotLowHigh)*(-0.236) //Update Price aufgrund von Price Action if ((bar_index >= targetBarIndex and targetBarIndex != 0)or targetBarIndex==0) //long version if (t_Price > Price or Price == 0.0) and tradeType == "Long" Price := t_Price plot(pivotLowHigh, color=color.gray, title="SwingLow")
额外说明
max_bars_back的取值可以根据你实际需要的最大targetBarIndex调整,只要比你可能输入的最大targetBarIndex大即可,预留1-2倍余量避免边界错误。- 你原代码中缺失
trs、tradeType两个变量的定义,我在修复代码中补充了示例定义,你可以根据自己的实际需求调整。
内容的提问来源于stack exchange,提问作者DESC
相关产品推荐
相关产品推荐

