Добавить Sharpe, Sortino и дополнительные метрики в SessionReport #5

Open
opened 2026-04-29 17:32:49 +00:00 by derfenix · 0 comments
Owner

Описание

Сейчас domain.SessionReport содержит минимальный набор метрик: EquityMTM, RealizedPnL, MaxDrawdownPct, WinRate, ProfitFactor, ClosedRounds. Для оптимизатора и анализа стратегий не хватает:

  • Sharpe Ratio — отношение доходности к волатильности
  • Sortino Ratio — то же, но учитывает только отрицательную волатильность
  • Max consecutive losses — максимальная серия убыточных сделок подряд
  • Recovery factor — абсолютная доходность / максимальная просадка

Предлагаемое решение

Добавить поля в core/domain/session_report.go (или аналогичный файл с SessionReport):

type SessionReport struct {
    // существующие поля...

    // Новые:
    SharpeRatio         float64  // годовой / за период
    SortinoRatio        float64
    MaxConsecutiveLosses int
    RecoveryFactor      float64  // abs(TotalPnL) / max(abs(MaxDrawdown))
}

Расчёт — при финализации отчёта в core/domain/account.go: BuildSessionReport или PortfolioAtMark.

Затрагиваемые файлы

  • core/domain/session_report.go — новые поля
  • core/domain/account.go — расчёт новых метрик
  • pkg/backtest/config.go — не меняется (типы SessionReport в domain)

Обоснование

Оптимизатор сейчас считает PenalizedReturnScore как -ret + ddWeight*dd. Sharpe/Sortino дадут более адекватную risk-adjusted оценку. Считать их в оптимизаторе (поверх SessionReport) — дублирование логики.

## Описание Сейчас `domain.SessionReport` содержит минимальный набор метрик: EquityMTM, RealizedPnL, MaxDrawdownPct, WinRate, ProfitFactor, ClosedRounds. Для оптимизатора и анализа стратегий не хватает: - **Sharpe Ratio** — отношение доходности к волатильности - **Sortino Ratio** — то же, но учитывает только отрицательную волатильность - **Max consecutive losses** — максимальная серия убыточных сделок подряд - **Recovery factor** — абсолютная доходность / максимальная просадка ## Предлагаемое решение Добавить поля в `core/domain/session_report.go` (или аналогичный файл с `SessionReport`): ```go type SessionReport struct { // существующие поля... // Новые: SharpeRatio float64 // годовой / за период SortinoRatio float64 MaxConsecutiveLosses int RecoveryFactor float64 // abs(TotalPnL) / max(abs(MaxDrawdown)) } ``` Расчёт — при финализации отчёта в `core/domain/account.go`: `BuildSessionReport` или `PortfolioAtMark`. ## Затрагиваемые файлы - `core/domain/session_report.go` — новые поля - `core/domain/account.go` — расчёт новых метрик - `pkg/backtest/config.go` — не меняется (типы SessionReport в domain) ## Обоснование Оптимизатор сейчас считает `PenalizedReturnScore` как `-ret + ddWeight*dd`. Sharpe/Sortino дадут более адекватную risk-adjusted оценку. Считать их в оптимизаторе (поверх SessionReport) — дублирование логики.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Blocks
You do not have permission to read 1 dependency
Reference
trading/tradebot-ng#5
No description provided.