{{ tt('strategy.gridUnified.desc', null, 'Start/stop/close in Workbench. Use PnL/Positions/Fills tabs for analysis. Use Design to edit parameters.') }}
| {{ tt('strategy.gridUnified.wb.thSymbol', null, 'Symbol') }} | {{ tt('strategy.gridUnified.wb.thStatus', null, 'Status') }} | {{ tt('strategy.gridUnified.wb.thPrice', null, 'Price') }} | {{ tt('strategy.gridUnified.wb.thRangePos', null, 'Range') }} | {{ tt('strategy.gridUnified.wb.thGridCount', null, 'Levels') }} | {{ tt('strategy.gridUnified.wb.thPerGrid', null, 'Per level') }} | {{ tt('strategy.gridUnified.wb.thFunds', null, 'Funds') }} | {{ tt('strategy.gridUnified.wb.thLastFill', null, 'Last fill') }} | {{ tt('strategy.gridUnified.wb.thHealth', null, 'Health') }} | {{ tt('strategy.gridUnified.wb.thCooldown', null, 'Cooldown') }} | {{ tt('strategy.gridUnified.wb.thOps', null, 'Actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ c.name ? c.symbol + ' · ' + c.name : c.symbol }} | {{ statusText(c) }} | {{ fmtPrice(c.currentPrice) }} | {{ rangeAndPosition(c) }} | {{ c.gridCount }} {{ tt('strategy.gridUnified.wb.gridLevelsUnit', null, 'levels') }} | {{ c.amountPerGrid != null ? c.amountPerGrid + ' USDT' : '—' }} |
{{ tt('strategy.gridUnified.wb.fundsPosition', null, 'Position') }} {{ fmtQuantity(c.totalHeldQuantity) }}
{{ tt('strategy.gridUnified.wb.fundsLine', { mv: fmtPrice(c.totalPositionValueUsdt), r: fmtPnlShort(c.totalRealizedPnl), u: fmtPnlShort(c.totalUnrealizedPnl) }, '') }}
|
{{ fmtLastFill(c) }} | {{ healthLabel(c) }} |
{{ tt('strategy.gridUnified.wb.skipTotal', { n: c.skipLevelCount }, '') }}
{{ tt('strategy.gridUnified.wb.cooldownShort', { cd: c.cooldownLevelCount || 0, perm: c.permanentBlockedCount || 0 }, '') }}
|
|
{{ configs.length === 0 ? tt('strategy.gridUnified.wb.emptyNoneDesc', null, '') : tt('strategy.gridUnified.wb.emptyFilteredDesc', null, '') }}
| {{ tt('strategy.gridUnified.rec.ovThSymbol', null, 'Symbol') }} {{ sortIndicator('symbol') }} | {{ tt('strategy.gridUnified.rec.ovThName', null, 'Name') }} | {{ tt('strategy.gridUnified.rec.ovThStatus', null, 'Status') }} {{ sortIndicator('status') }} | {{ tt('strategy.gridUnified.rec.ovThPrice', null, 'Price') }} {{ sortIndicator('currentPrice') }} | {{ tt('strategy.gridUnified.rec.ovThRange', null, 'Range') }} | {{ tt('strategy.gridUnified.rec.ovThBand', null, 'Band') }} | {{ tt('strategy.gridUnified.rec.ovThGridCount', null, 'Levels') }} {{ sortIndicator('gridCount') }} | {{ tt('strategy.gridUnified.rec.ovThOrdersCycles', null, 'Orders') }} | {{ tt('strategy.gridUnified.rec.ovThWinRate', null, 'Win%') }} {{ sortIndicator('winRatePct') }} | {{ tt('strategy.gridUnified.rec.ovThRunDur', null, 'Runtime') }} | {{ tt('strategy.gridUnified.rec.ovThHeldQty', null, 'Held') }} {{ sortIndicator('totalHeldQuantity') }} | {{ tt('strategy.gridUnified.rec.ovThMktVal', null, 'Mkt') }} {{ sortIndicator('totalPositionValueUsdt') }} | {{ tt('strategy.gridUnified.rec.ovThRealized', null, 'Realized') }} {{ sortIndicator('totalRealizedPnl') }} | {{ tt('strategy.gridUnified.rec.ovThUnrealized', null, 'Unrealized') }} {{ sortIndicator('totalUnrealizedPnl') }} | {{ tt('strategy.gridUnified.rec.ovThOps', null, 'Actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.symbol }} | {{ r.name || '-' }} | {{ rstrategyStatusText(r) }} | {{ rfmtPrice(r.currentPrice) }} | {{ rrangeAndPosition(r) }} | {{ rcurrentPriceBand(r) }} | {{ r.gridCount || '-' }} | {{ (r.orderCount != null ? r.orderCount : '-') + '/' + (r.cycleCount != null ? r.cycleCount : '-') }} | {{ rfmtPct(r.winRatePct) }} | {{ rfmtRunDuration(r) }} | {{ rfmtQty(r.totalHeldQuantity) }} | {{ rfmtPrice(r.totalPositionValueUsdt) }} | {{ rfmtPnl(r.totalRealizedPnl) }} | {{ rfmtPnl(r.totalUnrealizedPnl) }} |
| {{ tt('strategy.gridUnified.rec.posColSymbol', null, 'Symbol') }} | {{ tt('strategy.gridUnified.rec.posColName', null, 'Name') }} | {{ tt('strategy.gridUnified.rec.posColLevel', null, 'Level') }} | {{ tt('strategy.gridUnified.rec.posColSide', null, 'Side') }} | {{ tt('strategy.gridUnified.rec.posColAvgPx', null, '') }} | {{ tt('strategy.gridUnified.rec.posColNetQty', null, '') }} | {{ tt('strategy.gridUnified.rec.posColUnreal', null, '') }} | {{ tt('strategy.gridUnified.rec.posColStatus', null, '') }} | {{ tt('strategy.gridUnified.rec.posColRefTime', null, '') }} |
|---|---|---|---|---|---|---|---|---|
| {{ rowSymbol(o) }} | {{ rowStrategyName(o) }} | {{ rdisplayGridLevel(o.gridLevel) }} | {{ rsideLabel(o.side) }} | {{ rfmtPrice(o.filledPrice!=null?o.filledPrice:o.price) }} | {{ rfmtQty(o.filledQuantity||o.quantity) }} | {{ rfmtPnl(o.unrealizedPnl) }} | {{ rstatusLabel(o.status) }} | {{ rfmtTableTime(o.createdAt) }} |
| {{ tt('strategy.gridUnified.rec.fillsColSymbol', null, 'Symbol') }} | {{ tt('strategy.gridUnified.rec.fillsColName', null, 'Name') }} | {{ tt('strategy.gridUnified.rec.fillsColLevel', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColSide', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColPrice', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColPlannedQty', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColFilledQty', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColRealized', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColUnrealized', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColStatus', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColErr', null, '') }} | {{ tt('strategy.gridUnified.rec.fillsColTime', null, '') }} |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ rowSymbol(o) }} | {{ rowStrategyName(o) }} | {{ rdisplayGridLevel(o.gridLevel) }} | {{ rsideLabel(o.side) }} | {{ rfmtPrice(o.filledPrice!=null?o.filledPrice:o.price) }} | {{ rfmtPlannedQty(o.plannedQuantity) }} | {{ rfmtQty(o.filledQuantity!=null&&Number(o.filledQuantity)!==0?o.filledQuantity:o.quantity) }} | {{ rfmtPnl(o.realizedPnl) }} | {{ rfmtPnl(o.unrealizedPnl) }} | {{ rstatusLabel(o.status) }} | {{ rshortErr(o) }} | {{ rfmtTableTime(o.createdAt) }} |