diff --git a/backend/app/api/real_trading.py b/backend/app/api/real_trading.py index 71c3d1e..7f66df9 100644 --- a/backend/app/api/real_trading.py +++ b/backend/app/api/real_trading.py @@ -24,88 +24,75 @@ class OrderResponse(BaseModel): @router.get("/orders") async def get_orders( symbol: Optional[str] = Query(None, description="交易对筛选"), - status: Optional[str] = Query(None, description="状态筛选: active, closed, exchange"), + status: Optional[str] = Query(None, description="数据源: trades=成交记录, orders=历史订单, exchange=历史订单"), limit: int = Query(100, description="返回数量限制") ): """ - 获取实盘订单列表 + 获取实盘交易历史数据 - symbol: 可选,按交易对筛选 - status: 可选 - - active: 本地数据库的活跃订单 - - closed: 本地数据库的历史订单 - - exchange: 交易所的历史订单(推荐) + - trades: 交易所成交记录(包含每笔成交和手续费) + - orders: 交易所历史订单(包含订单状态) + - exchange: 交易所历史订单(同 orders) - limit: 返回数量限制,默认100 """ try: - # 如果请求交易所历史订单,直接从交易所获取 - if status == "exchange": - trading_api = get_bitget_trading_api() + trading_api = get_bitget_trading_api() - if not trading_api: - return { - "success": False, - "message": "Bitget API 未配置", - "count": 0, - "orders": [] - } - - orders = trading_api.get_closed_orders(symbol, limit) - - return { - "success": True, - "count": len(orders), - "orders": orders, - "source": "exchange" - } - - # 否则从本地数据库获取 - service = get_real_trading_service() - - if not service: + if not trading_api: return { "success": False, - "message": "实盘交易服务未启用", + "message": "Bitget API 未配置", "count": 0, "orders": [] } - if status == "active": - orders = service.get_active_orders() - elif status == "closed": - # 从数据库获取历史订单 - from app.services.db_service import db_service - from app.models.real_trading import RealOrder - from app.models.paper_trading import OrderStatus + # 获取成交记录(推荐,包含盈亏信息) + if status == "trades": + orders = trading_api.get_closed_orders(symbol, limit) + return { + "success": True, + "count": len(orders), + "orders": orders, + "source": "trades" + } - db = db_service.get_session() + # 获取历史订单 + if status in ["orders", "exchange"]: try: - query = db.query(RealOrder).filter( - RealOrder.status.in_([OrderStatus.CLOSED, OrderStatus.CANCELLED]) - ) - if symbol: - query = query.filter(RealOrder.symbol == symbol) + ccxt_symbol = trading_api._standardize_symbol(symbol) + orders = trading_api.exchange.fetch_closed_orders(ccxt_symbol, limit=limit) + else: + orders = trading_api.exchange.fetch_closed_orders(limit=limit) - orders = [order.to_dict() for order in query.order_by( - RealOrder.created_at.desc() - ).limit(limit).all()] - finally: - db.close() - else: - # 返回所有订单 - active = service.get_active_orders() - # TODO: 获取历史订单 - orders = active + return { + "success": True, + "count": len(orders), + "orders": orders, + "source": "orders" + } + except Exception as e: + logger.error(f"获取历史订单失败: {e}") + return { + "success": False, + "message": f"获取历史订单失败: {str(e)}", + "count": 0, + "orders": [] + } + # 默认返回成交记录 + orders = trading_api.get_closed_orders(symbol, limit) return { "success": True, "count": len(orders), "orders": orders, - "source": "database" + "source": "trades" } + except Exception as e: - logger.error(f"获取实盘订单列表失败: {e}") + logger.error(f"获取实盘交易历史失败: {e}") raise HTTPException(status_code=500, detail=str(e)) diff --git a/backend/app/services/bitget_trading_api_sdk.py b/backend/app/services/bitget_trading_api_sdk.py index a6b15c4..592ca24 100644 --- a/backend/app/services/bitget_trading_api_sdk.py +++ b/backend/app/services/bitget_trading_api_sdk.py @@ -376,21 +376,21 @@ class BitgetTradingAPI: 历史订单列表 """ try: - # 使用 CCXT 的 fetch_closed_orders 或 fetch_my_trades + # 使用 CCXT 的 fetch_my_trades 获取历史成交记录(包含盈亏信息) if symbol: ccxt_symbol = self._standardize_symbol(symbol) - orders = self.exchange.fetch_closed_orders(ccxt_symbol, limit=limit) + trades = self.exchange.fetch_my_trades(ccxt_symbol, limit=limit) else: - orders = self.exchange.fetch_closed_orders(limit=limit) + trades = self.exchange.fetch_my_trades(limit=limit) - logger.debug(f"查询到 {len(orders)} 条历史订单") - return orders + logger.debug(f"查询到 {len(trades)} 条历史成交记录") + return trades except ccxt.BaseError as e: - logger.error(f"❌ 查询历史订单失败: {e}") + logger.error(f"❌ 查询历史成交失败: {e}") return [] except Exception as e: - logger.error(f"❌ 查询历史订单异常: {e}") + logger.error(f"❌ 查询历史成交异常: {e}") return [] # ==================== 账户操作 ==================== diff --git a/frontend/real-trading.html b/frontend/real-trading.html index 44e1b1d..08de2c4 100644 --- a/frontend/real-trading.html +++ b/frontend/real-trading.html @@ -462,8 +462,14 @@ + @@ -482,7 +488,14 @@

暂无持仓

-
+
+ + + +

暂无成交记录

+
+ +
@@ -503,14 +516,23 @@ 盈亏比例 强平价格 + + 交易对 + 方向 + 价格 + 数量 + 成交金额 + 手续费 + 盈亏 + 时间 + 交易对 方向 类型 价格 数量 - 成交金额 - 手续费 + 成交数量 状态 时间 @@ -539,9 +561,35 @@ ${{ pos.liquidationPrice ? parseFloat(pos.liquidationPrice).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) : '-' }} - -