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

PineScript多strategy.exit配置独立alert_message适配SignalStack求助

解决方案:PineScript中为TP/SL设置独立SignalStack JSON警报

问题根源

你当前代码的核心问题是:

  • 同名的strategy.exit会被后续调用覆盖,因此第二个止损(SL)的strategy.exit无法生效
  • TradingView原生strategy.exit支持在同一调用中同时设置profit和loss,但无法为两者分别触发独立警报,而SignalStack要求每个警报只能传递单一命令

方法一:使用不同名称的strategy.exit分别绑定TP/SL警报

为止盈(TP)和止损(SL)创建独立的strategy.exit实例,使用不同的命名,确保两者均可生效,且各自触发对应的JSON警报命令:

//@version=5
strategy("TP/SL Separate Alerts", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=10000)

CS = strategy.equity / close // 替换为你的持仓量计算逻辑
Bull = ta.sma(close, 50)    // 替换为你的Bull指标
Bear = ta.sma(close, 200)   // 替换为你的Bear指标
Time = close // 替换为你的时间判断指标

// 开多头仓位
if ta.crossover(Bull, Bear) and not na(Time) and strategy.opentrades <= 0
    strategy.entry("Bullish Entry", strategy.long, qty = CS)
    // 止盈exit,绑定SignalStack平仓多头的JSON命令
    strategy.exit("Bullish TP", "Bullish Entry", profit = 43, alert_message = '{"command":"close_long","position":"Bullish Entry"}')
    // 止损exit,绑定SignalStack平仓多头的JSON命令
    strategy.exit("Bullish SL", "Bullish Entry", loss = 39, alert_message = '{"command":"close_long","position":"Bullish Entry"}')
    strategy.close("Bearish Entry")

// 开空头仓位
if ta.crossunder(Bull, Bear) and not na(Time) and strategy.opentrades <= 0
    strategy.entry("Bearish Entry", strategy.short, qty = CS) 
    // 止盈exit,绑定SignalStack平仓空头的JSON命令
    strategy.exit("Bearish TP", "Bearish Entry", profit = 43, alert_message = '{"command":"close_short","position":"Bearish Entry"}')
    // 止损exit,绑定SignalStack平仓空头的JSON命令
    strategy.exit("Bearish SL", "Bearish Entry", loss = 39, alert_message = '{"command":"close_short","position":"Bearish Entry"}')
    strategy.close("Bullish Entry")

// 当日收盘平仓
if na(Time)
    strategy.close_all("CLOSED FOR THE DAY")

方法二:使用alert()函数手动触发TP/SL警报(更灵活)

如果需要更精细的警报控制,可以放弃strategy.exit的alert_message,转而通过监测持仓盈亏触发alert(),同时手动执行平仓:

//@version=5
strategy("TP/SL Manual Alerts", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=10000)

CS = strategy.equity / close
Bull = ta.sma(close, 50)
Bear = ta.sma(close, 200)
Time = close

// 记录入场价格与持仓方向
var float long_entry_price = na
var float short_entry_price = na

// 开多头仓位
if ta.crossover(Bull, Bear) and not na(Time) and strategy.opentrades <= 0
    strategy.entry("Bullish Entry", strategy.long, qty = CS)
    long_entry_price := close
    short_entry_price := na

// 开空头仓位
if ta.crossunder(Bull, Bear) and not na(Time) and strategy.opentrades <= 0
    strategy.entry("Bearish Entry", strategy.short, qty = CS) 
    short_entry_price := close
    long_entry_price := na

// 监测多头TP/SL
if strategy.position_size > 0
    // 止盈触发:当前价 - 入场价 ≥43点
    if close - long_entry_price >= 43
        strategy.close("Bullish Entry")
        alert('{"command":"close_long","position":"Bullish Entry"}', alert.freq_once_per_bar_close)
    // 止损触发:入场价 - 当前价 ≥39点
    if long_entry_price - close >= 39
        strategy.close("Bullish Entry")
        alert('{"command":"close_long","position":"Bullish Entry"}', alert.freq_once_per_bar_close)

// 监测空头TP/SL
if strategy.position_size < 0
    // 止盈触发:入场价 - 当前价 ≥43点
    if short_entry_price - close >= 43
        strategy.close("Bearish Entry")
        alert('{"command":"close_short","position":"Bearish Entry"}', alert.freq_once_per_bar_close)
    // 止损触发:当前价 - 入场价 ≥39点
    if close - short_entry_price >= 39
        strategy.close("Bearish Entry")
        alert('{"command":"close_short","position":"Bearish Entry"}', alert.freq_once_per_bar_close)

// 当日收盘平仓
if na(Time)
    strategy.close_all("CLOSED FOR THE DAY")
    long_entry_price := na
    short_entry_price := na

关键注意事项

  • 替换示例中的Bull/Bear/Time指标为你实际使用的逻辑
  • 调整alert_message或alert()中的JSON内容,使其严格匹配SignalStack的命令格式要求
  • 方法二中使用alert.freq_once_per_bar_close避免同一条件下重复发送警报

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:07:06