Аудит системы

Что он умеет и как быстро.

Всё на этой странице входит в @tradecanvas/chart 1.30.0. Время кадра измерено в Chrome на ноутбуке со встроенной графикой (Intel UHD); node scripts/bench-render.mjs из репозитория запускает те же сцены на вашем.

Архитектура: Как он остаётся быстрым на обычном ноутбуке. →

В цифрах

18
типов графиков
134
встроенных индикаторов
69
инструментов рисования
30
языков виджета
101
ключей стиля
114
переключателей функций виджета
0
сторонних runtime-зависимостей
3 000+
модульных тестов

Измерьте на своём компьютере

Цифры выше получены на нашем ноутбуке. Эти тесты запускают те же сцены в вашем браузере, с той же библиотекой, которую вы бы выпустили. Ничего не записано заранее.

1 000 000 баров: Canvas 2D, затем WebGL

Миллион минутных свечей с Bollinger Bands, EMA, RSI и MACD, отдалённых до упора и прокручиваемых 150 кадров: сначала через Canvas 2D, затем через WebGL 2.

Живые тики на 100 000 баров

В каждый кадр приходит двадцать тиков на график из 100 000 баров с четырьмя индикаторами. Каждый индикатор обновляется с последнего бара, а не пересчитывает всю серию.

Табло котировок на 1000 символов

bo-grid на 1000 символов, которые обновляются 50 раз в секунду. Каждая изменившаяся ячейка мигает, и перерисовываются только эти ячейки.

WebGL 2, а под ним Canvas 2D

  • renderer: 'webgl' рисует область графика на GPU: свечи, объём, линии и заливки индикаторов, тепловую карту стакана. Текст остаётся на слое Canvas 2D поверх неё. 'auto' выбирает WebGL везде, где доступен WebGL 2.
  • Где WebGL 2 нет или его контекст потерян, тот же график продолжает работать на Canvas 2D. В вашем коде ничего не меняется.
  • Одновременно через WebGL рисуют до 8 графиков на странице (setMaxWebGLCharts); остальные рисуются через Canvas 2D и возвращаются к WebGL, когда освобождается контекст.
  • В обоих рендерерах свечи ложатся на одни и те же физические пиксели, поэтому график выглядит одинаково, какой бы рендерер его ни рисовал.

Время кадра

Время отрисовки одного кадра при прокрутке. 16,7 мс — это 60 кадров в секунду.

ГрафикПлотность пикселейCanvas 2DWebGLCanvas 2D / WebGL
1600×900, 500 свечей + 4 индикатора2×27,4 ms19,6 ms
1600×900, все 200 000 баров на экране + 4 индикатора2×34,5 ms20,2 ms
1600×900, все 1 000 000 баров на экране + 4 индикатора2×34,5 ms16,7 ms
1600×900, тепловая карта стакана, 240 снимков × 80 уровней2×25,5 ms16,8 ms
Шесть графиков, у каждого 500 свечей и 2 индикатора2×23,5 ms17,2 ms
2560×1400, 2000 свечей + 4 индикатора1×41,6 ms17,7 ms
2560×1400, 2000 свечей + 4 индикатора1,5×70,8 ms17,6 ms
2560×1400, 2000 свечей + 4 индикатора2×114,5 ms29,1 ms

По умолчанию используется Canvas 2D. renderer: 'webgl' (или 'auto') рисует область графика через WebGL 2 и переходит на Canvas 2D, если WebGL 2 нет или его контекст потерян.

Путь данных

Живой тик с Bollinger Bands, EMA, RSI и MACD на 100 000 баров
~0,001 ms
Полный пересчёт тех же четырёх индикаторов на 100 000 баров
~27 ms
Линия из 1 000 000 видимых точек, прореженная для одного кадра
~2,6 ms
Перерисовка при наведении (перекрестие, легенда)
~0,2 ms
При смене символа или таймфрейма завеса загрузки появляется только через
200 ms

Размер загрузки

После минификации и gzip, вместе со всем, что импортируется.

Chart, headless API
176 KB
ChartWidget, полный интерфейс
315 KB
Рендерер WebGL, загружается при первом использовании
18 KB

Как это проверяется

  • Более 3000 модульных тестов в семи пакетах запускаются в CI при каждом pull request.
  • Рендерер WebGL рисует свечи на тех же пикселях устройства, что и Canvas 2D; линии и заливки отличаются лишь в нескольких сглаженных пикселях по краям.
  • Рендерер WebGL проверен в Chromium, Firefox и WebKit. Без WebGL 2 или при потере его контекста график продолжает работать на Canvas 2D.
  • Примеры кода в документации и в навыке для агентов проходят проверку типов на настоящем API.
  • Графики доступны программам чтения с экрана и управляются с клавиатуры; на арабском, иврите и персидском виджет идёт справа налево.

Возможности

Фильтруйте по области или ищите по названию или API.

ВозможностьОбластьПодробности и API
Свечи, бары OHLC, линия, область, базовая линия, Хейкин-Аши, полые свечиТипы графиковcandlestick, bar, line, area, baseline, heikinAshi, hollowCandle
Ренко, линейный прорыв, Каги, крестики-нолики, бары диапазонаТипы графиковРазмер блока или ATR, число линий для прорыва, разворот в процентах или в цене, диапазон на бар
Объёмные свечи, Equivolume, область HLC, ступенчатая линия, линия с маркерами, максимум-минимумТипы графиковВсего 18 типов графиков
Основная серия скрытаТипы графиковОстаются только индикаторы и рисунки
Графики для дашбордовТипы графиковСтолбцы (группами, стопкой, горизонтальные), кольцевые и круговые диаграммы, диаграммы рассеяния и пузырьковые, гистограммы, календари, корреляционные матрицы, карты по секторам, кривые против часовой стрелки, спарклайны, круговые шкалы, тепловые карты и treemap, каскадные диаграммы, глубина стакана, кривые капитала
Canvas 2D или WebGL 2Отрисовкаrenderer: 'canvas' | 'webgl' | 'auto', setRenderer, событие rendererChange
Один отрезок на столбец пикселей при отдаленииОтрисовкаЛинии, полосы и гистограммы индикаторов, когда на бар приходится меньше пикселя
Миллион баров плавно прокручиваетсяОтрисовкаС четырьмя индикаторами, при плотности пикселей 2
Тепловая карта стакана, профиль объёма и рыночный профиль на GPUОтрисовкаpushDepthSnapshot(book, time)
Несколько графиков WebGL на страницеОтрисовкаДо 8 (setMaxWebGLCharts); остальные рисуются через Canvas 2D; возврат к WebGL, когда контекст восстанавливается
Чёткость при любом масштабе экранаОтрисовкаСвечи, объём и рисунки ложатся на физические пиксели при 100 %, 125 % и 200 %
Нет сторонних runtime-зависимостейОтрисовкаБольше нечего устанавливать и проверять
134 встроенных индикаторовИндикаторыТочки разворота шести видов, MA Cross, корреляция с другим символом
Источник ценыИндикаторыopen, high, low, hl2, hlc3, ohlc4, hlcc4
Индикатор поверх индикатораИндикаторыНапример, средняя от RSI, обновляемая на каждом тике
Несколько индикаторов в одной панели, перенос между панелямиИндикаторыmoveIndicatorToPane
Несколько экземпляров одного индикатораИндикаторыEMA 20 и EMA 50 рядом
Уровни и порогиИндикаторыRSI 30/70, CCI ±100, сохраняются вместе с макетом
Последнее значение на осиИндикаторыНа ценовой оси и на оси каждой панели, цветом линии
Панели сворачиваются, разворачиваются и меняются местамиИндикаторыСохраняется вместе с макетом
Шаблоны индикаторовИндикаторыПараметры, стиль, уровни и панель сохраняются и применяются вместе
Стиль и видимость каждой линииИндикаторыСкрытая линия не растягивает шкалу; setIndicatorDefaults
Дельта объёма и CVDИндикаторыОцениваются по барам
Экспорт значений индикаторовИндикаторыCSV или JSON, по столбцу на линию
Инкрементальные обновления на живых тикахИндикаторыupdate() пересчитывает только формирующийся бар
69 инструментов рисованияИнструменты рисованияЛинии, каналы, Фибоначчи, Ганн, вилы, волны Эллиотта, паттерны, циклы, проекции
Собственные настройки каждого инструментаИнструменты рисованияСтиль, свойства и координаты по ценовой сетке рынка
Длинные и короткие позицииИнструменты рисованияРиск:прибыль, объём по риску в процентах или в деньгах
Оповещения на рисункеИнструменты рисованияКогда цена пересекает линию тренда или канал так, как они нарисованы, в том числе на логарифмической шкале
Порядок, группы и шаблоныИнструменты рисованияНа передний план, на задний план, группировка, блокировка, скрытие
Заметки, выноски, стрелки, флажки, кисть, путь, криваяИнструменты рисованияРисование от руки и по нескольким точкам
Anchored VWAP и профиль объёма фиксированного диапазонаИнструменты рисованияСтроятся по барам графика
Ластик, зум рамкой, сильный магнит, горячие клавишиИнструменты рисованияAlt+T, Alt+H, Alt+J, Alt+V, Alt+C, Alt+F
Переход к дате; диапазоны от 1D до AllШкалы и времяБез ограничения на отдаление
Часовые пояса IANA с переходом на летнее времяШкалы и времяИли собственный пояс биржи
Любой таймфрейм и тиковые барыШкалы и время7m, 90m, 2d строятся из того, что отдаёт поток; 100T — из его сделок
Левая и правая шкалы; логарифмическая, перевёрнутая и процентная для каждой панелиШкалы и времяЛевая шкала для оверлея или копии ценовой шкалы
Сравнение символов, спред и отношениеШкалы и времяНа своей шкале или панели, с выравниванием по времени
Расширенные часы торговШкалы и времяПо торговым сессиям символа
Форматы цены и времениШкалы и времяpriceFormat как функция или дроби вроде 1/32; timeFormatter
Шкала в знаках после запятой и шаге цены символаШкалы и времяpricePrecision, minTick: акция с шагом 10 никогда не покажет 21 705
Линии максимума и минимума, bid и askШкалы и времяBid и ask из тиков потока
Метки событий на графикеШкалы и времяsignalMarkerHover, signalMarkerClick
Готовые потоки и ваши собственныеДанные и реальное времяBinance, Bybit, Coinbase, Kraken, mock; WebSocketAdapter, PollingAdapter
Старая история подгружается при прокрутке влевоДанные и реальное времяfetchHistoryBefore
Поиск символов с подробностямиДанные и реальное времяsearchSymbols, resolveSymbol: знаки после запятой, шаг цены, сессии, часовой пояс
Данные символа, полученные после подключенияДанные и реальное времяСобытие адаптера symbolInfo
Стакан заявокДанные и реальное времяОбъём bid и ask по ценам; щелчок для торговли
Живые котировки для списков наблюденияДанные и реальное времяsubscribeQuotes, setQuotes, getQuote
Новости и статус рынкаДанные и реальное времяfetchNews; обратный отсчёт до открытия или закрытия
Правила биржиДанные и реальное времяsetMarket: шаг цены по ценовым диапазонам, дневные верхний и нижний пределы, лоты, сессии; HOSE, HNX, UPCoM и фьючерсы на VN30
Ордера и позиции на графикеТорговляПеретаскивание для изменения; отмена, закрытие и разворот прямо с линии
Отметки исполненияТорговляПричина и прибыль или убыток в executionFill
Тикет ордераТорговляОбъём, тип, стоп-лосс и тейк-профит, срок действия, проверка по ходу ввода; шаг цены, верхний и нижний пределы и лоты биржи
Панель счётаТорговляПозиции с текущей прибылью и убытком, активные ордера, исполнения
Сигналы и торговые зоныТорговляКлючи стиля markers.*, tradeZones.*
Бэктестинг и метрики рискаТорговля@tradecanvas/analytics: комиссия, проскальзывание, Sharpe, Sortino, Calmar, просадка
Оповещения не только по уровню ценыОповещения и реплейПересечение линии линией, движение на N% за N баров, по закрытию бара, со сроком действия
Реплей баров более мелкими шагамиОповещения и реплейСтарший таймфрейм проигрывается из младших баров
Бумажная торговля в реплееОповещения и реплейОрдера исполняются по проигрываемым ценам
Реплей по сетке графиковОповещения и реплейВсе графики идут синхронно
Реплей для приложенийОповещения и реплейstartTime, hideHistory, duration, метки появляются по ходу проигрывания, replayComplete
Сетка синхронизированных виджетовРабочая областьДо 6, с общими символом, таймфреймом, перекрестием, временем и рисунками
Именованные макеты в вашем хранилищеРабочая областьСохранение, открытие, переименование, автосохранение; LayoutStorage для сервера
Отмена и повтор для всегоРабочая областьРисунки, индикаторы, настройки и тип графика; recordUndo
Контекстные меню по областямРабочая областьРисунки, область графика, панели, ценовая ось, ось времени
Списки наблюденияРабочая областьНесколько списков, порядок меняется перетаскиванием
События для хост-приложенияРабочая областьsymbolChange, timeframeChange, ordersChange, executionFill, styleChange и другие
Три оформления виджетаНастройкаStudio, Terminal, Capsule; ui и setUI; CSS-переменные --tcw-*
Вид графика по ключамНастройкаapplyOverrides по 101 типизированному ключу, на слое хоста и слое пользователя
Настройки, доступные для каждого ключаНастройкаВкладка стиля для текущего типа графика, вкладка торговли
112 переключателей функцийНастройкаfeatures, setFeatures, isFeatureOn; меняются на лету
Свои элементы в виджетеНастройкаКнопки и выпадающие списки панели инструментов, кнопки боковой панели, элементы строки состояния, слоты, пункты меню
Свои горячие клавишиНастройкаaddHotkey с учётом раскладки клавиатуры
Виджет на 30 языкахЯзыки и доступностьАрабский, иврит и персидский справа налево
Программы чтения с экрана и клавиатураЯзыки и доступностьСводка графика, бары по одному, диалоги с клавиатуры
Сайт на 14 языках, документация на шестиЯзыки и доступностьEnglish, Tiếng Việt, 简体中文, 繁體中文, 日本語, 한국어, Español, Português, Français, Deutsch, Русский, Türkçe, Bahasa Indonesia, ไทย
Компоненты React, Vue и SvelteРазработчикамРеактивные props: overrides, indicators, features
ПлагиныРазработчикамИндикаторы, инструменты рисования, типы графиков и оверлеи; overlayScale и getPriceStep для рисования по ценовой сетке
Документация для агентов-программистовРазработчикамllms.txt, llms-full.txt и навык для агентов

Известные ограничения

  • Canvas 2D остаётся рендерером по умолчанию, пока WebGL не опробован на большем числе устройств; частота кадров WebGL в Safari и на экранах 5K ещё не измерялась.
  • При плотности пикселей 2 на графике 2560×1400 одна только композиция в браузере занимает около 23 мс на встроенной графике, поэтому кадры WebGL там в среднем длятся 29 мс.
  • Тиковые таймфреймы строятся из последних сделок, которые возвращает поток; более старую тиковую историю загрузить нельзя.
  • Дельта объёма и CVD оцениваются по барам, а не по стороне каждой сделки.
  • Одновременно через WebGL рисуют не более 8 графиков на странице; остальные рисуются через Canvas 2D.

Делаете торговый экран на TradeCanvas?

Мы будем рады узнать об этом.