This commit is contained in:
薇薇安 2026-01-22 18:51:26 +08:00
parent 244ef6f4ba
commit 06272b6922

View File

@ -248,7 +248,27 @@ const TradeList = () => {
<div className="stat-value">总盈亏{stats.total_pnl.toFixed(2)} USDT</div> <div className="stat-value">总盈亏{stats.total_pnl.toFixed(2)} USDT</div>
<div className="stat-value">平均盈亏{stats.avg_pnl.toFixed(2)} USDT</div> <div className="stat-value">平均盈亏{stats.avg_pnl.toFixed(2)} USDT</div>
<div className="stat-value">平均持仓时长分钟{Number(stats.avg_duration_minutes || 0).toFixed(0)}</div> <div className="stat-value">平均持仓时长分钟{Number(stats.avg_duration_minutes || 0).toFixed(0)}</div>
<div className="stat-value">平仓原因有意义交易{stats.exit_reason_counts.join(' / ')}</div> <div className="stat-value">平仓原因有意义交易
<div className="stat-value" style={{ fontSize: '1.1rem' }}>
{(() => {
const m = stats.exit_reason_counts || {}
const stopLoss = Number(m.stop_loss || 0)
const takeProfit = Number(m.take_profit || 0)
const trailing = Number(m.trailing_stop || 0)
const manual = Number(m.manual || 0)
const sync = Number(m.sync || 0)
const other = Number(m.unknown || 0)
const parts = []
if (stopLoss) parts.push(`止损 ${stopLoss}`)
if (takeProfit) parts.push(`止盈 ${takeProfit}`)
if (trailing) parts.push(`移动止损 ${trailing}`)
if (manual) parts.push(`手动 ${manual}`)
if (sync) parts.push(`同步 ${sync}`)
if (other) parts.push(`其他 ${other}`)
return parts.length ? parts.join(' / ') : '—'
})()}
</div>
</div>
<div className="stat-value">平均盈利 / 平均亏损期望 3:1{stats.avg_win_loss_ratio.toFixed(2)} : 1</div> <div className="stat-value">平均盈利 / 平均亏损期望 3:1{stats.avg_win_loss_ratio.toFixed(2)} : 1</div>
<div className="stat-value">总交易量名义{stats.total_notional_usdt.toFixed(2)} USDT</div> <div className="stat-value">总交易量名义{stats.total_notional_usdt.toFixed(2)} USDT</div>
</div> </div>
@ -324,9 +344,8 @@ const TradeList = () => {
<div className="stat-card"> <div className="stat-card">
<div className="stat-label">平均盈利 / 平均亏损期望 3:1</div> <div className="stat-label">平均盈利 / 平均亏损期望 3:1</div>
<div <div
className={`stat-value ${ 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 >= 3 ? 'positive' : '' }`}
}`}
> >
{typeof stats.avg_win_loss_ratio === 'number' {typeof stats.avg_win_loss_ratio === 'number'
? `${stats.avg_win_loss_ratio.toFixed(2)} : 1` ? `${stats.avg_win_loss_ratio.toFixed(2)} : 1`
@ -380,10 +399,10 @@ const TradeList = () => {
const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null
? parseFloat(trade.notional_usdt) ? parseFloat(trade.notional_usdt)
: ( : (
trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
? parseFloat(trade.entry_value_usdt) ? parseFloat(trade.entry_value_usdt)
: (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0)) : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
) )
const leverage = parseFloat(trade.leverage || 10) const leverage = parseFloat(trade.leverage || 10)
const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null
? parseFloat(trade.margin_usdt) ? parseFloat(trade.margin_usdt)
@ -466,10 +485,10 @@ const TradeList = () => {
const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null const notional = trade.notional_usdt !== undefined && trade.notional_usdt !== null
? parseFloat(trade.notional_usdt) ? parseFloat(trade.notional_usdt)
: ( : (
trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null trade.entry_value_usdt !== undefined && trade.entry_value_usdt !== null
? parseFloat(trade.entry_value_usdt) ? parseFloat(trade.entry_value_usdt)
: (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0)) : (parseFloat(trade.quantity || 0) * parseFloat(trade.entry_price || 0))
) )
const leverage = parseFloat(trade.leverage || 10) const leverage = parseFloat(trade.leverage || 10)
const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null const margin = trade.margin_usdt !== undefined && trade.margin_usdt !== null
? parseFloat(trade.margin_usdt) ? parseFloat(trade.margin_usdt)
@ -562,17 +581,17 @@ const TradeList = () => {
)} )}
</div> </div>
<div className="trade-card-footer"> <div className="trade-card-footer">
<div className="trade-time-item">
<span className="time-label">入场:</span>
<span>{formatTime(trade.entry_time)}</span>
</div>
{trade.exit_time && (
<div className="trade-time-item"> <div className="trade-time-item">
<span className="time-label">平仓:</span> <span className="time-label">入场:</span>
<span>{formatTime(trade.exit_time)}</span> <span>{formatTime(trade.entry_time)}</span>
</div> </div>
)} {trade.exit_time && (
</div> <div className="trade-time-item">
<span className="time-label">平仓:</span>
<span>{formatTime(trade.exit_time)}</span>
</div>
)}
</div>
</div> </div>
) )
})} })}