Загрузка данных
# Виджет "График"
## Назначение
Виджет предназначен для отображения ценовых графиков финансовых инструментов с использованием библиотеки MoexChart. Позволяет анализировать динамику цен различных инструментов (акции, фьючерсы, валюта, индикативные котировки) с различными таймфреймами и типами отображения (свечи, линии, бары).
## UI
Интерфейс состоит из:
- шапки виджета с названием инструмента и кнопками управления
- области графика MoexChart
### Шапка виджета
Состоит из:
- названия инструмента (для индикативных котировок включает имя инструмента, дату расчета и фирму)
- иконки поиска инструментов
- кнопки сохранения в Excel (отключена для индикативных котировок)
- контекстного меню виджета
### График
Используется:
- библиотека TradingView Charting Library
- кастомный datafeed для загрузки исторических и реалтайм данных
- поддержка различных типов отображения: свечи (Candles), линии (Line)
- поддержка сравнения инструментов (Overlay)
- поддержка индикаторов и рисования
## Функции и возможности
- отображение ценовых графиков для различных типов инструментов
- поддержка множества таймфреймов: 1, 5, 10, 15, 30, 45, 60, 240 минут, 1D, 7D, 1M, 3M
- автоматическое переключение типа графика и таймфрейма в зависимости от типа инструмента
- поддержка индикативных котировок (отображаются линиями с таймфреймом 60 минут)
- поддержка сравнения нескольких инструментов на одном графике
- экспорт данных графика в Excel
- сохранение состояния графика (инструмент, таймфрейм, настройки)
- поддержка Drag & Drop для добавления инструментов
- интеграция с другими виджетами через механизм привязок
## Интеграции
- Используется в связках с виджетом "Индикативные котировки" для отображения индикативных данных
- Поддерживает привязку к другим виджетам через механизм publicContext
- Может быть связан с виджетами, которые используют инструмент в качестве мастера
## Бизнес требования
- Для инструментов с board prime_on, prime_cfd, prime_cb, prime_metals, fixi отображается дневная линия (Line, 1D)
- Для инструментов с board prime_fx, prime_irs, prime_ois, prime_depo отображаются минутные свечи (Candles, 1)
- Для индикативных котировок всегда отображается линия с таймфреймом 60 минут
- Экспорт в Excel недоступен для индикативных котировок
- При смене инструмента через привязку сохраняется связь с мастером
- При смене инструмента вручную привязка разрывается
## Особенности кода
- Используется кастомный хук useChartComponentFacade для управления состоянием виджета
- Используется кастомный хук useDatafeed для реализации datafeed API TradingView
- Используется хук useChartPublicContext для интеграции с механизмом привязок
- Данные загружаются через функции requestBars (исторические данные) и requestRealtimeBars (реалтайм данные)
- Для индикативных котировок используется отдельный API (indicativeQuotesController)
- Реализован механизм управления интервалами обновления для каждого инструмента на графике
- Используется кастомный адаптер save_load_adapter для сохранения состояния графика
- Имеется устаревший TODO: отрефакторить isIndicativeTicker
- Используются утилиты из виджета Quotes (INDICATIVE_BOARDS)
## Проблемы
- Необходимо отрефакторить функцию isIndicativeTicker (есть TODO в файле)
- Используется временный useRef для currentInstrument вместо useState (есть TODO в коде)
- Имеются TODO по разбору зависимостей в useEffect
## Примечания
- Виджет использует библиотеку TradingView Charting Library (charting_library)
- Поддерживает отображение до нескольких инструментов одновременно через механизм сравнения (Overlay)
- Для каждого инструмента на графике создается отдельный интервал обновления данных
- При быстром переключении таймфреймов (менее 15 секунд) происходит сброс кэша
- Часовой пояс по умолчанию: Europe/Moscow
- Тема по умолчанию: Dark
- Поддерживается локализация интерфейса
## TODO
- Отрефакторить функцию isIndicativeTicker в src/widgets/Chart/utils/isIndicativeTicker.ts
- Заменить useRef на useState для currentInstrument в useChartComponentFacade
- Разобраться с зависимостями в useEffect (несколько TODO в коде)