65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
"""
|
|
交易记录API
|
|
"""
|
|
from fastapi import APIRouter, Query, HTTPException
|
|
from typing import Optional
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
project_root = Path(__file__).parent.parent.parent.parent
|
|
sys.path.insert(0, str(project_root))
|
|
sys.path.insert(0, str(project_root / 'backend'))
|
|
|
|
from database.models import Trade
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/")
|
|
async def get_trades(
|
|
start_date: Optional[str] = Query(None),
|
|
end_date: Optional[str] = Query(None),
|
|
symbol: Optional[str] = Query(None),
|
|
status: Optional[str] = Query(None),
|
|
limit: int = Query(100, ge=1, le=1000)
|
|
):
|
|
"""获取交易记录"""
|
|
try:
|
|
trades = Trade.get_all(start_date, end_date, symbol, status)
|
|
return {
|
|
"total": len(trades),
|
|
"trades": trades[:limit]
|
|
}
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.get("/stats")
|
|
async def get_trade_stats(
|
|
start_date: Optional[str] = Query(None),
|
|
end_date: Optional[str] = Query(None),
|
|
symbol: Optional[str] = Query(None)
|
|
):
|
|
"""获取交易统计"""
|
|
try:
|
|
from fastapi import HTTPException
|
|
trades = Trade.get_all(start_date, end_date, symbol, None)
|
|
closed_trades = [t for t in trades if t['status'] == 'closed']
|
|
win_trades = [t for t in closed_trades if float(t['pnl']) > 0]
|
|
|
|
stats = {
|
|
"total_trades": len(trades),
|
|
"closed_trades": len(closed_trades),
|
|
"open_trades": len(trades) - len(closed_trades),
|
|
"win_trades": len(win_trades),
|
|
"loss_trades": len(closed_trades) - len(win_trades),
|
|
"win_rate": len(win_trades) / len(closed_trades) * 100 if closed_trades else 0,
|
|
"total_pnl": sum(float(t['pnl']) for t in closed_trades),
|
|
"avg_pnl": sum(float(t['pnl']) for t in closed_trades) / len(closed_trades) if closed_trades else 0,
|
|
}
|
|
|
|
return stats
|
|
except Exception as e:
|
|
from fastapi import HTTPException
|
|
raise HTTPException(status_code=500, detail=str(e))
|