Interface IHeatmapRow

Portfolio heatmap statistics for a single symbol. Aggregated metrics across all strategies for one trading pair.

interface IHeatmapRow {
    annualizedSharpeRatio: number;
    avgConsecutiveLossPnl: number;
    avgConsecutiveWinPnl: number;
    avgDuration: number;
    avgFallPnl: number;
    avgLoss: number;
    avgLossDuration: number;
    avgPeakPnl: number;
    avgPnl: number;
    avgWin: number;
    avgWinDuration: number;
    buyerPressure: number;
    buyerStrength: number;
    calmarRatio: number;
    certaintyRatio: number;
    expectancy: number;
    expectedYearlyReturns: number;
    lossCount: number;
    maxDrawdown: number;
    maxDrawdownPnl: number;
    maxLossStreak: number;
    maxWinStreak: number;
    medianPnl: number;
    medianStepSize: number;
    peakProfitPnl: number;
    pressureImbalance: number;
    profitFactor: number;
    recoveryFactor: number;
    sellerPressure: number;
    sellerStrength: number;
    sharpeRatio: number;
    sortinoRatio: number;
    stdDev: number;
    symbol: string;
    totalPnl: number;
    totalTrades: number;
    tradesPerYear: number;
    trend: "bullish" | "bearish" | "sideways" | "neutral";
    trendConfidence: number;
    trendStrength: number;
    winCount: number;
    winRate: number;
}

Properties

annualizedSharpeRatio: number

Annualized Sharpe Ratio (sharpeRatio × √tradesPerYear). Higher is better.

avgConsecutiveLossPnl: number

Average sum of pnlPercentage across consecutive losing streaks. Null if no loss streak. Closer to 0 is better.

avgConsecutiveWinPnl: number

Average sum of pnlPercentage across consecutive winning streaks. Null if no win streak.

avgDuration: number

Average trade duration in minutes ((closeTimestamp - pendingAt) / 60_000).

avgFallPnl: number

Average fall PNL percentage across all trades (_fall.pnlPercentage). Closer to 0 is better.

avgLoss: number

Average loss percentage on losing trades

avgLossDuration: number

Average duration in minutes of losing trades.

avgPeakPnl: number

Average peak PNL percentage across all trades (_peak.pnlPercentage). Higher is better.

avgPnl: number

Average PNL per trade

avgWin: number

Average profit percentage on winning trades

avgWinDuration: number

Average duration in minutes of winning trades.

buyerPressure: number

Fraction of up-moves among decisive close-to-close moves. 0..1. Higher = buyers more frequent.

buyerStrength: number

Share of upward absolute movement in total close-to-close movement. 0..1.

calmarRatio: number

Calmar Ratio (totalPnl / maxDrawdown). Higher is better.

certaintyRatio: number

Certainty Ratio (avgWin / |avgLoss|). Higher is better.

expectancy: number

Expectancy: (winRate * avgWin) - (lossRate * avgLoss)

expectedYearlyReturns: number

Expected yearly returns (geometric, capped at ±MAX_EXPECTED_YEARLY_RETURNS). Higher is better.

lossCount: number

Number of losing trades

maxDrawdown: number

Maximum drawdown percentage (largest peak-to-trough decline)

maxDrawdownPnl: number

Minimum fall PNL percentage observed across all trades (worst worst-case). Closer to 0 is better.

maxLossStreak: number

Maximum consecutive losing trades

maxWinStreak: number

Maximum consecutive winning trades

medianPnl: number

Median pnlPercentage — robust to outliers; reveals distribution skew when paired with avgPnl.

medianStepSize: number

Median |close[i] - close[i-1]| / close[i-1] across trade closes, in %. Robust to outliers.

peakProfitPnl: number

Maximum peak PNL percentage observed across all trades (best best-case). Higher is better.

pressureImbalance: number

buyerStrength - sellerStrength ∈ [-1, 1]. Positive = bullish bias on magnitude.

profitFactor: number

Profit factor: sum of wins / sum of losses

recoveryFactor: number

Recovery Factor (totalPnl / maxDrawdown). Higher is better.

sellerPressure: number

Fraction of down-moves among decisive moves. 0..1. Equals 1 - buyerPressure.

sellerStrength: number

Share of downward absolute movement in total close-to-close movement. 0..1.

sharpeRatio: number

Risk-adjusted return per trade (Sharpe Ratio = avgPnl / stdDev)

sortinoRatio: number

Sortino Ratio (avgPnl / downside deviation — RMS of losing trades only). Higher is better.

stdDev: number

Standard deviation of PNL

symbol: string

Trading pair symbol (e.g., "BTCUSDT")

totalPnl: number

Total profit/loss percentage across all closed trades

totalTrades: number

Total number of closed trades

tradesPerYear: number

Observed trade frequency extrapolated to one year (signals × 365 / calendarSpanDays).

trend: "bullish" | "bearish" | "sideways" | "neutral"

Bivariate trend classification (slope × R²).

trendConfidence: number

R² of the log-price regression, in [0, 1].

trendStrength: number

Log-price regression slope, in %/day.

winCount: number

Number of winning trades

winRate: number

Win rate percentage