FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
matching_engine.hpp
Go to the documentation of this file.
1
9#pragma once
10
11#include <thread>
12#include <atomic>
13#include <functional>
14#include <unordered_map>
15#include <list>
16#include <memory>
22
23namespace fix40 {
24
25// 前向声明
27
34using ExecutionReportCallback = std::function<void(const SessionID&, const ExecutionReport&)>;
35
42using MarketDataUpdateCallback = std::function<void(const std::string&, double)>;
43
84 public:
89
96
97 // 禁止拷贝
100
104 void start();
105
111 void stop();
112
120 void submit(const OrderEvent& event);
121
126 void submit(OrderEvent&& event);
127
133 bool is_running() const { return running_.load(); }
134
142 execReportCallback_ = std::move(callback);
143 }
144
153 marketDataUpdateCallback_ = std::move(callback);
154 }
155
161 const OrderBook* getOrderBook(const std::string& symbol) const;
162
163 // =========================================================================
164 // 行情驱动撮合接口
165 // =========================================================================
166
175 void submitMarketData(const MarketData& md);
176
183 const MarketDataSnapshot* getMarketSnapshot(const std::string& instrumentId) const;
184
191 const std::list<Order>* getPendingOrders(const std::string& instrumentId) const;
192
198 size_t getTotalPendingOrderCount() const;
199
200 // =========================================================================
201 // 管理器设置(用于提供撮合所需的只读信息)
202 // =========================================================================
203
213 void setInstrumentManager(InstrumentManager* instrumentMgr) { instrumentManager_ = instrumentMgr; }
214
215 // =========================================================================
216 // 行情驱动撮合核心方法(公开以便测试)
217 // =========================================================================
218
228 bool canMatchBuyOrder(const Order& order, const MarketDataSnapshot& snapshot) const;
229
239 bool canMatchSellOrder(const Order& order, const MarketDataSnapshot& snapshot) const;
240
241private:
245 void run();
246
251 void process_event(const OrderEvent& event);
252
261 void handle_new_order(const OrderEvent& event);
262
267 void handle_cancel_request(const OrderEvent& event);
268
273 void handle_session_logon(const OrderEvent& event);
274
279 void handle_session_logout(const OrderEvent& event);
280
286 OrderBook& getOrCreateOrderBook(const std::string& symbol);
287
293 void sendExecutionReport(const SessionID& sessionID, const ExecutionReport& report);
294
298 std::string generateExecID();
299
303 std::string generateOrderID();
304
305 // =========================================================================
306 // 行情驱动撮合内部方法
307 // =========================================================================
308
319 void handleMarketData(const MarketData& md);
320
328 bool tryMatch(Order& order, const MarketDataSnapshot& snapshot);
329
337 void executeFill(Order& order, double fillPrice, int64_t fillQty);
338
344 void addToPendingOrders(const Order& order);
345
353 std::optional<Order> removeFromPendingOrders(const std::string& instrumentId,
354 const std::string& clOrdID);
355
356 std::atomic<bool> running_{false};
357 std::thread worker_thread_;
358
361
363 std::unordered_map<std::string, std::unique_ptr<OrderBook>> orderBooks_;
364
366 std::unordered_map<std::string, SessionID> orderSessionMap_;
367
369 std::unordered_map<std::string, std::string> orderUserMap_;
370
372 ExecutionReportCallback execReportCallback_;
373
375 MarketDataUpdateCallback marketDataUpdateCallback_;
376
378 uint64_t nextExecID_ = 1;
379
381 uint64_t nextOrderID_ = 1;
382
383 // =========================================================================
384 // 行情驱动撮合相关成员
385 // =========================================================================
386
388 std::unordered_map<std::string, MarketDataSnapshot> marketSnapshots_;
389
391 std::unordered_map<std::string, std::list<Order>> pendingOrders_;
392
395
396 // =========================================================================
397 // 管理器指针(用于提供撮合所需的只读信息)
398 // =========================================================================
399
400 InstrumentManager* instrumentManager_ = nullptr;
401 };
402
403} // namespace fix40
合约信息管理器
Definition instrument_manager.hpp:47
行情驱动撮合引擎
Definition matching_engine.hpp:83
void stop()
停止撮合引擎线程
Definition matching_engine.cpp:77
void setMarketDataUpdateCallback(MarketDataUpdateCallback callback)
设置行情更新回调
Definition matching_engine.hpp:152
void start()
启动撮合引擎线程
Definition matching_engine.cpp:68
MatchingEngine()
构造撮合引擎
void submit(const OrderEvent &event)
提交订单事件
Definition matching_engine.cpp:92
void submitMarketData(const MarketData &md)
提交行情数据
Definition matching_engine.cpp:407
MatchingEngine(const MatchingEngine &)=delete
const std::list< Order > * getPendingOrders(const std::string &instrumentId) const
获取挂单列表(只读)
Definition matching_engine.cpp:419
MatchingEngine & operator=(const MatchingEngine &)=delete
const MarketDataSnapshot * getMarketSnapshot(const std::string &instrumentId) const
获取行情快照
Definition matching_engine.cpp:411
bool canMatchSellOrder(const Order &order, const MarketDataSnapshot &snapshot) const
检查卖单是否可成交
Definition matching_engine.cpp:522
bool canMatchBuyOrder(const Order &order, const MarketDataSnapshot &snapshot) const
检查买单是否可成交
Definition matching_engine.cpp:507
void setInstrumentManager(InstrumentManager *instrumentMgr)
设置合约管理器
Definition matching_engine.hpp:213
bool is_running() const
检查引擎是否正在运行
Definition matching_engine.hpp:133
~MatchingEngine()
析构函数
Definition matching_engine.cpp:64
size_t getTotalPendingOrderCount() const
获取所有挂单数量
Definition matching_engine.cpp:427
void setExecutionReportCallback(ExecutionReportCallback callback)
设置 ExecutionReport 回调
Definition matching_engine.hpp:141
const OrderBook * getOrderBook(const std::string &symbol) const
获取订单簿(只读)
Definition matching_engine.cpp:369
订单簿
Definition order_book.hpp:110
Definition blockingconcurrentqueue.h:26
行情数据结构定义
行情快照数据结构
Definition matching_engine.hpp:23
std::function< void(const SessionID &, const ExecutionReport &)> ExecutionReportCallback
ExecutionReport 回调类型
Definition matching_engine.hpp:34
std::function< void(const std::string &, double)> MarketDataUpdateCallback
行情更新回调类型
Definition matching_engine.hpp:42
订单簿实现
订单事件定义
Order order
Definition simulation_app.cpp:46
执行报告
Definition order.hpp:195
合约行情快照
Definition market_data_snapshot.hpp:47
行情数据结构体
Definition market_data.hpp:55
订单事件
Definition order_event.hpp:41
内部订单表示
Definition order.hpp:90
FIX 会话标识符
Definition application.hpp:28