Pine Script v5中ta.valuewhen回溯旧值及KSSP_Low异常问题求助
问题分析与解决方案
核心问题原因
- 变量未持久化:你的
KuverSellSave没有用var声明,每根K线都会重新赋值为0.0。这导致只有触发KuverSellPlot的那根K线里KuverSellSave是-1,下一根K线直接被重置回0.0,KuverSellSavePlot也就变回false。ta.valuewhen(KuverSellSavePlot, low, 0)会在KuverSellSavePlot为false时,自动回溯寻找上一次为true的K线,这就是你看到值变回旧值的原因。 - 数组未实际使用:你把
KuverSellPlot的值存入了数组,但后续计算KSSP_Low时完全没用到数组里的数据,等于白存了。
修正方案
方案一:用持久化变量记录触发时的low值
// 用var声明,确保变量只初始化一次,值会跨K线保留 var float KuverSellSave = na var bool KuverSellSavePlot = false if KuverSellPlot KuverSellSave := low // 直接记录触发时的low值 KuverSellSavePlot := true // 可选:如果需要在某些条件下重置,加对应的判断 // else if 重置条件 // KuverSellSave := na // KuverSellSavePlot := false KSSP_Low = KuverSellSave
方案二:用数组存储所有触发的low值,取最新的一个
// 初始化数组,只执行一次 var array<float> KuverPlotSave = array.new_float() var bool KuverSellSavePlot = false if KuverSellPlot array.push(KuverPlotSave, low) // 存入当前low值 KuverSellSavePlot := true // 取数组最后一个元素(最新触发的low值) KSSP_Low = array.size(KuverPlotSave) > 0 ? array.get(KuverPlotSave, array.size(KuverPlotSave)-1) : na
关键说明
var关键字是Pine Script里实现跨K线变量持久化的核心,不用var的变量每根K线都会重新初始化。ta.valuewhen的逻辑是寻找最近一次条件为true的K线对应的值,如果当前K线条件不满足,它不会停留在当前,而是直接回溯历史,这是你之前遇到“旧值回溯”的本质原因。
内容的提问来源于stack exchange,提问作者KuverDas
相关产品推荐
相关产品推荐

