订单记录与币安的一致性

This commit is contained in:
薇薇安 2026-02-16 10:46:09 +08:00
parent b5590b760f
commit a884ed13ad

View File

@ -79,6 +79,7 @@ async def get_trades(
trade_type: Optional[str] = Query(None, description="交易类型筛选: 'buy', 'sell'"),
exit_reason: Optional[str] = Query(None, description="平仓原因筛选: 'stop_loss', 'take_profit', 'trailing_stop', 'manual', 'sync'"),
status: Optional[str] = Query(None, description="状态筛选: 'open', 'closed', 'cancelled'"),
include_sync: bool = Query(False, description="是否包含 entry_reason 为 sync_recovered 的历史同步单"),
limit: int = Query(100, ge=1, le=1000, description="返回记录数限制"),
):
"""
@ -126,7 +127,9 @@ async def get_trades(
logger.warning(f"无效的结束日期格式: {end_date}")
trades = Trade.get_all(start_timestamp, end_timestamp, symbol, status, trade_type, exit_reason, account_id=account_id)
logger.info(f"查询到 {len(trades)} 条交易记录")
if not include_sync:
trades = [t for t in trades if (t.get("entry_reason") or "") != "sync_recovered"]
logger.info(f"查询到 {len(trades)} 条交易记录include_sync={include_sync}")
# 格式化交易记录,添加平仓类型的中文显示
formatted_trades = []
@ -184,6 +187,7 @@ async def get_trade_stats(
end_date: Optional[str] = Query(None, description="结束日期 (YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS)"),
period: Optional[str] = Query(None, description="快速时间段筛选: '1d', '7d', '30d', 'today', 'week', 'month'"),
symbol: Optional[str] = Query(None, description="交易对筛选"),
include_sync: bool = Query(False, description="是否包含 entry_reason 为 sync_recovered 的历史同步单"),
):
"""获取交易统计"""
try:
@ -221,6 +225,8 @@ async def get_trade_stats(
logger.warning(f"无效的结束日期格式: {end_date}")
trades = Trade.get_all(start_timestamp, end_timestamp, symbol, None, account_id=account_id)
if not include_sync:
trades = [t for t in trades if (t.get("entry_reason") or "") != "sync_recovered"]
closed_trades = [t for t in trades if t['status'] == 'closed']
# 辅助函数:计算净盈亏(优先使用 realized_pnl - commission