You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:51:33