金融图表

Financial Chart 金融图表

金融图表用于证券、期货、交易监控和行情分析场景。当前公开控件类为 UIGQFinancialChart,支持 K 线、分时走势和成交量三种显示模式。

类继承关系

QWidget
  └─ QOpenGLWidget
      └─ UIGQChartBase
          └─ UIGQFinancialChart + IUIGQWidgetBase

UIGQFinancialChart 继承 ChartKit 的主题、动画、图例、tooltip 和 hover 能力,并通过 IUIGQWidgetBase 接入 Qt-UI 控件体系。

图表类型

类型 枚举 说明
K 线图 kFinancialCandlestick 展示开盘、收盘、最高、最低价格。
分时图 kFinancialTimeSharing 展示盘中价格走势和均价参考线。
成交量图 kFinancialVolume 展示成交量柱图,并使用涨跌方向色。

数据结构

struct UIGQFinancialKLineData
{
    QString time;
    double open;
    double close;
    double high;
    double low;
    double volume;
};

struct UIGQFinancialMinuteData
{
    QString time;
    double price;
    double averagePrice;
    double volume;
};

常用接口

方法 说明 参数 返回值
setChartType(UIGQFinancialChartType type) 设置金融图表显示类型。 type:K 线、分时或成交量枚举。 void
getChartType() 读取当前金融图表类型。 无。 UIGQFinancialChartType
setKLineData(const QVector<UIGQFinancialKLineData>& data) 设置 K 线和成交量数据。 data:OHLCV 数据数组。 void
getKLineData() 读取当前 K 线数据。 无。 QVector<UIGQFinancialKLineData>
setMinuteData(const QVector<UIGQFinancialMinuteData>& data) 设置分时走势数据。 data:分时价格和成交量数据。 void
getMinuteData() 读取当前分时数据。 无。 QVector<UIGQFinancialMinuteData>
setMovingAverageVisible(bool visible) 控制均线显示。 visible:是否显示。 void
setMovingAveragePeriods(const QVector<int>& periods) 设置均线周期。 periods:如 {5, 10, 20} void
setRangeSliderVisible(bool visible) 控制底部范围选择器显示。 visible:是否显示。 void
setVisibleRange(double startRatio, double endRatio) 设置可见数据范围。 startRatio/endRatio:0 到 1 的比例。 void

K 线图示例

using namespace UIGQtLib;

auto* chart = new UIGQFinancialChart(parent);
chart->setTitle("SSE 50 K Line");
chart->setChartType(kFinancialCandlestick);

QVector<UIGQFinancialKLineData> data;
data << UIGQFinancialKLineData{ "06-20", 2890.0, 2912.0, 2920.0, 2886.0, 235000 };
data << UIGQFinancialKLineData{ "06-21", 2912.0, 2905.0, 2928.0, 2898.0, 198000 };

chart->setKLineData(data);
chart->setMovingAverageVisible(true);
chart->setMovingAveragePeriods({5, 10, 20});
chart->setTooltipMode(kChartTooltipItem);
chart->setRangeSliderVisible(true);
chart->setThemePreset(kChartThemeDark);

分时图示例

auto* chart = new UIGQFinancialChart(parent);
chart->setTitle("Intraday Price");
chart->setChartType(kFinancialTimeSharing);

QVector<UIGQFinancialMinuteData> minuteData;
minuteData << UIGQFinancialMinuteData{ "09:30", 2910.2, 2910.2, 120000 };
minuteData << UIGQFinancialMinuteData{ "09:35", 2914.8, 2912.5, 180000 };

chart->setMinuteData(minuteData);
chart->setTooltipVisible(true);
chart->setHoverEnabled(true);

使用建议

  • K 线图和成交量图使用 setKLineData(...)
  • 分时图使用 setMinuteData(...)
  • 实时行情刷新时重新设置数据后调用 restartAnimation()
  • 数据量较大时建议开启范围选择器,只显示当前分析窗口。