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

如何避免Pine Script脚本连续输出重复的BUY/SELL交易信号

交易脚本信号过滤实现方案

修改后完整代码

//Long
emalong = out1 > out2
macdlong = macd > signal and ((macd[1] < signal[1]) or (macd[2] < 
    signal[2]))
psarlong = psar < close and ((psar[1] > close[1]) or (psar[2] > 
    close[2]))

//Short
emashort = out1 < out2
macdshort = macd < signal and ((macd[1] > signal[1]) or (macd[2] 
    > signal[2]))
psarshort = psar > close and ((psar[1] < close[1]) or (psar[2] < 
    close[2]))

//Collect 原信号条件
longentry = emalong and macdlong and psarlong
shortentry = emashort and macdshort and psarshort

// 新增信号过滤逻辑
var int last_signal_type = 0 // 0=初始无信号 1=上一次为买入信号 -1=上一次为卖出信号
var float last_buy_price = na
var float last_sell_price = na

valid_long = longentry and last_signal_type != 1 and (na(last_sell_price) or close < last_sell_price)
valid_short = shortentry and last_signal_type != -1 and (na(last_buy_price) or close > last_buy_price)

// 触发有效信号后更新状态
if valid_long
    last_signal_type := 1
    last_buy_price := close
if valid_short
    last_signal_type := -1
    last_sell_price := close

//Plot 改用过滤后的有效信号绘制
plotshape(valid_long, style=shape.circle, color=#26a69a, text="⬆", 
    textcolor=#ffffff, location=location.belowbar, 
    size=size.tiny)
plotshape(valid_short, style=shape.circle, color=#ef5350, 
    text="⬇", textcolor=#ffffff, location=location.abovebar, 
    size=size.tiny)

逻辑说明

  • 用var关键字定义的变量会在脚本运行全程保留历史值,不会每根K线重新初始化,不需要额外调用valuewhen或barssince函数即可实现状态记录
  • 买入信号过滤规则:原有买入条件触发的前提下,上一次生效信号不能是买入;如果历史上有过生效的卖出信号,当前K线收盘价需要低于上一次卖出信号的对应价格
  • 卖出信号过滤规则:原有卖出条件触发的前提下,上一次生效信号不能是卖出;如果历史上有过生效的买入信号,当前K线收盘价需要高于上一次买入信号的对应价格
  • 初始无信号阶段第一次符合条件的信号会直接放行,匹配初始空仓的使用场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:09:00