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

如何设置CVI指标触发条件:仅在趋势切换时单次通知

修改Pine Script实现CVI趋势切换时仅触发一次警报

要实现仅在趋势切换节点(涨转跌/跌转涨)触发单次警报,核心思路是对比当前K线与上一根K线的CVI趋势状态,只在状态发生变化时触发通知。以下是修改后的完整代码:

//@version=5
indicator(title="CVI", shorttitle="CVi")
length=input(3)
vc=ta.sma(hl2, length)
useModifiedFormula=input.bool(false)
os1=input(-0.51, title="Oversold 1")
ob1=input(0.43, title="Overbought 1")

denom = (useModifiedFormula == true) ? (ta.atr(length) * math.sqrt(length)) : ta.atr(length)
cvi = (close-vc) / denom
    
isRising = ta.rising(cvi,1)
isFalling = ta.falling(cvi,1)

// 记录上一根K线的趋势状态,var关键字确保变量仅初始化一次
var prevRising = false
var prevFalling = false

// 定义趋势切换条件:跌转涨/涨转跌
crossLong = not prevRising and isRising  // 上一根非上涨,当前转为上涨
crossShort = not prevFalling and isFalling  // 上一根非下跌,当前转为下跌

// 更新上一根K线的状态(放在警报条件之后,确保对比的是上一根的状态)
prevRising := isRising
prevFalling := isFalling

// 仅在趋势切换时触发警报
alertcondition(crossLong, title = "趋势切换:跌转涨", message="CVI由跌转涨,触发多单信号")    
alertcondition(crossShort, title = "趋势切换:涨转跌", message="CVI由涨转跌,触发空单信号")

关键修改说明:

  • 使用var关键字声明prevRising和prevFalling,确保这两个变量在脚本运行期间持续保存上一根K线的趋势状态,不会每次K线都重置。
  • 新增crossLong和crossShort两个切换条件,只有当当前趋势与上一根K线趋势完全相反时,条件才会成立。
  • 将状态更新语句prevRising := isRising放在警报条件之后,保证触发警报时对比的是上一根K线的状态,避免逻辑错误。

这样修改后,警报只会在CVI趋势发生切换的瞬间触发一次,不会在趋势持续过程中重复发送通知。

内容的提问来源于stack exchange,提问作者Raul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32