You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动