#ifndef QORDERLISTMANAGER_H #define QORDERLISTMANAGER_H #include #include #include #include #include struct OrderBookItem { double price = 0.0; double volume = 0.0; int orderCount = 0; QString orderId; bool isValid() const { return price > 0 && volume > 0 && !orderId.isEmpty(); } bool operator==(const OrderBookItem& other) const { return orderId == other.orderId; } }; class QOrderListManager : public QObject { Q_OBJECT public: enum OrderType { BidOrder, // 买单 AskOrder // 卖单 }; Q_ENUM(OrderType) static QOrderListManager* instance(); static void destroy(); // 订单簿操作 bool addOrder(OrderType type, const OrderBookItem& order); bool updateOrder(OrderType type, const QString& orderId, const OrderBookItem& newData); bool removeOrder(OrderType type, const QString& orderId); QSharedPointer getOrder(OrderType type, const QString& orderId) const; // 获取订单簿数据 QMap>> getBidOrders() const; QMap>> getAskOrders() const; // 聚合数据 QMap getBidPriceLevels() const; // 价格 -> 总量 QMap getAskPriceLevels() const; // 统计信息 double getTotalBidVolume() const; double getTotalAskVolume() const; double getBestBidPrice() const; double getBestAskPrice() const; signals: void orderAdded(OrderType type, const OrderBookItem& order); void orderUpdated(OrderType type, const QString& orderId); void orderRemoved(OrderType type, const QString& orderId); void orderBookChanged(); private: explicit QOrderListManager(QObject* parent = nullptr); ~QOrderListManager(); void sortOrders(OrderType type); void calculatePriceLevels(); static QBasicAtomicPointer s_instance; static QMutex s_mutex; // 买单和卖单分别存储,按价格排序 QMap>> m_bidOrders; QMap>> m_askOrders; // 价格层级聚合数据 QMap m_bidPriceLevels; QMap m_askPriceLevels; mutable QMutex m_orderMutex; Q_DISABLE_COPY(QOrderListManager) }; #endif // QORDERLISTMANAGER_H