FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
position_manager.hpp
Go to the documentation of this file.
1
9#pragma once
10
11#include <string>
12#include <unordered_map>
13#include <optional>
14#include <mutex>
15#include <vector>
17#include "app/model/order.hpp"
19
20namespace fix40 {
21
22// 前向声明
23class IStore;
24
57public:
58 // -------------------------------------------------------------------------
59 // 构造函数
60 // -------------------------------------------------------------------------
61
66
75 explicit PositionManager(IStore* store);
76
80 ~PositionManager() = default;
81
82 // 禁用拷贝
85
86 // -------------------------------------------------------------------------
87 // 查询方法
88 // -------------------------------------------------------------------------
89
97 std::optional<Position> getPosition(const std::string& accountId,
98 const std::string& instrumentId) const;
99
106 std::vector<Position> getPositionsByAccount(const std::string& accountId) const;
107
113 std::vector<Position> getAllPositions() const;
114
122 bool hasPosition(const std::string& accountId, const std::string& instrumentId) const;
123
129 size_t size() const;
130
131 // -------------------------------------------------------------------------
132 // 开仓操作
133 // -------------------------------------------------------------------------
134
150 void openPosition(const std::string& accountId,
151 const std::string& instrumentId,
152 OrderSide side,
153 int64_t volume,
154 double price,
155 double margin);
156
157 // -------------------------------------------------------------------------
158 // 平仓操作
159 // -------------------------------------------------------------------------
160
178 double closePosition(const std::string& accountId,
179 const std::string& instrumentId,
180 OrderSide side,
181 int64_t volume,
182 double price,
183 int volumeMultiple);
184
185 // -------------------------------------------------------------------------
186 // 盈亏更新
187 // -------------------------------------------------------------------------
188
195 void updateAllProfits(const MarketDataSnapshot& snapshot, int volumeMultiple);
196
206 double updateProfit(const std::string& accountId,
207 const std::string& instrumentId,
208 double lastPrice,
209 int volumeMultiple);
210
217 double getTotalProfit(const std::string& accountId) const;
218
219 // -------------------------------------------------------------------------
220 // 清理方法
221 // -------------------------------------------------------------------------
222
226 void clear();
227
228private:
236 static std::string makeKey(const std::string& accountId, const std::string& instrumentId);
237
243 void persistPosition(const Position& position);
244
246 std::unordered_map<std::string, Position> positions_;
247
249 IStore* store_;
250
252 mutable std::mutex mutex_;
253};
254
255} // namespace fix40
存储接口
Definition store.hpp:61
持仓管理器
Definition position_manager.hpp:56
std::vector< Position > getAllPositions() const
获取所有持仓
Definition position_manager.cpp:63
std::vector< Position > getPositionsByAccount(const std::string &accountId) const
获取账户所有持仓
Definition position_manager.cpp:51
PositionManager(const PositionManager &)=delete
void clear()
清空所有持仓
Definition position_manager.cpp:266
double closePosition(const std::string &accountId, const std::string &instrumentId, OrderSide side, int64_t volume, double price, int volumeMultiple)
平仓
Definition position_manager.cpp:143
bool hasPosition(const std::string &accountId, const std::string &instrumentId) const
检查是否有持仓
Definition position_manager.cpp:74
PositionManager()
默认构造函数
Definition position_manager.cpp:16
std::optional< Position > getPosition(const std::string &accountId, const std::string &instrumentId) const
获取持仓
Definition position_manager.cpp:40
void updateAllProfits(const MarketDataSnapshot &snapshot, int volumeMultiple)
更新指定合约所有持仓的浮动盈亏
Definition position_manager.cpp:219
~PositionManager()=default
析构函数
PositionManager & operator=(const PositionManager &)=delete
double updateProfit(const std::string &accountId, const std::string &instrumentId, double lastPrice, int volumeMultiple)
更新指定持仓的浮动盈亏
Definition position_manager.cpp:230
double getTotalProfit(const std::string &accountId) const
获取账户总浮动盈亏
Definition position_manager.cpp:250
size_t size() const
获取持仓数量
Definition position_manager.cpp:85
void openPosition(const std::string &accountId, const std::string &instrumentId, OrderSide side, int64_t volume, double price, double margin)
开仓
Definition position_manager.cpp:94
行情快照数据结构
Definition matching_engine.hpp:23
OrderSide
买卖方向
Definition order.hpp:26
内部订单数据结构
持仓数据结构
合约行情快照
Definition market_data_snapshot.hpp:47
合约持仓
Definition position.hpp:45