如何为多空策略开仓添加标签?现有信号绘图逻辑优化咨询
如何为多空策略的开仓操作添加标签(仅在实际建仓时绘制标记)
你当前的脚本会在每出现看涨(bullish)或看跌(bearish)信号时绘制买卖标记,但核心需求是仅在实际建立多头/空头仓位时显示标记——信号出现时可能因已有仓位等原因不会触发开仓,因此需要基于策略的实际开仓动作来触发标记绘制。
解决方案:利用strategy.entry()的返回值触发标记
strategy.entry()函数会在当前bar成功开仓时返回true,否则返回false。我们可以将开仓结果存入变量,再用这些变量作为plotshape的触发条件,精准匹配实际建仓动作。
修改后的完整代码
//@version=5 strategy("仅开仓时标记策略", overlay=true) // 请根据你的实际逻辑替换以下示例变量 inDateRange = true // 示例日期范围条件 bullish = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 示例看涨信号 Exit_long = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20)) // 示例多头平仓信号 bearish = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20)) // 示例看跌信号 Exit_short = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 示例空头平仓信号 longStopLossPrice = close * 0.98 // 示例止损价 shortStopLossPrice = close * 1.02 // 示例止损价 if inDateRange // 记录多头开仓动作结果 longOpened = strategy.entry('long', strategy.long) if longOpened strategy.exit('Stop Long', from_entry='long', stop=longStopLossPrice) if Exit_long strategy.close('long', comment='exit long') // 修正原代码的括号语法错误 // 记录空头开仓动作结果 shortOpened = strategy.entry('short', strategy.short) if shortOpened strategy.exit('Stop Short', from_entry='short', stop=shortStopLossPrice) if Exit_short strategy.close('short', comment='exit short') // 修正原代码的括号语法错误 // 仅在实际开仓时绘制标记 plotshape(longOpened, title="Buy", text="Buy", color=color.green, style=shape.labelup, location=location.abovebar, size=size.small, textcolor=color.white) plotshape(shortOpened, title="Sell", text="Sell", color=color.red, style=shape.labeldown, location=location.belowbar, size=size.small, textcolor=color.white)
关键修改说明
- 绑定开仓动作与标记触发:将
strategy.entry()的返回值赋值给longOpened/shortOpened变量,仅当实际开仓成功时,变量才为true - 修正语法错误:修复了原代码中
comment参数的多余右括号问题 - 优化止损逻辑:仅在开仓成功后设置止损,避免无仓位时生成无效止损单
备选方案:通过仓位变化判断开仓
如果你的策略存在非strategy.entry()触发的开仓场景,可以通过对比前后bar的仓位大小来判断开仓动作:
// 检查当前bar是否建立多头仓位 longEntry = strategy.position_size > 0 and strategy.position_size[1] <= 0 // 检查当前bar是否建立空头仓位 shortEntry = strategy.position_size < 0 and strategy.position_size[1] >= 0 // 用上述变量触发标记 plotshape(longEntry, title="Buy", text="Buy", color=color.green, style=shape.labelup, location=location.abovebar, size=size.small, textcolor=color.white) plotshape(shortEntry, title="Sell", text="Sell", color=color.red, style=shape.labeldown, location=location.belowbar, size=size.small, textcolor=color.white)
内容的提问来源于stack exchange,提问作者Maghal
相关产品推荐
相关产品推荐

