Загрузка данных


# Виджет "График"

## Назначение

Виджет предназначен для отображения ценовых графиков финансовых инструментов с использованием библиотеки 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 в коде)