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))
代码说明
- 核心逻辑行
longSafety = long and (signal == 0.0)直接实现需求,两个条件同时满足时变量为true - 如果需要避免连续K线重复显示标记,用
var声明的longSafetyLastState记录上一根K线的状态,longSafetyTriggerOnce仅在条件第一次满足时触发 - 绘制信号时,若需要所有符合条件的K线都显示标记,直接用
longSafety;若仅显示首次触发,用longSafetyTriggerOnce
内容的提问来源于stack exchange,提问作者xlameee
相关产品推荐
相关产品推荐

