FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
client_state.hpp
Go to the documentation of this file.
1
9#pragma once
10
11#include <string>
12#include <vector>
13#include <mutex>
14#include <atomic>
15#include <functional>
16#include <unordered_map>
17#include <filesystem>
18#include <chrono>
19
20namespace fix40::client {
21
33
38 double balance = 0.0;
39 double available = 0.0;
40 double frozenMargin = 0.0;
41 double usedMargin = 0.0;
42 double positionProfit = 0.0;
43 double closeProfit = 0.0;
44 double dynamicEquity = 0.0;
45 double riskRatio = 0.0;
46};
47
52 std::string instrumentId;
53 int64_t longPosition = 0;
54 double longAvgPrice = 0.0;
55 int64_t shortPosition = 0;
56 double shortAvgPrice = 0.0;
57 double profit = 0.0;
58 bool quantitiesValid = false;
59};
60
64enum class OrderState {
66 NEW,
68 FILLED,
71};
72
76struct OrderInfo {
77 std::string clOrdID;
78 std::string orderId;
79 std::string symbol;
80 std::string side;
81 double price = 0.0;
82 int64_t orderQty = 0;
83 int64_t filledQty = 0;
84 double avgPx = 0.0;
86 std::string text;
87 std::string updateTime;
88};
89
100public:
101 using StateChangeCallback = std::function<void()>;
102
103 ClientState() = default;
104
105 // =========================================================================
106 // 连接状态
107 // =========================================================================
108
111 std::string getConnectionStateString() const;
112
113 void setUserId(const std::string& userId);
114 std::string getUserId() const;
115
116 // =========================================================================
117 // 账户信息
118 // =========================================================================
119
120 void updateAccount(const AccountInfo& info);
121 AccountInfo getAccount() const;
122
123 // =========================================================================
124 // 持仓信息
125 // =========================================================================
126
127 void updatePosition(const PositionInfo& pos);
128 void setPositions(const std::vector<PositionInfo>& positions);
129 std::vector<PositionInfo> getPositions() const;
130 void clearPositions();
131
132 // =========================================================================
133 // 订单信息
134 // =========================================================================
135
136 void addOrder(const OrderInfo& order);
137 void updateOrder(const std::string& clOrdID, const OrderInfo& order);
138 std::vector<OrderInfo> getOrders() const;
139 std::vector<OrderInfo> getActiveOrders() const;
140 void clearOrders();
141
152 void setOrders(const std::vector<OrderInfo>& orders);
153
158 void saveOrders(const std::string& filepath = "");
159
164 void loadOrders(const std::string& filepath = "");
165
166 // =========================================================================
167 // 合约搜索结果
168 // =========================================================================
169
170 void setSearchResults(const std::vector<std::string>& results);
171 std::vector<std::string> getSearchResults() const;
172
173 // =========================================================================
174 // 状态变更通知
175 // =========================================================================
176
178 void notifyStateChange();
179
180 // =========================================================================
181 // 消息/错误
182 // =========================================================================
183
184 void setLastError(const std::string& error);
185 std::string getLastError() const;
186
187 void addMessage(const std::string& msg);
188 std::vector<std::string> getMessages() const;
189
190private:
191 mutable std::mutex mutex_;
192
193 // 连接状态
194 std::atomic<ConnectionState> connectionState_{ConnectionState::DISCONNECTED};
195 std::string userId_;
196
197 // 账户信息
198 AccountInfo account_;
199
200 // 持仓信息
201 std::vector<PositionInfo> positions_;
202
203 // 订单信息
204 std::unordered_map<std::string, OrderInfo> orders_;
205 // 订单插入顺序(用于稳定展示顺序/保存顺序)
206 std::vector<std::string> orderSequence_;
207
208 // 合约搜索结果
209 std::vector<std::string> searchResults_;
210
211 // 消息
212 std::vector<std::string> messages_;
213 std::string lastError_;
214
215 // 状态变更回调
216 StateChangeCallback onStateChange_;
217
218 // 节流:上次通知时间
219 mutable std::chrono::steady_clock::time_point lastNotifyTime_;
220};
221
222} // namespace fix40::client
客户端状态管理器
Definition client_state.hpp:99
AccountInfo getAccount() const
Definition client_state.cpp:63
void updateOrder(const std::string &clOrdID, const OrderInfo &order)
Definition client_state.cpp:145
std::string getConnectionStateString() const
Definition client_state.cpp:29
void saveOrders(const std::string &filepath="")
保存订单到文件
Definition client_state.cpp:222
std::string getLastError() const
Definition client_state.cpp:359
void setOnStateChange(StateChangeCallback callback)
Definition client_state.cpp:322
void updateAccount(const AccountInfo &info)
Definition client_state.cpp:55
void addOrder(const OrderInfo &order)
Definition client_state.cpp:134
void setOrders(const std::vector< OrderInfo > &orders)
批量设置订单列表
Definition client_state.cpp:197
void clearOrders()
Definition client_state.cpp:188
void setSearchResults(const std::vector< std::string > &results)
Definition client_state.cpp:305
void setConnectionState(ConnectionState state)
Definition client_state.cpp:20
void setPositions(const std::vector< PositionInfo > &positions)
Definition client_state.cpp:109
void addMessage(const std::string &msg)
Definition client_state.cpp:364
std::vector< OrderInfo > getActiveOrders() const
Definition client_state.cpp:169
std::vector< std::string > getMessages() const
Definition client_state.cpp:387
std::string getUserId() const
Definition client_state.cpp:46
std::vector< PositionInfo > getPositions() const
Definition client_state.cpp:117
void clearPositions()
Definition client_state.cpp:122
ConnectionState getConnectionState() const
Definition client_state.cpp:25
std::vector< OrderInfo > getOrders() const
Definition client_state.cpp:156
void notifyStateChange()
Definition client_state.cpp:327
void setLastError(const std::string &error)
Definition client_state.cpp:351
void loadOrders(const std::string &filepath="")
从文件加载订单
Definition client_state.cpp:250
std::function< void()> StateChangeCallback
Definition client_state.hpp:101
std::vector< std::string > getSearchResults() const
Definition client_state.cpp:313
void setUserId(const std::string &userId)
Definition client_state.cpp:41
void updatePosition(const PositionInfo &pos)
Definition client_state.cpp:72
Definition client_app.cpp:13
ConnectionState
连接状态
Definition client_state.hpp:25
OrderState
订单状态
Definition client_state.hpp:64
Order order
Definition simulation_app.cpp:46
std::string error
Definition simulation_app.cpp:45
账户信息
Definition client_state.hpp:37
double balance
静态权益
Definition client_state.hpp:38
double closeProfit
平仓盈亏
Definition client_state.hpp:43
double dynamicEquity
动态权益
Definition client_state.hpp:44
double usedMargin
占用保证金
Definition client_state.hpp:41
double available
可用资金
Definition client_state.hpp:39
double positionProfit
持仓盈亏
Definition client_state.hpp:42
double riskRatio
风险度
Definition client_state.hpp:45
double frozenMargin
冻结保证金
Definition client_state.hpp:40
订单信息
Definition client_state.hpp:76
std::string clOrdID
Definition client_state.hpp:77
double price
Definition client_state.hpp:81
std::string side
"BUY" or "SELL"
Definition client_state.hpp:80
std::string updateTime
Definition client_state.hpp:87
std::string symbol
Definition client_state.hpp:79
double avgPx
Definition client_state.hpp:84
std::string text
拒绝原因等
Definition client_state.hpp:86
int64_t filledQty
Definition client_state.hpp:83
std::string orderId
Definition client_state.hpp:78
OrderState state
Definition client_state.hpp:85
int64_t orderQty
Definition client_state.hpp:82
持仓信息
Definition client_state.hpp:51
bool quantitiesValid
是否包含多空数量字段(允许数量为0时用于清空持仓)
Definition client_state.hpp:58
double profit
Definition client_state.hpp:57
double longAvgPrice
Definition client_state.hpp:54
std::string instrumentId
Definition client_state.hpp:52
int64_t longPosition
Definition client_state.hpp:53
int64_t shortPosition
Definition client_state.hpp:55
double shortAvgPrice
Definition client_state.hpp:56