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

如何实现两个条件依次满足后触发alertcondition警报?

实现“两个条件依次满足后触发警报”的可行方案

当然可以实现,但你之前的写法逻辑不对——你写的是同时满足两个条件,而不是先满足第一个、再满足第二个的依次触发逻辑。

问题分析

  • alertcondition(rsi > 50 and dicross):判断当前K线同时符合rsi>50和dicross,不是“依次满足”的逻辑。
  • alertcondition(rsi > 50 + dicross):布尔值dicross会被自动转为1(true)或0(false),实际变成判断rsi>51或rsi>50,完全偏离你的需求。

正确实现逻辑

要实现“先满足A,之后满足B”的触发,需要用变量记录第一个条件的触发状态,再判断第二个条件是否在A触发后出现。以下是Pine Script的示例代码:

// 1. 定义你的基础条件
rsiValue = ta.rsi(close, 14)
rsiAbove50 = rsiValue > 50
// 替换成你自己的交叉逻辑,这里用5/20均线金叉做示例
dicross = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))

// 2. 用var变量记录第一个条件的触发状态(仅初始化一次)
var bool hasMetRsiCondition = false
// 当RSI首次超过50时,标记状态为已满足
hasMetRsiCondition := rsiAbove50 ? true : hasMetRsiCondition

// 3. 定义警报触发条件:已满足过RSI>50,且当前出现交叉
alertcondition(hasMetRsiCondition and dicross, title="依次触发警报", message="RSI先突破50,随后出现交叉!")

// 可选:触发后重置状态,避免同一轮趋势下重复触发
hasMetRsiCondition := (hasMetRsiCondition and dicross) ? false : hasMetRsiCondition

关键说明

  • var关键字确保变量只会在脚本初始化时赋值一次,不会随每根K线刷新重置。
  • 状态变量hasMetRsiCondition会持续记录“是否曾经满足过RSI>50”,之后只要交叉条件出现,就会触发警报。
  • 如果不需要同一趋势下重复触发,加上最后一行的重置逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:48:26