{{ toast.message }}

{{ tt('strategy.trendUnified.desc', null, 'Start/stop and edit in Workbench. Use PnL, Positions, and Orders to view performance and records. Use Design to edit parameters.') }}

{{ tt('strategy.unified.readonlyBanner', null, 'Admin read-only: view only, operations are disabled.') }}
{{ tt('strategy.unified.kpi.total', null, 'Total') }}
{{ trendCfgTotal }}
{{ tt('strategy.trendUnified.kpiSub.total', null, 'Trend configs') }}
{{ tt('strategy.unified.kpi.running', null, 'Running') }}
{{ trendCfgRunning }}
{{ tt('strategy.trendUnified.kpiSub.running', { all: trendCfgRunningAll, symbol: trendCfgRunningSymbol }, 'ALL {all} · Single {symbol}') }}
{{ tt('strategy.unified.kpi.suspended', null, 'Suspended') }}
{{ trendCfgSuspended }}
{{ tt('strategy.unified.kpiSub.suspended', null, 'Suspended · check') }}
{{ tt('strategy.unified.kpi.stopped', null, 'Stopped') }}
{{ trendCfgStopped }}
{{ tt('strategy.unified.kpiSub.stopped', null, 'Not running') }}
{{ tt('strategy.trendUnified.workbench.allScopeBanner', null, '') }}

{{ tt('strategy.trendUnified.workbench.summaryLine', { n: (trendConfigs || []).length }, '—') }}

{{ tt('strategy.trendUnified.workbench.newStrategy', null, 'New') }}
{{ tt('strategy.trendUnified.workbench.thName', null, 'Name') }} {{ tt('strategy.trendUnified.workbench.thPriority', null, 'Priority') }} {{ tt('strategy.trendUnified.workbench.thScope', null, 'Scope') }} {{ tt('strategy.trendUnified.workbench.thStatus', null, 'Status') }} {{ tt('strategy.trendUnified.workbench.thPerOrder', null, 'USDT') }} {{ tt('strategy.trendUnified.workbench.thMktFilter', null, 'Filter') }} {{ tt('strategy.trendUnified.workbench.thTfi', null, 'TFI') }} {{ tt('strategy.trendUnified.workbench.thUpdated', null, 'Updated') }} {{ tt('strategy.trendUnified.workbench.thAction', null, 'Actions') }}
{{ trendCfgDisplayName(c) }} {{ c.priority != null && c.priority !== '' ? c.priority : 0 }} {{ c.monitorScope || 'ALL' }} {{ strategyCfgStatusLabel(c.status) }} {{ fmtAmount(c.positionAmount) }} {{ marketFilterLabel(c) }} {{ c.tfiThreshold != null ? c.tfiThreshold : tt('strategy.trendUnified.workbench.tfiNoCheck', null, '—') }} {{ fmtDateTime(c.updatedAt || c.createdAt) }}
{{ cfgError }}
{{ tt('strategy.trendUnified.workbench.load', null, '…') }}

{{ (trendConfigs || []).length === 0 ? tt('strategy.trendUnified.workbench.emptyTitleNoCfg', null, '') : tt('strategy.trendUnified.workbench.emptyTitleFiltered', null, '') }}

{{ (trendConfigs || []).length === 0 ? tt('strategy.trendUnified.workbench.emptyDescNoCfg', null, '') : tt('strategy.trendUnified.workbench.emptyDescFiltered', null, '') }}

{{ tt('strategy.trendUnified.workbench.footHint', null, '') }}
{{ tt('strategy.trendUnified.pnl.chartTitle', null, 'PnL') }}
{{ tt('strategy.trendUnified.pnl.chartYUnit', null, 'USDT') }}
{{ tt('strategy.trendUnified.pnl.emptyNoPnl', null, '') }}
{{ tt('strategy.trendUnified.pnl.kpiPosValue', null, '—') }}
{{ fmtNum(summary.totalPositionValue) }}USDT
{{ tt('strategy.trendUnified.pnl.kpiRealized', null, '—') }}
{{ fmtNum(summary.totalRealizedPnl) }}USDT
{{ tt('strategy.trendUnified.pnl.kpiUnreal', null, '—') }}
{{ summary.totalUnrealizedPnl != null ? fmtNum(summary.totalUnrealizedPnl) : (tt('common.emDash', null, '—')) }}USDT
{{ tt('strategy.trendUnified.pnl.kpiWinRate', null, '—') }}
{{ pnlStats.winRatePct != null ? Number(pnlStats.winRatePct).toFixed(2) + '%' : (tt('common.emDash', null, '—')) }}
{{ tt('strategy.trendUnified.pnl.kpiWinRecord', { w: pnlStats.winCount || 0, l: pnlStats.lossCount || 0, f: pnlStats.flatCount || 0 }, '') }}
{{ tt('strategy.trendUnified.pnl.kpiPayoff', null, '—') }}
{{ pnlStats.payoffRatio != null ? Number(pnlStats.payoffRatio).toFixed(2) : (tt('common.emDash', null, '—')) }}
{{ tt('strategy.trendUnified.pnl.kpiProfitFactor', null, '—') }}
{{ pnlStats.profitFactor != null ? Number(pnlStats.profitFactor).toFixed(2) : (tt('common.emDash', null, '—')) }}
{{ tt('strategy.trendUnified.pnl.kpiAvgPnl', null, '—') }}
{{ pnlStats.avgPnlPerTrade != null ? fmtNum(pnlStats.avgPnlPerTrade) : (tt('common.emDash', null, '—')) }}USDT
{{ tt('strategy.trendUnified.pnl.kpiClosedCount', null, '—') }}
{{ closedTotal }}{{ tt('strategy.trendUnified.pnl.kpiTradesUnit', null, '') }}
{{ tt('strategy.trendUnified.pnl.kpiMaxDdLabel', null, '—') }}
{{ pnlKpiMaxDrawdown != null ? fmtNum(pnlKpiMaxDrawdown) : (tt('common.emDash', null, '—')) }}USDT
{{ tt('strategy.trendUnified.pnl.kpiLastDay', null, '—') }}
{{ pnlKpiLastDailyPnl != null ? fmtNum(pnlKpiLastDailyPnl) : (tt('common.emDash', null, '—')) }}USDT

{{ tt('strategy.trendUnified.pnl.stripHint', null, '') }}

{{ tt('strategy.trendUnified.pnl.realizedList', null, '') }}
{{ tt('strategy.trendUnified.pnl.fByClose', null, '') }} {{ tt('strategy.trendUnified.pnl.fHintPnl', null, '') }}
{{ tt('strategy.trendUnified.pnl.thSymbol', null, '—') }} {{ tt('strategy.trendUnified.pnl.thTrendName', null, '—') }} {{ tt('strategy.trendUnified.pnl.thBuyTime', null, '—') }} {{ tt('strategy.trendUnified.pnl.thCloseTime', null, '—') }} {{ tt('strategy.trendUnified.pnl.thQty', null, '—') }} {{ tt('strategy.trendUnified.pnl.thBuyPx', null, '—') }} {{ tt('strategy.trendUnified.pnl.thSellPx', null, '—') }} {{ tt('strategy.trendUnified.pnl.thRealPnl', null, '—') }} {{ tt('strategy.trendUnified.pnl.thOrdStatus', null, '—') }} {{ tt('strategy.trendUnified.pnl.thRemark', null, '—') }}
{{ row.symbol }} {{ trendAttributionLabel(row) }} {{ fmtTime(row.buyTime) }} {{ fmtTime(row.closeTime) }} {{ fmtNum(row.holdQuantity) }} {{ fmtNum(row.averagePrice) }} {{ fmtNum(row.sellAvgPrice) }} {{ fmtNum(row.realizedPnl) }} {{ closedTradeStatusZh(row) }} {{ row.remark || '-' }}
{{ tt('strategy.trendUnified.pnl.emptyList', null, '') }}
{{ tt('strategy.trendUnified.pos.thSymbol', null, '—') }} {{ tt('strategy.trendUnified.pos.thTrendName', null, '—') }} {{ tt('strategy.trendUnified.pos.thSide', null, '—') }} {{ tt('strategy.trendUnified.pos.thQty', null, '—') }} {{ tt('strategy.trendUnified.pos.thAvg', null, '—') }} {{ tt('strategy.trendUnified.pos.thLast', null, '—') }} {{ tt('strategy.trendUnified.pos.thUpnlPct', null, '—') }} {{ tt('strategy.trendUnified.pos.thValue', null, '—') }} {{ tt('strategy.trendUnified.pos.thTp', null, '—') }} {{ tt('strategy.trendUnified.pos.thSl', null, '—') }} {{ tt('strategy.trendUnified.pos.thRemark', null, '—') }} {{ tt('strategy.trendUnified.pos.thUpdated', null, '—') }} {{ tt('strategy.trendUnified.pos.thAction', null, '—') }}
{{ row.symbol }} {{ trendAttributionLabel(row) }} {{ sideZh(row.tradeSide) }} {{ fmtNum(row.holdQuantity) }} {{ fmtNum(row.averagePrice) }} {{ fmtNum(row.currentPrice) }} {{ fmtPct(row.unrealizedPnlPct) }} {{ fmtNum(row.holdQuantityValue) }} {{ fmtNum(row.stopProfitPrice) }} {{ fmtNum(row.stopLossPrice) }} {{ row.remark || '-' }} {{ fmtTime(row.updateTime) }}
{{ tt('strategy.trendUnified.pos.empty', null, '') }}
{{ tt('strategy.trendUnified.pos.load', null, '…') }}
{{ tt('strategy.trendUnified.ord.thTime', null, '—') }} {{ tt('strategy.trendUnified.ord.thSymbol', null, '—') }} {{ tt('strategy.trendUnified.ord.thSide', null, '—') }} {{ tt('strategy.trendUnified.ord.thType', null, '—') }} {{ tt('strategy.trendUnified.ord.thQty', null, '—') }} {{ tt('strategy.trendUnified.ord.thPrice', null, '—') }} {{ tt('strategy.trendUnified.ord.thQuote', null, '—') }} {{ tt('strategy.trendUnified.ord.thStatus', null, '—') }} {{ tt('strategy.trendUnified.ord.thOrdId', null, '—') }}
{{ fmtTime(row.createTime) }} {{ row.symbol }} {{ sideZh(row.side) }} {{ orderTypeZh(row.type) }} {{ fmtNum(row.executedQty) }} {{ fmtNum(row.price) }} {{ fmtNum(row.cummulativeQuoteQty) }} {{ orderStatusZh(row.status) }} {{ row.orderId || '-' }}
{{ tt('strategy.trendUnified.ord.empty', null, '') }}
{{ tt('strategy.trendUnified.ord.load', null, '…') }}