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

Pine Script指标组合问题:Stoch标签残留及互锁失效排查

Pivot与Stochastic指标组合逻辑修复(Pine Script)

问题描述

将Pivot指标与Stochastic指标组合编写Pine Script代码后,单独运行绘图正常,但组合后Stoch_Buy标签仍会错误显示,无法判断是重绘还是逻辑问题。需求明确:

  • 保留Pivot_Ready的绘图形状
  • 若Stochastic先触发交易,禁用Pivot交易信号
  • 若Pivot先触发交易,禁用Stochastic交易信号

原代码

traded_today        = false
traded_today1      = false
stop_pivot          = false
stop_stoch          = false
var longOn         = false


trade_Pivot  = input.bool(false, "turn Pivot trading On", group=g_4, inline="", tooltip="turn Pivot trading On")
trade_Stoch  = input.bool(false, "turn Stoch roll over On", group=g_4, inline="", tooltip="turn Stoch Roll over On")
//pivot_buy
pivot_buy = open >= vPP and close < vPP

//stoch
cond2_long = ta.crossover(k,d)  and k < stochOS and barstate.isconfirmed

// // Pivots
if newDay and open > vPP 
    startAboveP := true

//                                          -   TRADE CONDITIONS   -                                                       

//Pivots
Pivot_Ready  = not traded_today and  startAboveP and trade_Pivot

Pivot_Entry = not traded_today1 and pivot_buy and not stop_pivot and trade_Pivot

//stoch
validLong = not longOn and cond2_long and not stop_stoch and trade_Stoch

//                                          -   ALERTS FUNCTIONS   -                                                       

if Pivot_Ready
    traded_today := true

// Pivot
    
if Pivot_Entry
    traded_today1   := true
    stop_stoch      := true
    alert("Buy "  + syminfo.ticker + " at " + str.tostring(vPP, format.mintick) +  "\n TP1 " + str.tostring(vR1, format.mintick) + "\n SL " + str.tostring(vS1, format.mintick) + "\n Pivot_Buy" + "\n\n Time Stamp of trigger\n" + "\n\n Time of trade " + str.tostring(t) , alert.freq_once_per_bar)
 
// Stoch
if validLong
    longOn      := true
    stop_pivot  := true
    longSL  := close - i_Stop_Loss   * 10 * syminfo.mintick
    longTP  := close + i_Take_Profit * 10 * syminfo.mintick
    alert("Buy " + syminfo.ticker + " at " + str.tostring(close, format.mintick) + "\n TP1 " + str.tostring(longTP, format.mintick) + "\n SL " + str.tostring(longSL, format.mintick) + "\n Stoch" + "\n\n Time Stamp of trigger\n" + "\n\n Time of trade " + str.tostring(barTimeFormatted) , alert.freq_once_per_bar) 
 
// TRADES SHAPES
plotshape(Pivot_Ready  , title="Pivot_Ready" , text="Pivot\nsetup "  , color=color.rgb(34, 185, 39), style=shape.labeldown  , location=location.abovebar, size=size.tiny, textcolor=color.rgb(0, 0, 0))

plotshape(Pivot_Entry  , title="Pivot_Entry" , text="Pivot Buy "  , color=color.rgb(34, 185, 39), style=shape.labelup  , location = location.belowbar, size=size.tiny, textcolor=color.rgb(0, 0, 0))


//stoch
plotshape(validLong , title="Stoch_Buy" , text="Stoch_Buy"  , color=color.rgb(34, 185, 39), style=shape.labelup  , location=location.belowbar, size=size.small, textcolor=color.black)

问题根源

  1. 变量未用var声明:traded_today、traded_today1、stop_pivot、stop_stoch这些控制信号禁用的变量,每根K线都会被重置为false,导致禁用逻辑失效。
  2. 无交易日重置机制:控制变量未在新交易日开始时重置,可能导致跨交易日的信号干扰。
  3. 信号条件未持续生效:触发信号后设置的禁用标记,会因变量重置在下一根K线失效,无法持续阻断另一指标的信号。

修复后的代码

//@version=5
indicator("Pivot + Stoch Combo", overlay=true)

// 全局设置分组
g_4 = "交易开关"
stoch_group = "Stoch参数"
trade_group = "交易参数"

// 输入参数
trade_Pivot = input.bool(false, "启用Pivot交易", group=g_4)
trade_Stoch = input.bool(false, "启用Stoch交易", group=g_4)
stochOS = input(20, "Stoch超卖阈值", group=stoch_group)
i_Stop_Loss = input(1.0, "止损点数", group=trade_group)
i_Take_Profit = input(2.0, "止盈点数", group=trade_group)

// Pivot相关逻辑(假设vPP/vR1/vS1为已定义的枢轴点变量)
var bool startAboveP = false
// 新交易日判断
newDay = ta.change(time("D"))
if newDay and open > vPP 
    startAboveP := true

// Stoch指标计算
k = ta.sma(ta.rsi(close, 14), 3)
d = ta.sma(k, 3)
cond2_long = ta.crossover(k, d) and k < stochOS and barstate.isconfirmed

// 核心控制变量(用var保持跨K线状态)
var bool traded_today = false
var bool traded_today1 = false
var bool stop_pivot = false
var bool stop_stoch = false
var bool longOn = false

// 每日重置控制变量
if newDay
    traded_today := false
    traded_today1 := false
    stop_pivot := false
    stop_stoch := false
    longOn := false
    startAboveP := false

// 交易条件
Pivot_Ready = not traded_today and startAboveP and trade_Pivot
Pivot_Entry = not traded_today1 and (open >= vPP and close < vPP) and not stop_pivot and trade_Pivot
validLong = not longOn and cond2_long and not stop_stoch and trade_Stoch

// 信号触发逻辑
if Pivot_Ready
    traded_today := true

if Pivot_Entry
    traded_today1 := true
    stop_stoch := true
    alert("买入 " + syminfo.ticker + " 价格: " + str.tostring(vPP, format.mintick) + 
          "\n 止盈1: " + str.tostring(vR1, format.mintick) + 
          "\n 止损: " + str.tostring(vS1, format.mintick) + 
          "\n 信号类型: Pivot买入" + 
          "\n 触发时间: " + str.tostring(ta.time, "yyyy-MM-dd HH:mm"), alert.freq_once_per_bar)

if validLong
    longOn := true
    stop_pivot := true
    longSL = close - i_Stop_Loss * 10 * syminfo.mintick
    longTP = close + i_Take_Profit * 10 * syminfo.mintick
    alert("买入 " + syminfo.ticker + " 价格: " + str.tostring(close, format.mintick) + 
          "\n 止盈1: " + str.tostring(longTP, format.mintick) + 
          "\n 止损: " + str.tostring(longSL, format.mintick) + 
          "\n 信号类型: Stoch买入" + 
          "\n 触发时间: " + str.tostring(ta.time, "yyyy-MM-dd HH:mm"), alert.freq_once_per_bar)

// 绘图
plotshape(Pivot_Ready, title="Pivot准备", text="Pivot\n准备", color=color.new(color.green, 0), 
          style=shape.labeldown, location=location.abovebar, size=size.tiny, textcolor=color.black)

plotshape(Pivot_Entry, title="Pivot买入", text="Pivot买入", color=color.new(color.green, 0), 
          style=shape.labelup, location=location.belowbar, size=size.tiny, textcolor=color.black)

plotshape(validLong, title="Stoch买入", text="Stoch买入", color=color.new(color.blue, 0), 
          style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.black)

关键修复点

  1. 用var声明控制变量:确保stop_pivot、stop_stoch等变量在K线之间保持状态,不会被自动重置。
  2. 新增交易日重置逻辑:通过ta.change(time("D"))在新交易日开始时重置所有控制变量,避免跨交易日的信号残留。
  3. 强化信号互斥逻辑:在Pivot_Entry和validLong的条件中,严格检查对方的禁用标记,确保触发一个信号后,另一指标的信号被彻底阻断。
  4. 清理冗余代码:移除原代码中无效的注释文本,整合Pivot买入条件,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:38:10