TradingView Pine脚本:空头预警异常触发问题排查
问题分析与解决
核心问题
初始值设置错误
bott的初始值被设为脚本加载时第一个bar的close(大概率是历史bar的收盘价),而非脚本启动后第一个实时bar的价格。当脚本启动后实时价格上涨,bott因未触发low < bott的更新条件,始终保持历史bar的收盘价,导致bear = 1 - bott / close的数值会随价格上涨持续增大,远超过0.05的阈值,直接触发空头预警。topp初始值设为0,虽在第一个实时bar会被更新为当前high,但历史bar中会出现除以0的计算错误,不过因仅实时bar才会触发有效预警,所以多头预警表现正常。
计算逻辑可能不符合预期
当前bear的计算式1 - bott / close表示的是最低价相对于收盘价的跌幅比例,而非收盘价相对于最低价的涨幅比例。例如当收盘价比最低价高5.26%时,bear才会达到0.05,和你设定的5%阈值不匹配。
修复代码
var float topp = na var float bott = na if barstate.isrealtime // 仅在第一个实时bar初始化最高最低价 if na(topp) topp := high bott := low else if high > topp topp := high if low < bott bott := low // 仅在最高最低价有效时计算差值 bull = na(topp) ? na : 1 - close / topp // 若需收盘价较最低价涨幅达5%触发预警,改用此计算式:bear = close / bott - 1 bear = na(bott) ? na : 1 - bott / close plot(topp) plot(bull) plot(close) plot(bear) plot(bott) // 仅当数值有效时触发预警 alertcondition(not na(bull) and not na(bear) and (bull > 0.05 or bear > 0.05), title = "价格阈值预警", message = "收盘价距最高/最低价差值达5%")
修复说明
- 将
topp和bott初始值设为na,在第一个实时bar才将其赋值为当前的high和low,确保记录的是脚本启动以来的实时数据最高最低,而非历史bar数据。 - 增加有效性判断,避免未初始化时的无效计算。
- 注释了符合5%涨幅阈值的
bear计算式,可根据实际需求切换。
内容的提问来源于stack exchange,提问作者Россарх
相关产品推荐
相关产品推荐

