Как построить график цен акций на Delphi?

Мои работы5 минут на чтение

График акций — это визуальное представление изменения цены акций компании на фондовом рынке за определённый период времени. Обычно он строится в виде линейного или свечного графика, где по оси абсцисс откладывается время, а по оси ординат — стоимость. Разберём, как построить такой график в Delphi.

Компонент TChart

Для построения графиков в Delphi исторически используется компонент TChart из пакета TeeChart, который входит в поставку среды. Он поддерживает множество типов серий данных — линии, свечи (Candlestick), бары (Bar), точки — и хорошо подходит именно для финансовых графиков, где свечной тип отображения уже встроен «из коробки».

Подготовка данных

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

type
  TPriceBar = record
    Date: TDateTime;
    OpenPrice, HighPrice, LowPrice, ClosePrice: Double;
  end;

Добавление серии на график

На форму добавляется компонент TChart, в него — серия типа TCandleSeries (для свечного графика) или TLineSeries (для простого линейного). Далее данные добавляются в серию методом AddCandle или Add:

ChartSeries1.AddCandle(Bar.Date, Bar.HighPrice, Bar.LowPrice,
  Bar.OpenPrice, Bar.ClosePrice);

Настройка отображения

TChart позволяет гибко настраивать внешний вид: цвета растущих и падающих свечей, масштаб осей, легенду, всплывающие подсказки при наведении на отдельную свечу. Для финансовых графиков часто добавляют дополнительные серии поверх основной — например, скользящие средние — что в TeeChart делается добавлением ещё одной серии типа TLineSeries, рассчитанной на основе тех же данных.

Если нужны данные в реальном времени

Для графика, обновляющегося «вживую», данные можно получать периодически (например, по таймеру TTimer) из внешнего источника и добавлять новые точки в существующую серию, не пересоздавая график целиком — это заметно экономит ресурсы при частом обновлении.