Другое

Лучшие библиотеки для OHLC свечей в C++

Сравнение лучших библиотек для отображения OHLC свечей в C++ приложениях. Qt Charts, ChartDirector, QCustomPlot и другие решения с примерами кода.

Какую библиотеку лучше использовать для отображения OHLC свечей в приложении на C++?

Для отображения OHLC свечей в приложении на C++ лучшими выборами являются Qt Charts и ChartDirector for C++. Qt Charts является бесплатным и нативным решением для Qt-приложений, в то время как ChartDirector предлагает более профессиональные функции для финансовых графиков, но является коммерческим продуктом.


Содержание


Основные библиотеки для OHLC графиков

На основе исследования можно выделить несколько основных библиотек для визуализации OHLC свечей в C++:

  1. Qt Charts - встроенная библиотека для Qt-приложений
  2. ChartDirector for C++ - коммерческая библиотека с расширенными возможностями
  3. QCustomPlot - Qt-виджет для построения графиков
  4. Qwt - библиотека для научных и финансовых графиков
  5. StockChartX - специализированная библиотека для финансовых графиков

Сравнение библиотек

Библиотека Тип Стоимость Особенности Поддержка Qt
Qt Charts Открытая Бесплатная Встроенная поддержка свечей Нативная
ChartDirector Коммерческая Платная Расширенные финансовые инструменты Да
QCustomPlot Открытая Бесплатная Гибкая настройка Только Qt
Qwt Открытая Бесплатная Научные и финансовые графики Только Qt
StockChartX Коммерческая Платная Специализированные финансовые инструменты Нет

Qt Charts: Детальное руководство

Qt Charts является наиболее предпочтительным выбором для большинства разработчиков благодаря своей бесплатной лицензии и встроенной поддержке в Qt-фреймворке.

Ключевые особенности:

  • Нативная интеграция с Qt
  • Поддержка QCandlestickSeries для отображения свечей
  • Возможность создания интерактивных графиков
  • Поддержка различных типов финансовых графиков
  • Документация на русском языке

Пример создания свечного графика:

cpp
#include <QtCharts>
using namespace QtCharts;

// Создание серии свечей
QCandlestickSeries *series = new QCandlestickSeries();
series->setName("Акции");

// Добавление данных свечей
QCandlestickSet *set = new QCandlestickSet(timestamp);
set->setOpen(openPrice);
set->setHigh(highPrice);
set->setLow(lowPrice);
set->setClose(closePrice);
series->append(set);

// Создание графика
QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Свечной график");

Преимущества Qt Charts включают простоту использования и отличную интеграцию с экосистемой Qt. Недостатком может быть ограниченная функциональность по сравнению с коммерческими аналогами.


ChartDirector for C++

ChartDirector for C++ предлагает профессиональные инструменты для создания финансовых графиков.

Основные возможности:

  • Поддержка различных типов свечных графиков
  • Интеграция с Qt, MFC и другими фреймворками
  • Расширенные финансовые индикаторы
  • Интерактивные функции
  • Высокая производительность

Особенности для финансовых графиков:

cpp
// Добавление свечного слоя
if (selectedType == "CandleStick") {
    m->addCandleStick(0x33ff33, 0xff3333);
} else if (selectedType == "OHLC") {
    m->addHLOC(0x8000, 0x800000);
}

// Добавление технических индикаторов
m->addParabolicSAR(0.02, 0.02, 0.2, Chart::DiamondShape, 5, 0x008800, 0x000000);
m->addBollingerBand(20, 2, 0x006060, 0x009999);

Преимущества ChartDirector включают расширенные финансовые инструменты и профессиональное качество rendering. Недостатком является коммерческая лицензия.


Альтернативные решения

QCustomPlot

QCustomPlot предлагает гибкие возможности для построения финансовых графиков:

cpp
// Создание свечного графика
QCPFinancial *financial = new QCPFinancial(customPlot->xAxis, customPlot->yAxis);
financial->setName("Свечи");
financial->setChartStyle(QCPFinancial::csCandlestick);
financial->setData(time, open, high, low, close);

Qwt

Qwt предоставляет QwtPlotTradingCurve для торговых графиков:

cpp
QwtPlotTradingCurve *curve = new QwtPlotTradingCurve();
curve->setSamples(open, high, low, close);
curve->setSymbolBrush(Qt::red, Qt::green); // Красный для падения, зеленый для роста

Другие решения

  • StockChartX - специализированная библиотека для финансовых графиков
  • SFML-based решения - мультимедийная библиотека с возможностью отрисовки свечей
  • Open-source проекты на GitHub с примерами реализации

Рекомендации по выбору

Для Qt-приложений:

  1. Выбирайте Qt Charts, если:

    • Бюджет ограничен (бесплатная лицензия)
    • Требуется нативная интеграция с Qt
    • Достаточно базовых функций для свечных графиков
  2. Выбирайте ChartDirector, если:

    • Требуются профессиональные финансовые инструменты
    • Нужна высокая производительность
    • Бюджет позволяет коммерческую лицензию
  3. Выбирайте QCustomPlot, если:

    • Требуется максимальная гибкость настройки
    • Нужны дополнительные научные функции
    • Работаете только в Qt-окружении

Для не-Qt приложений:

  • ChartDirector - лучшее коммерческое решение
  • StockChartX - специализированная библиотека для финансовых данных
  • Ручная реализация на SFML или OpenGL при полном контроле

Примеры кода

Полный пример с Qt Charts:

cpp
#include <QApplication>
#include <QtCharts>
#include <QChartView>
#include <QCandlestickSeries>
#include <QCandlestickSet>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    // Создание серии свечей
    QtCharts::QCandlestickSeries *series = new QtCharts::QCandlestickSeries();
    series->setName("Акции ABC");
    
    // Генерация тестовых данных
    for (int i = 0; i < 30; ++i) {
        double timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch() + i * 86400000;
        double open = 100 + i * 0.5;
        double high = open + 2 + (rand() % 10);
        double low = open - 2 - (rand() % 10);
        double close = open + (rand() % 5 - 2);
        
        QtCharts::QCandlestickSet *set = new QtCharts::QCandlestickSet(timestamp);
        set->setOpen(open);
        set->setHigh(high);
        set->setLow(low);
        set->setClose(close);
        series->append(set);
    }
    
    // Создание графика
    QtCharts::QChart *chart = new QtCharts::QChart();
    chart->addSeries(series);
    chart->setTitle("Свечной график акций ABC");
    chart->legend()->hide();
    
    // Создание представления
    QtCharts::QChartView *chartView = new QtCharts::QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    
    chartView->resize(800, 600);
    chartView->show();
    
    return a.exec();
}

Пример с ChartDirector для Qt:

cpp
#include <QtWidgets>
#include <ChartDirector.h>

class FinanceChart : public QWidget {
public:
    FinanceChart(QWidget *parent = nullptr) : QWidget(parent) {
        // Создание графика
        QChart *chart = new QChart();
        
        // Добавление данных
        double timeStamps[] = {1633027200, 1633113600, 1633200000, 1633286400};
        double opens[] = {100, 102, 101, 103};
        double highs[] = {105, 104, 106, 107};
        double lows[] = {98, 99, 97, 100};
        double closes[] = {103, 101, 104, 106};
        
        // Добавление свечного слоя
        Layer *layer = chart->addLayer();
        ChartDirector::FinanceChart *financeChart = new ChartDirector::FinanceChart(layer);
        financeChart->addCandleStick(timeStamps, opens, highs, lows, closes, 0x33ff33, 0xff3333);
        
        // Настройка отображения
        financeChart->setXAxisTimeScale(timeStamps, sizeof(timeStamps) / sizeof(double));
        financeChart->addLegend(ChartDirector::TopLeft);
        
        chart->setTitle("Финансовый график");
    }
};

Источники

  1. Qt Charts Documentation - Candlestick Chart Example
  2. ChartDirector for C++ - Financial Chart Demo
  3. Qt Charts 6 - Creating Candlestick Charts
  4. QCustomPlot - Financial Charts Demo
  5. Stack Overflow - Market price charts in Qt
  6. GitHub - Candlestick visualization with SFML
  7. Qwt - QwtPlotTradingCurve Reference
  8. StockChartX - C++ Financial Chart Library

Заключение

При выборе библиотеки для отображения OHLC свечей в C++ приложении следует учитывать:

  1. Для большинства Qt-приложений лучше всего подходит Qt Charts - бесплатное, хорошо документированное решение с нативной интеграцией
  2. Для профессиональных финансовых приложений с расширенными функциями стоит рассмотреть ChartDirector for C++
  3. Для максимальной гибкости можно использовать QCustomPlot или Qwt
  4. Для не-Qt приложений лучшим выбором будет ChartDirector или специализированные библиотеки

Qt Charts является оптимальным выбором для большинства разработчиков благодаря своей бесплатной лицензии, хорошей документации и встроенной поддержке в популярном Qt-фреймворке. Для более сложных финансовых приложений с профессиональными требованиями к качеству rendering и функциональности стоит рассмотреть коммерческие решения.

Авторы
Проверено модерацией
Модерация