Pine Script跨时间周期突破警报报错及脚本无结果问题求助
解决Pine Script突破警报的错误与无结果问题
我来帮你拆解一下问题所在,以及如何修复:
错误原因分析
你遇到的Cannot call 'operator >' with 'expr2'=series[bool]错误,根源在这一行:
bo = close > breakout
这里的breakout已经是一个布尔值序列(由vol > 500000 and h1 - l1 < h2 - l2 and close > h1组合出来的true/false信号),而close是浮点数值,Pine Script不允许用数值和布尔值做大于/小于的比较,这就触发了类型不匹配的错误。
为什么用valuewhen没结果?
当你改用valuewhen时,虽然消除了类型错误,但可能因为你没有正确匹配触发条件,或者valuewhen的参数逻辑不对,导致生成的序列全是na,所以看不到信号。
修正方案
1. 修复布尔值比较错误
直接使用breakout作为触发信号即可,不需要再用close > breakout。
2. 避免未来数据风险
你的security函数用了barmerge.lookahead_on,这个参数会让脚本引用当前日线周期还未走完的最新数据,属于未来数据,会导致回测信号失真,建议改成barmerge.lookahead_off。
3. 完整修正代码
//@version=4 study("Breakout", overlay = true) // 定义日线周期 var string day = "D" // 获取日线级别前1、前2根K线的成交量、高低点(关闭未来数据) vol = security(syminfo.ticker, day, volume[1], barmerge.gaps_off, barmerge.lookahead_off) h1 = security(syminfo.ticker, day, high[1], barmerge.gaps_off, barmerge.lookahead_off) l1 = security(syminfo.ticker, day, low[1], barmerge.gaps_off, barmerge.lookahead_off) h2 = security(syminfo.ticker, day, high[2], barmerge.gaps_off, barmerge.lookahead_off) l2 = security(syminfo.ticker, day, low[2], barmerge.gaps_off, barmerge.lookahead_off) // 定义突破条件:成交量达标 + 昨日K线振幅小于前日 + 收盘价突破昨日高点 breakout = vol > 500000 and (h1 - l1) < (h2 - l2) and close > h1 // 直接使用breakout信号绘制标记 plotshape(series=breakout, title="Long", style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), text="Buy")
额外说明
- 如果需要设置警报,直接在TradingView的警报功能中选择这个脚本,触发条件选
breakout becomes true即可。 - 确保你的标的在日线级别有足够的成交量(大于500000),否则信号不会触发,可以根据标的调整成交量阈值。
内容的提问来源于stack exchange,提问作者HanuKarma




