Pine Script报错求助:如何引用上次买入信号的回溯最低低点?
解决Pine Script中
ta.lowest参数无效的报错 问题根源
报错是因为LookbackFromNow可能出现na或小于等于0的情况:
- 当
BuyCondition从未触发时,ta.barssince(BuyCondition)返回na,导致LookbackFromNow为na,传入ta.lowest后触发参数无效错误。 - 即使
BuyCondition触发过,若计算后的LookbackFromNow小于等于0,也会触发同样报错。
修复后的代码
RRR = input.float(1.5, title='Risk Reward Ratio') LookbackForLowest = input.int(20, title='Lowest Low LookBack') SinceLastBought = ta.barssince(BuyCondition) // 处理BuyCondition未触发的情况,确保LookbackFromNow为有效正数 LookbackFromNow = na(SinceLastBought) ? 1 : SinceLastBought + LookbackForLowest // 强制length不小于1,避免参数无效 validLength = math.max(LookbackFromNow, 1) BuyClosePrice = ta.valuewhen(BuyCondition == 1, close, 1) // 使用有效长度计算最低低点,未触发时用当前low作为默认值(可按需调整) LowestLow = na(SinceLastBought) ? low : ta.lowest(low, validLength)[1] StopLoss = close < LowestLow Exit = (BuyClosePrice - LowestLow) * RRR // SELL CONDITIONS // 1. Stop loss at recent low // 2. RRR SellCondition1 = close < LowestLow SellCondition2 = close > Exit SellCondition = SellCondition1 or SellCondition2
关键修改点
- 用
na(SinceLastBought)判断是否从未触发过买入信号,此时给LookbackFromNow设默认值1,避免na传入函数。 - 用
math.max(validLength, 1)确保传入ta.lowest的长度始终大于0。 - 当未触发买入信号时,给
LowestLow设置默认值(示例用当前K线的low,可根据需求改为历史低点等其他值),避免后续逻辑出现na异常。
内容的提问来源于stack exchange,提问作者AliNotty
相关产品推荐
相关产品推荐

