TradingView策略测试出现同时买卖订单异常求助
TradingView策略平仓伴随反向开仓问题解决
问题核心原因
- 默认多空持仓规则:TradingView策略默认允许同时持有多空仓位,当平仓信号触发时,若反向开仓条件也满足,会同时执行平仓+反向开仓操作。
- 订单命名冲突:所有平仓订单都用了"Exit"这个重复名称,导致策略逻辑识别混乱,无法区分多单/空单的平仓指令。
- 开仓参数误用:
strategy.entry中的stop和limit是设置挂单开仓条件(比如跌到指定价开多),而非开仓后的止损止盈,这会干扰正常开平仓逻辑。 - 无持仓状态校验:独立的
if(longCondition)和if(shortCondition)判断未结合当前持仓状态,同一K线可能同时触发多空信号。
修正方案
1. 限制单向持仓
在策略开头添加配置,强制策略仅持有单一方向仓位,平仓后再开反向仓:
//@version=5 strategy("修正后的策略", overlay=true) // 限制仅允许单向持仓,避免多空同时存在 strategy.risk.allow_entry_in = strategy.only_one_direction
2. 修正开平仓核心逻辑
- 移除
strategy.entry中的stop和limit参数(市价开仓场景),仅在strategy.exit中设置止损止盈。 - 给平仓订单设置唯一名称,区分多单/空单。
- 加入持仓状态判断,确保开仓前无反向仓位。
修正后的核心代码:
// Entry and exit logic if (longCondition) // 仅当前无多仓/空仓时开多 if strategy.position_size <= 0 strategy.entry("Buy", strategy.long, qty=accountSize / close) // 多单平仓订单单独命名 strategy.exit("Exit Long", "Buy", stop=stopLossLong, limit=takeProfitLong) if (shortCondition) // 仅当前无空仓/多仓时开空 if strategy.position_size >= 0 strategy.entry("Sell", strategy.short, qty=accountSize / close) // 空单平仓订单单独命名 strategy.exit("Exit Short", "Sell", stop=stopLossShort, limit=takeProfitShort) // Plot buy and sell signals plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
额外说明
如果你的需求是挂单开仓(比如突破某个价位开多),那strategy.entry中的stop/limit是合理的,但此时需要确保挂单触发时反向仓位已平仓,结合strategy.risk.allow_entry_in = strategy.only_one_direction即可避免同时开仓问题。
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

