FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
fix40::MatchingEngine Class Reference

行情驱动撮合引擎 More...

#include <matching_engine.hpp>

Collaboration diagram for fix40::MatchingEngine:
Collaboration graph

Public Member Functions

 MatchingEngine ()
 构造撮合引擎
 
 ~MatchingEngine ()
 析构函数
 
 MatchingEngine (const MatchingEngine &)=delete
 
MatchingEngineoperator= (const MatchingEngine &)=delete
 
void start ()
 启动撮合引擎线程
 
void stop ()
 停止撮合引擎线程
 
void submit (const OrderEvent &event)
 提交订单事件
 
void submit (OrderEvent &&event)
 提交订单事件(移动语义)
 
bool is_running () const
 检查引擎是否正在运行
 
void setExecutionReportCallback (ExecutionReportCallback callback)
 设置 ExecutionReport 回调
 
void setMarketDataUpdateCallback (MarketDataUpdateCallback callback)
 设置行情更新回调
 
const OrderBookgetOrderBook (const std::string &symbol) const
 获取订单簿(只读)
 
void submitMarketData (const MarketData &md)
 提交行情数据
 
const MarketDataSnapshotgetMarketSnapshot (const std::string &instrumentId) const
 获取行情快照
 
const std::list< Order > * getPendingOrders (const std::string &instrumentId) const
 获取挂单列表(只读)
 
size_t getTotalPendingOrderCount () const
 获取所有挂单数量
 
void setInstrumentManager (InstrumentManager *instrumentMgr)
 设置合约管理器
 
bool canMatchBuyOrder (const Order &order, const MarketDataSnapshot &snapshot) const
 检查买单是否可成交
 
bool canMatchSellOrder (const Order &order, const MarketDataSnapshot &snapshot) const
 检查卖单是否可成交
 

Detailed Description

行情驱动撮合引擎

在独立线程中运行,从无锁队列消费订单事件并处理。

与原有撮合引擎的区别
  • 原有:用户订单之间互相撮合
  • 新版:用户订单与CTP行情盘口比对撮合
设计特点
  • Application::fromApp() 只做轻量的入队操作,快速返回
  • 所有订单处理在单线程中串行执行,无需加锁
  • 工作线程不会因业务逻辑阻塞
  • 支持行情驱动的被动撮合
撮合规则
  • 买单成交条件:买价 >= CTP卖一价
  • 卖单成交条件:卖价 <= CTP买一价
  • 成交价格:取CTP对手盘价格
使用示例
engine.setExecutionReportCallback([](const SessionID& sid, const ExecutionReport& rpt) {
// 发送 ExecutionReport 到客户端
});
engine.start();
// 从 Application::fromApp() 中提交事件
// 提交行情数据触发撮合
engine.submitMarketData(marketData);
// 关闭时
engine.stop();
行情驱动撮合引擎
Definition matching_engine.hpp:83
void stop()
停止撮合引擎线程
Definition matching_engine.cpp:77
void start()
启动撮合引擎线程
Definition matching_engine.cpp:68
void submit(const OrderEvent &event)
提交订单事件
Definition matching_engine.cpp:92
void submitMarketData(const MarketData &md)
提交行情数据
Definition matching_engine.cpp:407
void setExecutionReportCallback(ExecutionReportCallback callback)
设置 ExecutionReport 回调
Definition matching_engine.hpp:141
Order order
Definition simulation_app.cpp:46
执行报告
Definition order.hpp:195
订单事件
Definition order_event.hpp:41
FIX 会话标识符
Definition application.hpp:28

Constructor & Destructor Documentation

◆ MatchingEngine() [1/2]

fix40::MatchingEngine::MatchingEngine ( )
default

构造撮合引擎

◆ ~MatchingEngine()

fix40::MatchingEngine::~MatchingEngine ( )

析构函数

自动停止引擎线程。

Here is the call graph for this function:

◆ MatchingEngine() [2/2]

fix40::MatchingEngine::MatchingEngine ( const MatchingEngine )
delete

Member Function Documentation

◆ canMatchBuyOrder()

bool fix40::MatchingEngine::canMatchBuyOrder ( const Order order,
const MarketDataSnapshot snapshot 
) const

检查买单是否可成交

买单成交条件:买价 >= CTP卖一价

Parameters
order待检查的买单
snapshot当前行情快照
Returns
可成交返回 true
Here is the call graph for this function:

◆ canMatchSellOrder()

bool fix40::MatchingEngine::canMatchSellOrder ( const Order order,
const MarketDataSnapshot snapshot 
) const

检查卖单是否可成交

卖单成交条件:卖价 <= CTP买一价

Parameters
order待检查的卖单
snapshot当前行情快照
Returns
可成交返回 true
Here is the call graph for this function:

◆ getMarketSnapshot()

const MarketDataSnapshot * fix40::MatchingEngine::getMarketSnapshot ( const std::string &  instrumentId) const

获取行情快照

Parameters
instrumentId合约代码
Returns
const MarketDataSnapshot* 行情快照指针,不存在返回 nullptr

◆ getOrderBook()

const OrderBook * fix40::MatchingEngine::getOrderBook ( const std::string &  symbol) const

获取订单簿(只读)

Parameters
symbol合约代码
Returns
const OrderBook* 订单簿指针,不存在返回 nullptr

◆ getPendingOrders()

const std::list< Order > * fix40::MatchingEngine::getPendingOrders ( const std::string &  instrumentId) const

获取挂单列表(只读)

Parameters
instrumentId合约代码
Returns
const std::list<Order>* 挂单列表指针,不存在返回 nullptr

◆ getTotalPendingOrderCount()

size_t fix40::MatchingEngine::getTotalPendingOrderCount ( ) const

获取所有挂单数量

Returns
所有合约的挂单总数

◆ is_running()

bool fix40::MatchingEngine::is_running ( ) const
inline

检查引擎是否正在运行

Returns
true 正在运行
false 已停止

◆ operator=()

MatchingEngine & fix40::MatchingEngine::operator= ( const MatchingEngine )
delete

◆ setExecutionReportCallback()

void fix40::MatchingEngine::setExecutionReportCallback ( ExecutionReportCallback  callback)
inline

设置 ExecutionReport 回调

Parameters
callback回调函数

必须在 start() 之前调用。

◆ setInstrumentManager()

void fix40::MatchingEngine::setInstrumentManager ( InstrumentManager instrumentMgr)
inline

设置合约管理器

Parameters
instrumentMgr合约管理器指针

撮合引擎会在行情更新时更新合约的涨跌停等信息。

Note
账户/持仓/风控等业务权威逻辑由上层 Application(如 SimulationApp)负责, 撮合引擎只负责撮合与订单状态推进。

◆ setMarketDataUpdateCallback()

void fix40::MatchingEngine::setMarketDataUpdateCallback ( MarketDataUpdateCallback  callback)
inline

设置行情更新回调

Parameters
callback回调函数

当行情数据更新时调用,用于触发账户价值重算和推送。 必须在 start() 之前调用。

◆ start()

void fix40::MatchingEngine::start ( )

启动撮合引擎线程

Here is the caller graph for this function:

◆ stop()

void fix40::MatchingEngine::stop ( )

停止撮合引擎线程

等待当前处理完成后退出。

Here is the call graph for this function:
Here is the caller graph for this function:

◆ submit() [1/2]

void fix40::MatchingEngine::submit ( const OrderEvent event)

提交订单事件

Parameters
event订单事件

线程安全,可从任意线程调用。 事件会被放入无锁队列,由引擎线程异步处理。

Here is the call graph for this function:
Here is the caller graph for this function:

◆ submit() [2/2]

void fix40::MatchingEngine::submit ( OrderEvent &&  event)

提交订单事件(移动语义)

Parameters
event订单事件
Here is the call graph for this function:

◆ submitMarketData()

void fix40::MatchingEngine::submitMarketData ( const MarketData md)

提交行情数据

当新行情到达时,检查虚拟订单簿中是否有可成交的挂单。 线程安全,可从任意线程调用。

Parameters
md行情数据
Here is the call graph for this function:

The documentation for this class was generated from the following files: