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

strategy.close()触发警报但未平仓的技术问题咨询

交易策略平仓异常排查

我编写了一个交易策略,设置的警报消息已出现在警报列表中,但对应仓位并未在交易列表中平仓。前三个仓位均正常平仓,唯独position #4平仓失败,理论上该仓位应该被平仓。

相关代码

平仓执行代码

strategy.close("position #" + str.tostring(pyramidClosed), alert_message="TRADE" + alertMessage)

其中pyramidClosed是递增变量,用于按时间顺序平仓。

警报消息生成代码

alertMessage := "#5 - Decrease buying position" + "
"
     + "(+)Diff.: " + str.tostring(diff) + "%
"
     + "Sold " + str.tostring(TradeBaseSize) + " " + syminfo.basecurrency + " for " + str.tostring(TradeCurrencySize) + " " + syminfo.currency + "
"
     + "Last: " + str.tostring(last_price) + "
"
     + "Actual: " + str.tostring(actual_price) + "
"
     + "Time5: " + str.tostring(timediff) + "
"
     + "DCA: " + str.tostring(DCA) + "
"
     + "Pos.: " + "position #" + str.tostring(pyramidClosed) + "
" + "
"

可能的问题原因

  • 仓位名称不匹配:确认触发平仓时pyramidClosed的实际值是否为4。如果变量递增逻辑出错,生成的position #4可能和开仓时的仓位名称不一致,导致strategy.close无法定位目标仓位。可以在代码中添加日志输出,对比开仓与平仓的仓位名称。
  • 平仓条件未触发:strategy.close的执行可能依赖隐含的市场条件(如当前K线的价格范围、时间戳),即使警报触发,若这些条件不满足,指令会被跳过。建议添加调试代码,输出触发时的pyramidClosed值、当前仓位数量及价格信息。
  • 策略风险设置限制:检查策略的金字塔规则(strategy.risk.allow_entry_in),若设置了禁止反向开仓或限制平仓次数,可能导致部分平仓指令失效。同时确认账户是否有足够资金完成平仓,或策略是否开启了"仅平仓"模式。
  • 变量时序错误:pyramidClosed的递增时机可能晚于strategy.close的执行,导致实际平仓的是上一个仓位(如position #3),而目标仓位#4未被处理。可以用var声明计数器变量,确保递增逻辑在平仓指令执行前完成。
  • 实盘与回测差异:警报触发仅代表逻辑条件满足,但实盘执行可能因网络延迟、交易所API限制、滑点设置差异等导致失败。对比回测与实盘的交易日志,确认平仓指令是否在实盘中被正确发送。

内容的提问来源于Stack Exchange,提问作者Czár Iván

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:05:20