This commit is contained in:
薇薇安 2026-01-16 15:01:45 +08:00
parent ba15992aeb
commit 2c66b4dcad

View File

@ -363,6 +363,18 @@ async def close_position(symbol: str):
position_manager = PositionManager(client, risk_manager) position_manager = PositionManager(client, risk_manager)
logger.info("✓ 管理器初始化成功") 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' 表示手动平仓) # 执行平仓reason='manual' 表示手动平仓)
logger.info(f"开始执行平仓操作: {symbol}...") logger.info(f"开始执行平仓操作: {symbol}...")
success = await position_manager.close_position(symbol, reason='manual') success = await position_manager.close_position(symbol, reason='manual')
@ -375,10 +387,17 @@ async def close_position(symbol: str):
"status": "closed" "status": "closed"
} }
else: 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 { return {
"message": f"{symbol} 平仓操作完成(币安可能没有持仓或已平仓)", "message": f"{symbol} 平仓操作完成(币安账户中没有持仓,可能已被平仓)",
"symbol": symbol, "symbol": symbol,
"status": "closed" "status": "closed"
} }