a
This commit is contained in:
parent
ba15992aeb
commit
2c66b4dcad
|
|
@ -363,6 +363,18 @@ async def close_position(symbol: str):
|
|||
position_manager = PositionManager(client, risk_manager)
|
||||
logger.info("✓ 管理器初始化成功")
|
||||
|
||||
# 先检查币安是否有持仓
|
||||
logger.info(f"检查 {symbol} 在币安的持仓状态...")
|
||||
positions = await client.get_open_positions()
|
||||
binance_has_position = any(p['symbol'] == symbol and float(p['positionAmt']) != 0 for p in positions)
|
||||
|
||||
if binance_has_position:
|
||||
position_info = next((p for p in positions if p['symbol'] == symbol and float(p['positionAmt']) != 0), None)
|
||||
position_amt = float(position_info['positionAmt']) if position_info else 0
|
||||
logger.info(f"✓ 币安账户中有 {symbol} 持仓: {position_amt:.4f}")
|
||||
else:
|
||||
logger.info(f"✓ 币安账户中没有 {symbol} 持仓")
|
||||
|
||||
# 执行平仓(reason='manual' 表示手动平仓)
|
||||
logger.info(f"开始执行平仓操作: {symbol}...")
|
||||
success = await position_manager.close_position(symbol, reason='manual')
|
||||
|
|
@ -375,10 +387,17 @@ async def close_position(symbol: str):
|
|||
"status": "closed"
|
||||
}
|
||||
else:
|
||||
# 即使返回False,也可能是币安没有持仓但数据库已更新,这种情况也算成功
|
||||
logger.warning(f"⚠ {symbol} 平仓操作返回False,可能币安没有持仓或已平仓")
|
||||
# 根据币安是否有持仓来判断失败原因
|
||||
if binance_has_position:
|
||||
# 币安有持仓但下单失败
|
||||
error_msg = f"{symbol} 平仓失败:币安账户中有持仓,但下单失败,请检查日志或稍后重试"
|
||||
logger.error(error_msg)
|
||||
raise HTTPException(status_code=500, detail=error_msg)
|
||||
else:
|
||||
# 币安没有持仓,可能是数据库已更新
|
||||
logger.warning(f"⚠ {symbol} 币安账户中没有持仓,可能已被平仓或数据库已更新")
|
||||
return {
|
||||
"message": f"{symbol} 平仓操作完成(币安可能没有持仓或已平仓)",
|
||||
"message": f"{symbol} 平仓操作完成(币安账户中没有持仓,可能已被平仓)",
|
||||
"symbol": symbol,
|
||||
"status": "closed"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user