diff --git a/frontend/src/components/TradeList.jsx b/frontend/src/components/TradeList.jsx
index b010c3e..f39a9d1 100644
--- a/frontend/src/components/TradeList.jsx
+++ b/frontend/src/components/TradeList.jsx
@@ -6,7 +6,7 @@ const TradeList = () => {
const [trades, setTrades] = useState([])
const [stats, setStats] = useState(null)
const [loading, setLoading] = useState(true)
-
+
// 筛选状态
const [period, setPeriod] = useState('today') // '1d', '7d', '30d', 'today', 'week', 'month', null
const [startDate, setStartDate] = useState('')
@@ -19,13 +19,13 @@ const TradeList = () => {
useEffect(() => {
loadData()
-
+
// 监听账号切换事件,自动重新加载数据
const handleAccountChange = () => {
loadData()
}
window.addEventListener('ats:account:changed', handleAccountChange)
-
+
return () => {
window.removeEventListener('ats:account:changed', handleAccountChange)
}
@@ -37,7 +37,7 @@ const TradeList = () => {
const params = {
limit: 100
}
-
+
// 如果使用快速时间段筛选
if (!useCustomDate && period) {
params.period = period
@@ -46,12 +46,12 @@ const TradeList = () => {
if (startDate) params.start_date = startDate
if (endDate) params.end_date = endDate
}
-
+
if (symbol) params.symbol = symbol
if (status) params.status = status
if (tradeType) params.trade_type = tradeType
if (exitReason) params.exit_reason = exitReason
-
+
const [tradesData, statsData] = await Promise.all([
api.getTrades(params),
api.getTradeStats(params)
@@ -96,49 +96,49 @@ const TradeList = () => {
说明:每条记录代表一笔完整的交易(开仓+平仓),统计总盈亏时每条记录只计算一次
-
+
{/* 筛选面板 */}
-
-
-
-
-
-
-
)
}
-
+
{stats && (
@@ -324,9 +344,8 @@ const TradeList = () => {
平均盈利 / 平均亏损(期望 3:1)
= 3 ? 'positive' : ''
- }`}
+ className={`stat-value ${typeof stats.avg_win_loss_ratio === 'number' && stats.avg_win_loss_ratio >= 3 ? 'positive' : ''
+ }`}
>
{typeof stats.avg_win_loss_ratio === 'number'
? `${stats.avg_win_loss_ratio.toFixed(2)} : 1`
@@ -380,19 +399,19 @@ const TradeList = () => {
const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null
? parseFloat(trade.notional_usdt)
: (
- trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
- ? parseFloat(trade.entry_value_usdt)
- : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
- )
+ trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
+ ? parseFloat(trade.entry_value_usdt)
+ : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
+ )
const leverage = parseFloat(trade.leverage || 10)
const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null
? parseFloat(trade.margin_usdt)
: (leverage > 0 ? notional / leverage : 0)
-
+
// 计算盈亏比例(盈亏/保证金)
const pnl = parseFloat(trade.pnl || 0)
const pnlPercent = margin > 0 ? (pnl / margin) * 100 : 0
-
+
// 格式化时间为北京时间
// 支持Unix时间戳(秒数)或日期字符串
const formatTime = (timeValue) => {
@@ -418,7 +437,7 @@ const TradeList = () => {
return String(timeValue)
}
}
-
+
// 格式化订单号显示
const formatOrderIds = () => {
const entry = trade.entry_order_id || '-'
@@ -429,7 +448,7 @@ const TradeList = () => {
}
return entry !== '-' ? `开仓: ${entry}` : `平仓: ${exit}`
}
-
+
return (
| #{trade.id} |
@@ -458,7 +477,7 @@ const TradeList = () => {
})}
-
+
{/* 移动端卡片 */}
{trades.map(trade => {
@@ -466,17 +485,17 @@ const TradeList = () => {
const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null
? parseFloat(trade.notional_usdt)
: (
- trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
- ? parseFloat(trade.entry_value_usdt)
- : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
- )
+ trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
+ ? parseFloat(trade.entry_value_usdt)
+ : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
+ )
const leverage = parseFloat(trade.leverage || 10)
const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null
? parseFloat(trade.margin_usdt)
: (leverage > 0 ? notional / leverage : 0)
const pnl = parseFloat(trade.pnl || 0)
const pnlPercent = margin > 0 ? (pnl / margin) * 100 : 0
-
+
// 格式化时间为北京时间
// 支持Unix时间戳(秒数)或日期字符串
const formatTime = (timeValue) => {
@@ -501,7 +520,7 @@ const TradeList = () => {
return String(timeValue)
}
}
-
+
return (
@@ -562,17 +581,17 @@ const TradeList = () => {
)}
-
- 入场:
- {formatTime(trade.entry_time)}
-
- {trade.exit_time && (
- 平仓:
- {formatTime(trade.exit_time)}
+ 入场:
+ {formatTime(trade.entry_time)}
- )}
-
+ {trade.exit_time && (
+
+ 平仓:
+ {formatTime(trade.exit_time)}
+
+ )}
+
)
})}