1
This commit is contained in:
parent
66a78759d3
commit
dda1ffc849
|
|
@ -2915,6 +2915,8 @@ class PositionManager:
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
client_order_id_sync = None
|
client_order_id_sync = None
|
||||||
|
# 标记是否「来历不明」:用于 DB entry_reason 与后续统计分析(sync_recovered_unknown_origin)
|
||||||
|
sync_unknown_origin = False
|
||||||
# 仅当「明确查到开仓订单且 clientOrderId 非空且不以系统前缀开头」时标记为来历不明(仍会补建+挂 SL/TP+监控)
|
# 仅当「明确查到开仓订单且 clientOrderId 非空且不以系统前缀开头」时标记为来历不明(仍会补建+挂 SL/TP+监控)
|
||||||
is_clearly_manual = False
|
is_clearly_manual = False
|
||||||
if system_order_prefix:
|
if system_order_prefix:
|
||||||
|
|
@ -2935,12 +2937,15 @@ class PositionManager:
|
||||||
is_clearly_manual = False
|
is_clearly_manual = False
|
||||||
logger.info(f" → {symbol} 开仓订单 clientOrderId 非系统前缀,但存在止损/止盈单,按系统单补建并监控")
|
logger.info(f" → {symbol} 开仓订单 clientOrderId 非系统前缀,但存在止损/止盈单,按系统单补建并监控")
|
||||||
if is_clearly_manual:
|
if is_clearly_manual:
|
||||||
|
sync_unknown_origin = True
|
||||||
logger.info(f" → {symbol} 来历不明(开仓订单非系统前缀),将补建记录、自动挂止损止盈并纳入监控")
|
logger.info(f" → {symbol} 来历不明(开仓订单非系统前缀),将补建记录、自动挂止损止盈并纳入监控")
|
||||||
else:
|
else:
|
||||||
# 未配置前缀时,不再因「无止损/止盈单」跳过:一律补建并自动挂 SL/TP、纳入监控
|
# 未配置前缀时,不再因「无止损/止盈单」跳过:一律补建并自动挂 SL/TP、纳入监控
|
||||||
if sync_recover_only_has_sltp and not (await self._symbol_has_sltp_orders(symbol)):
|
if sync_recover_only_has_sltp and not (await self._symbol_has_sltp_orders(symbol)):
|
||||||
|
sync_unknown_origin = True
|
||||||
logger.info(f" → {symbol} 无止损/止盈单,将补建记录、自动挂止损止盈并纳入监控")
|
logger.info(f" → {symbol} 无止损/止盈单,将补建记录、自动挂止损止盈并纳入监控")
|
||||||
# 不再因 is_clearly_manual 或 无 SL/TP 跳过,一律补建 + 挂 SL/TP + 监控
|
# 不再因 is_clearly_manual 或 无 SL/TP 跳过,一律补建 + 挂 SL/TP + 监控
|
||||||
|
entry_reason_sync = "sync_recovered_unknown_origin" if sync_unknown_origin else "sync_recovered"
|
||||||
if entry_order_id and hasattr(Trade, "get_by_entry_order_id"):
|
if entry_order_id and hasattr(Trade, "get_by_entry_order_id"):
|
||||||
try:
|
try:
|
||||||
if Trade.get_by_entry_order_id(entry_order_id):
|
if Trade.get_by_entry_order_id(entry_order_id):
|
||||||
|
|
@ -2953,14 +2958,14 @@ class PositionManager:
|
||||||
quantity=quantity,
|
quantity=quantity,
|
||||||
entry_price=entry_price,
|
entry_price=entry_price,
|
||||||
leverage=binance_position.get("leverage", 10),
|
leverage=binance_position.get("leverage", 10),
|
||||||
entry_reason="sync_recovered",
|
entry_reason=entry_reason_sync,
|
||||||
entry_order_id=entry_order_id,
|
entry_order_id=entry_order_id,
|
||||||
client_order_id=client_order_id_sync,
|
client_order_id=client_order_id_sync,
|
||||||
notional_usdt=notional,
|
notional_usdt=notional,
|
||||||
margin_usdt=(notional / float(binance_position.get("leverage", 10) or 10)) if float(binance_position.get("leverage", 10) or 0) > 0 else None,
|
margin_usdt=(notional / float(binance_position.get("leverage", 10) or 10)) if float(binance_position.get("leverage", 10) or 0) > 0 else None,
|
||||||
account_id=self.account_id,
|
account_id=self.account_id,
|
||||||
)
|
)
|
||||||
logger.info(f" ✓ {symbol} [状态同步] 已补建交易记录 (ID: {trade_id}, orderId: {entry_order_id or '-'})")
|
logger.info(f" ✓ {symbol} [状态同步] 已补建交易记录 (ID: {trade_id}, orderId: {entry_order_id or '-'}, entry_reason={entry_reason_sync})")
|
||||||
ticker = await self.client.get_ticker_24h(symbol)
|
ticker = await self.client.get_ticker_24h(symbol)
|
||||||
current_price = ticker["price"] if ticker else entry_price
|
current_price = ticker["price"] if ticker else entry_price
|
||||||
lev = float(binance_position.get("leverage", 10))
|
lev = float(binance_position.get("leverage", 10))
|
||||||
|
|
@ -2978,7 +2983,7 @@ class PositionManager:
|
||||||
"symbol": symbol, "side": side, "quantity": quantity, "entryPrice": entry_price,
|
"symbol": symbol, "side": side, "quantity": quantity, "entryPrice": entry_price,
|
||||||
"changePercent": 0, "orderId": entry_order_id, "tradeId": trade_id,
|
"changePercent": 0, "orderId": entry_order_id, "tradeId": trade_id,
|
||||||
"stopLoss": stop_loss_price, "takeProfit": take_profit_price, "initialStopLoss": stop_loss_price,
|
"stopLoss": stop_loss_price, "takeProfit": take_profit_price, "initialStopLoss": stop_loss_price,
|
||||||
"leverage": lev, "entryReason": "sync_recovered", "atr": None, "maxProfit": 0.0, "trailingStopActivated": False,
|
"leverage": lev, "entryReason": entry_reason_sync, "atr": None, "maxProfit": 0.0, "trailingStopActivated": False,
|
||||||
}
|
}
|
||||||
self.active_positions[symbol] = position_info
|
self.active_positions[symbol] = position_info
|
||||||
# 补建后立即在交易所挂/修正止损止盈(替换可能存在的异常远止损、缺止盈等)
|
# 补建后立即在交易所挂/修正止损止盈(替换可能存在的异常远止损、缺止盈等)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user