FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
simulation_app.hpp
Go to the documentation of this file.
1
28#pragma once
29
30#include "fix/application.hpp"
37#include <memory>
38#include <unordered_map>
39#include <mutex>
40
41namespace fix40 {
42
43// 前向声明
44class IStore;
45struct SimulationAppTestAccess;
46
87class SimulationApp : public Application {
88public:
100
105
106 OrderMarginInfo(double frozen, int64_t qty)
107 : originalFrozenMargin(frozen)
108 , originalOrderQty(qty)
109 , releasedMargin(0.0) {}
110
112 double calculateReleaseAmount(int64_t fillQty) {
113 if (originalOrderQty <= 0) return 0.0;
114 double amount = originalFrozenMargin * fillQty / originalOrderQty;
115 releasedMargin += amount;
116 return amount;
117 }
118
120 double getRemainingFrozen() const {
122 }
123 };
124
129
135 explicit SimulationApp(IStore* store);
136
142 ~SimulationApp() override;
143
149 void start();
150
156 void stop();
157
158 // =========================================================================
159 // Application 接口实现
160 // =========================================================================
161
168 void onLogon(const SessionID& sessionID) override;
169
176 void onLogout(const SessionID& sessionID) override;
177
186 void fromApp(const FixMessage& msg, const SessionID& sessionID) override;
187
195 void toApp(FixMessage& msg, const SessionID& sessionID) override;
196
204 SessionManager& getSessionManager() { return sessionManager_; }
205
212 IStore* getStore() const override { return store_; }
213
214 // =========================================================================
215 // 管理器访问接口
216 // =========================================================================
217
222 AccountManager& getAccountManager() { return accountManager_; }
223
228 PositionManager& getPositionManager() { return positionManager_; }
229
234 InstrumentManager& getInstrumentManager() { return instrumentManager_; }
235
240 RiskManager& getRiskManager() { return riskManager_; }
241
246 MatchingEngine& getMatchingEngine() { return engine_; }
247
248 // =========================================================================
249 // 账户操作接口
250 // =========================================================================
251
261 Account getOrCreateAccount(const std::string& accountId, double initialBalance = 1000000.0);
262
263private:
271
277 void initializeManagers();
278
287 void onExecutionReport(const SessionID& sessionID, const ExecutionReport& report);
288
297 void handleFill(const std::string& accountId, const ExecutionReport& report);
298
307 void handleReject(const std::string& accountId, const ExecutionReport& report);
308
317 void handleCancel(const std::string& accountId, const ExecutionReport& report);
318
327 std::string extractAccountId(const SessionID& sessionID) const;
328
329 // =========================================================================
330 // 消息处理函数 (Message Handlers)
331 // =========================================================================
332
340 void handleNewOrderSingle(const FixMessage& msg, const SessionID& sessionID, const std::string& userId);
341
349 void handleOrderCancelRequest(const FixMessage& msg, const SessionID& sessionID, const std::string& userId);
350
360 void handleBalanceQuery(const FixMessage& msg, const SessionID& sessionID, const std::string& userId);
361
371 void handlePositionQuery(const FixMessage& msg, const SessionID& sessionID, const std::string& userId);
372
382 void handleInstrumentSearch(const FixMessage& msg, const SessionID& sessionID);
383
395 void handleOrderHistoryQuery(const FixMessage& msg, const SessionID& sessionID, const std::string& userId);
396
406 void sendBusinessReject(const SessionID& sessionID, const std::string& refMsgType, const std::string& reason);
407
408 // =========================================================================
409 // 行情驱动账户更新 (Market-Driven Account Update)
410 // =========================================================================
411
421 void onMarketDataUpdate(const std::string& instrumentId, double lastPrice);
422
431 void pushAccountUpdate(const std::string& userId, int reason = 1);
432
442 void pushPositionUpdate(const std::string& userId, const std::string& instrumentId, int reason = 1);
443
450 std::optional<SessionID> findSessionByUserId(const std::string& userId) const;
451
452 // =========================================================================
453 // 成员变量
454 // =========================================================================
455
456 MatchingEngine engine_;
457 SessionManager sessionManager_;
458
459 AccountManager accountManager_;
460 PositionManager positionManager_;
461 InstrumentManager instrumentManager_;
462 RiskManager riskManager_;
463
464 IStore* store_ = nullptr;
465
467 std::unordered_map<std::string, std::string> orderAccountMap_;
468
470 std::unordered_map<std::string, OrderMarginInfo> orderMarginInfoMap_;
471
473 mutable std::mutex mapMutex_;
474};
475
476} // namespace fix40
账户管理模块
FIX 应用层接口定义
账户管理器
Definition account_manager.hpp:56
FIX 应用层抽象接口
Definition application.hpp:116
FIX 消息的面向对象封装
Definition fix_codec.hpp:46
存储接口
Definition store.hpp:61
合约信息管理器
Definition instrument_manager.hpp:47
行情驱动撮合引擎
Definition matching_engine.hpp:83
持仓管理器
Definition position_manager.hpp:56
风险控制模块
Definition risk_manager.hpp:154
FIX 会话管理器
Definition session_manager.hpp:62
模拟交易应用层
Definition simulation_app.hpp:87
MatchingEngine & getMatchingEngine()
获取撮合引擎
Definition simulation_app.hpp:246
RiskManager & getRiskManager()
获取风控管理器
Definition simulation_app.hpp:240
~SimulationApp() override
析构函数
Definition simulation_app.cpp:209
PositionManager & getPositionManager()
获取持仓管理器
Definition simulation_app.hpp:228
SimulationApp()
默认构造函数(不带持久化)
Definition simulation_app.cpp:179
void onLogon(const SessionID &sessionID) override
会话登录成功回调
Definition simulation_app.cpp:221
AccountManager & getAccountManager()
获取账户管理器
Definition simulation_app.hpp:222
void toApp(FixMessage &msg, const SessionID &sessionID) override
发送业务消息前回调
Definition simulation_app.cpp:297
friend struct SimulationAppTestAccess
单元测试访问器
Definition simulation_app.hpp:270
void onLogout(const SessionID &sessionID) override
会话登出回调
Definition simulation_app.cpp:244
IStore * getStore() const override
获取存储接口
Definition simulation_app.hpp:212
SessionManager & getSessionManager()
获取会话管理器
Definition simulation_app.hpp:204
InstrumentManager & getInstrumentManager()
获取合约管理器
Definition simulation_app.hpp:234
void start()
启动撮合引擎
Definition simulation_app.cpp:213
void fromApp(const FixMessage &msg, const SessionID &sessionID) override
收到业务消息回调
Definition simulation_app.cpp:249
Account getOrCreateAccount(const std::string &accountId, double initialBalance=1000000.0)
创建或获取账户
Definition simulation_app.cpp:547
void stop()
停止撮合引擎
Definition simulation_app.cpp:217
合约信息管理模块
撮合引擎接口
Definition matching_engine.hpp:23
持仓管理模块
风险控制模块
FIX 会话管理器
虚拟交易账户
Definition account.hpp:44
执行报告
Definition order.hpp:195
FIX 会话标识符
Definition application.hpp:28
订单保证金信息
Definition simulation_app.hpp:96
double releasedMargin
已释放的保证金(累计)
Definition simulation_app.hpp:99
OrderMarginInfo()
Definition simulation_app.hpp:101
double getRemainingFrozen() const
获取剩余未释放的冻结保证金
Definition simulation_app.hpp:120
OrderMarginInfo(double frozen, int64_t qty)
Definition simulation_app.hpp:106
double originalFrozenMargin
原始总冻结保证金
Definition simulation_app.hpp:97
double calculateReleaseAmount(int64_t fillQty)
计算本次成交应释放的冻结保证金
Definition simulation_app.hpp:112
int64_t originalOrderQty
原始订单总数量
Definition simulation_app.hpp:98