FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
mock_md_adapter.hpp
Go to the documentation of this file.
1
8#pragma once
9
10#include <thread>
11#include <atomic>
12#include <mutex>
13#include <set>
14#include <map>
15#include <random>
16#include <chrono>
17#include "market/md_adapter.hpp"
18
19namespace fix40 {
20
44class MockMdAdapter : public MdAdapter {
45public:
51
55 ~MockMdAdapter() override;
56
57 // 禁止拷贝
58 MockMdAdapter(const MockMdAdapter&) = delete;
60
61 // =========================================================================
62 // MdAdapter 接口实现
63 // =========================================================================
64
65 bool start() override;
66 void stop() override;
67 bool isRunning() const override { return running_.load(); }
68 MdAdapterState getState() const override { return state_.load(); }
69
70 bool subscribe(const std::vector<std::string>& instruments) override;
71 bool unsubscribe(const std::vector<std::string>& instruments) override;
72
73 void setStateCallback(StateCallback callback) override;
74
75 std::string getName() const override { return "Mock"; }
76 std::string getTradingDay() const override;
77
78 // =========================================================================
79 // Mock 特有配置
80 // =========================================================================
81
87 void setTickInterval(std::chrono::milliseconds interval) {
88 tickIntervalMs_.store(interval.count());
89 }
90
99 void setBasePrice(const std::string& instrument, double basePrice);
100
106 void setVolatility(double volatility) {
107 volatility_.store(volatility);
108 }
109
110private:
114 void run();
115
121 MarketData generateTick(const std::string& instrument);
122
128 void notifyState(MdAdapterState state, const std::string& message);
129
134 std::string getCurrentTime() const;
135
136 std::atomic<bool> running_{false};
137 std::atomic<MdAdapterState> state_{MdAdapterState::DISCONNECTED};
138 std::thread workerThread_;
139
140 mutable std::mutex mutex_;
141 std::set<std::string> subscribedInstruments_;
142 std::map<std::string, double> basePrices_;
143 std::map<std::string, double> lastPrices_;
144
145 StateCallback stateCallback_;
146 std::atomic<int64_t> tickIntervalMs_{1000};
147 std::atomic<double> volatility_{0.005};
148
149 std::mt19937 rng_;
150 const std::string tradingDay_;
151};
152
153} // namespace fix40
行情适配器抽象接口
Definition md_adapter.hpp:77
模拟行情适配器
Definition mock_md_adapter.hpp:44
MdAdapterState getState() const override
获取当前状态
Definition mock_md_adapter.hpp:68
void stop() override
停止适配器
Definition mock_md_adapter.cpp:60
MockMdAdapter & operator=(const MockMdAdapter &)=delete
std::string getTradingDay() const override
获取交易日
Definition mock_md_adapter.cpp:112
MockMdAdapter(const MockMdAdapter &)=delete
bool isRunning() const override
检查适配器是否正在运行
Definition mock_md_adapter.hpp:67
bool subscribe(const std::vector< std::string > &instruments) override
订阅合约行情
Definition mock_md_adapter.cpp:76
void setTickInterval(std::chrono::milliseconds interval)
设置行情生成间隔
Definition mock_md_adapter.hpp:87
std::string getName() const override
获取适配器名称
Definition mock_md_adapter.hpp:75
void setVolatility(double volatility)
设置价格波动幅度(百分比)
Definition mock_md_adapter.hpp:106
bool unsubscribe(const std::vector< std::string > &instruments) override
退订合约行情
Definition mock_md_adapter.cpp:98
void setStateCallback(StateCallback callback) override
设置状态变更回调
Definition mock_md_adapter.cpp:107
bool start() override
启动适配器
Definition mock_md_adapter.cpp:42
~MockMdAdapter() override
析构函数
Definition mock_md_adapter.cpp:38
void setBasePrice(const std::string &instrument, double basePrice)
设置基准价格
Definition mock_md_adapter.cpp:116
Definition concurrentqueue.h:768
行情适配器接口定义
Definition matching_engine.hpp:23
MdAdapterState
行情适配器状态
Definition md_adapter.hpp:24
std::function< void(MdAdapterState state, const std::string &message)> StateCallback
状态变更回调类型
Definition md_adapter.hpp:38
行情数据结构体
Definition market_data.hpp:55