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

Pine Script多单安全条件实现失败,求正确写法

Pine Script多单安全机制逻辑修复

需求是在市场走弱时触发安全机制,具体逻辑为:当持有LONG(多单)仓位且signal == 0.0同时成立时,将longSafety设为true。

用户尝试的代码(无法正常运行):

longSafetyMem = false
longSafetyMem := long ? true : signal == 0.0 ? true : longSafetyMem[1]
longSafety = long and not(longSafetyMem[1])

plotshape(longSafety, title='lSafety', text='lSafety', location=location.abovebar, style=shape.labelup, size=size.tiny, color=color.new(#fbb402, 0), textcolor=color.new(color.white, 0))

问题分析

原代码逻辑完全偏离需求:

  • longSafetyMem的三元嵌套赋值既没准确跟踪多单状态,也没正确关联signal == 0.0的触发条件
  • longSafety的判断条件long and not(longSafetyMem[1])和需求毫无关联,自然无法输出正确信号

修复后的代码

// 核心逻辑:直接判断多单持有且signal为0.0的条件
longSafety = long and (signal == 0.0)

// 可选:仅在条件首次触发时显示标记(避免连续K线重复显示)
var bool longSafetyLastState = false
longSafetyTriggerOnce = longSafety and not(longSafetyLastState)
longSafetyLastState := longSafety

// 绘制安全信号,可根据需求选择longSafety或longSafetyTriggerOnce
plotshape(longSafetyTriggerOnce, title='lSafety', text='lSafety', location=location.abovebar, style=shape.labelup, size=size.tiny, color=color.new(#fbb402, 0), textcolor=color.new(color.white, 0))

代码说明

  1. 核心逻辑行longSafety = long and (signal == 0.0)直接实现需求,两个条件同时满足时变量为true
  2. 如果需要避免连续K线重复显示标记,用var声明的longSafetyLastState记录上一根K线的状态,longSafetyTriggerOnce仅在条件第一次满足时触发
  3. 绘制信号时,若需要所有符合条件的K线都显示标记,直接用longSafety;若仅显示首次触发,用longSafetyTriggerOnce

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:25:03