摆动低点被突破后查找最高开盘价的Pine Script代码运行报错求助
Pine Script v4 代码修复结果
原代码错误点
pivotlow()仅在摆动低点确认的当根K线返回价格,其余时段返回空值na,你使用的crossunder(low,swl)条件永远无法触发barssince(swh)在未出现有效摆动高点时返回na,传入highest()的长度参数会触发语法错误- 未持久化存储历史有效摆动低点,击穿逻辑没有可对比的基准值
修复后可运行代码
//@version=4 study("Swing Low击穿后最高开盘价计算", overlay = true) // 计算摆动高低点 swh = pivothigh(high,2,1) swl = pivotlow(low,2,1) // 持久化存储最近一次有效摆动低点 var float last_valid_swl = na if not na(swl) last_valid_swl := swl // 处理摆动高点计数的空值问题 Bcount = nz(barssince(swh), bar_index) // 击穿摆动低点时计算对应区间最高开盘价 highestOpen = valuewhen(low < last_valid_swl, highest(open, Bcount + 1), 0) // 绘制结果 plot(highestOpen, color = color.green, linewidth = 2)
关键修改说明
- 用
var类型变量存储有效摆动低点,避免空值导致的信号失效 - 用
nz()函数处理barssince的空返回值,避免参数类型不匹配报错 - 将触发条件替换为
low < last_valid_swl,符合“摆动低点被击穿”的业务逻辑 - 新增摆动低点持久化逻辑,保证计算基准始终是最近一次确认的摆动低点
内容的提问来源于stack exchange,提问作者MVP_Script
相关产品推荐
相关产品推荐

