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

Pine Script自定义筛选器求助:多做多信号仅首个生效

问题根源

TradingView的多标的筛选器(Scanner)默认检测标的最新Bar的当前状态。你的long1是持续型条件——只要EMA1>EMA2且EMA2≥EMA3的状态维持,long1就会持续返回true;但long2和long3依赖ta.crossover,这是单次触发的事件型条件,仅在交叉发生的那一根Bar返回true,进入下一根Bar后该条件就会变回false。如果筛选器扫描时交叉事件已经过去,就无法识别这些条件的触发记录。

修正方案

要让筛选器能识别到long2和long3的触发记录,需要用持久化变量保存这些事件的触发状态,直到你指定的重置条件出现。以下是修正后的完整代码:

//@version=5
indicator("Multi-Condition Long Scanner", overlay=true)

// 定义EMA周期(可根据需求调整)
ema1 = ta.ema(close, 50)
ema2 = ta.ema(close, 100)
ema3 = ta.ema(close, 200)

// 原始多单条件
long1 = ema1 > ema2 and ema2 >= ema3
long2 = ta.crossover(ema1, ema2) and ema2 >= ema3
long3 = ema1 >= ema3 and ta.crossover(ema2, ema3)

// 用var定义持久化变量,保存事件型条件的触发状态
var bool long2_activated = false
var bool long3_activated = false

// 更新触发状态:当crossover发生时标记为true
long2_activated := long2 ? true : long2_activated
long3_activated := long3 ? true : long3_activated

// 可选:添加重置条件(比如EMA排列完全反转时清空触发记录)
reset_signal = ema3 > ema2 and ema2 > ema1
long2_activated := reset_signal ? false : long2_activated
long3_activated := reset_signal ? false : long3_activated

// 最终筛选条件:持续满足long1,或曾触发过long2/long3且未被重置
LongAlert = long1 or long2_activated or long3_activated

alertcondition(LongAlert, title = "Long", message = "Make Long Entry")
补充说明
  • 如果你只需要筛选最新Bar刚触发long2/long3的标的,无需持久化状态,可在TradingView筛选器的条件设置中,选择「指标值从false变为true」而非「指标值为true」,这样就能捕捉到交叉事件的瞬间触发信号。
  • 代码中的重置条件可根据你的交易逻辑调整,比如换成空单信号触发、特定周期后的自动重置等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:24