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

请求优化Pine Script交叉信号:价格需偏离前交叉点1%才显示后续信号

解决Pine Script信号过于频繁的问题

要实现每次交叉信号触发后,价格需较上一次信号点移动1%才允许下一次信号的需求,可通过记录上一次信号价格并添加百分比过滤条件实现,修改后的代码如下:

//@version=5
indicator("EMA Cross with 1% Filter", overlay=true)

ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

uptrend = ema50 > ema200
downtrend = ema200 > ema50

plot(ema50, color = uptrend ? color.green : downtrend ? color.red : na)
plot(ema200, color = uptrend ? color.green : downtrend ? color.red : na)

// 初始化变量,跨K线保留上一次多单信号的触发价格
var float last_long_price = na
// 原始多单交叉信号
long_cross = ta.crossover(close, ema50)

// 判断价格是否满足触发条件:首次信号 或 较上一次信号价波动≥1%
price_move_condition = na(last_long_price) or math.abs((close - last_long_price) / last_long_price) >= 0.01

// 最终有效多单信号:同时满足上升趋势、交叉、价格波动条件
long = uptrend and long_cross and price_move_condition

// 触发信号时更新上一次信号的价格记录
if (long)
    last_long_price := close

plotchar(long, "Long", "▲", location.belowbar, color = color.green, text = "Long", size = size.tiny)

关键修改说明:

  • var float last_long_price = na:用var关键字定义跨周期保留的变量,记录上一次多单信号的收盘价
  • price_move_condition:处理两种场景——无历史信号时允许首次触发,或当前价格较上一次信号价的涨跌幅绝对值达到1%
  • 最终long信号需同时满足三个条件:处于上升趋势、价格上穿EMA50、价格波动达标
  • 信号触发时通过if (long)更新价格记录,为下一次信号判断提供基准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:13