Статистика

StatisticsWidget — таблица параметров статистики стратегии: прибыль, просадка, число сделок, задержки. Панель предназначена только для чтения: одна строка на параметр, строки сгруппированы по области, к которой параметр относится.

Панель статистики прогона со сгруппированными показателями

Создание и обновление

import {
  StatisticsWidget,
  type TradingHost,
} from '@stocksharp/trading-controls';

declare const host: TradingHost;

const statistics = StatisticsWidget.create(
  document.querySelector<HTMLElement>('#statistics')!,
  {},
  { host },
);

statistics.update([
  {
    key: 'NetProfit',
    category: 'pnl',
    categoryText: 'Прибыль',
    order: 1,
    name: 'Чистая прибыль',
    description: 'Результат прогона',
    value: 11_055.75,
  },
  {
    key: 'MaxProfitDate',
    category: 'pnl',
    categoryText: 'Прибыль',
    order: 2,
    name: 'Дата максимума',
    value: '2024-03-26T07:30:00Z',
  },
  {
    key: 'NetProfit',
    category: 'pnl',
    categoryText: 'Сделки',
    order: 100,
    name: 'Число сделок',
    value: 1_340,
  },
]);

Набор зависимостей StatisticsDeps состоит из единственного обязательного поля host. Обработчиков действий у контрола нет: статистику формирует стратегия, отменять, перезагружать или редактировать в панели нечего. Второй аргумент create — сохранённое состояние панели; контрол его не использует.

update заменяет весь набор строк целиком. Стратегия публикует свои параметры как одну таблицу, поэтому исчезнувшая из набора строка считается прекратившей существовать, а не переставшей меняться. Идентичность строки определяется полем key.

Строки и порядок

Строка описывается типом StatisticRow:

Поле Назначение
key Устойчивый идентификатор параметра.
category Ключ группы, не зависящий от языка.
categoryText Заголовок группы для показа. При отсутствии используется category.
order Место параметра в реестре.
name Локализованное название параметра.
description Локализованное пояснение, показывается всплывающей подсказкой на ячейке названия.
value Число, дата или строка. null — параметр ещё не измерен.

Настольный вариант таблицы получает строки отражением по параметрам стратегии; в браузере такого механизма нет, поэтому строки приходят от хоста уже готовыми — с переведёнными названием и описанием.

Группировка ведётся по category, а не по categoryText: группировка по переведённому заголовку перестраивала бы таблицу при смене языка. Порядок групп задаёт наименьший order среди их параметров, поэтому прибыль идёт выше просадки, а та — выше счётчиков сделок. Сортировка по названию или по значению разнесла бы параметры, которые читаются вместе.

Видимых столбцов два: Name и Value. Столбцы category и order объявлены, но скрыты — они нужны для группировки и сортировки, а читателю ничего не сообщают. В экспорт попадают только два видимых столбца.

Форматирование значений

Текст ячейки значения формирует экспортируемая функция formatStatistic(value):

import { formatStatistic } from '@stocksharp/trading-controls';

formatStatistic(11_055.756); // '11055.76'
formatStatistic(1_340);      // '1340'
formatStatistic('2024-03-26T07:30:00Z'); // '2024-03-26'
formatStatistic(null);       // ''

Число округляется до двух знаков и показывается без хвостовых нулей. Дата — только день: параметры такого рода описывают прогон целиком, и время в них было бы шумом. Строка распознаётся как дата, лишь когда начинается с ГГГГ-ММ-ДД; иначе она остаётся текстом. Отсутствующее значение даёт пустую ячейку, а не ноль, который читался бы как измеренный результат.

Сортировка выполняется по исходному значению, поэтому число сортируется числом, а не строкой.

Что делает контрол, а что хост

Контрол берёт от хоста весь видимый текст через host.t, включая подписи столбцов, заголовок панели, надпись для пустой таблицы и пункты контекстного меню таблицы. Кнопка закрытия вызывает host.close, экспорт выгружает таблицу в XLSX. При создании экземпляр регистрируется через host.register, при dispose — снимается через host.unregister.

Собственных настроек в host.preferences контрол не хранит. Данные он не запрашивает: строки поставляет хост вызовом update.

Идентификатор типа панели доступен как StatisticsWidget.TYPE и равен ControlTypes.Statistics.

Публичные методы

  • StatisticsWidget.create(hostEl, state, deps) — создать панель в указанном контейнере.
  • update(rows) — заменить весь набор строк статистики.
  • dispose() — освободить ресурсы.

Панель также поддерживает сортировку, выделение нескольких строк, контекстное меню и экспорт в XLSX.

Смотрите также