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

持仓管理器 More...

#include <position_manager.hpp>

Collaboration diagram for fix40::PositionManager:
Collaboration graph

Public Member Functions

 PositionManager ()
 默认构造函数
 
 PositionManager (IStore *store)
 带存储接口的构造函数
 
 ~PositionManager ()=default
 析构函数
 
 PositionManager (const PositionManager &)=delete
 
PositionManageroperator= (const PositionManager &)=delete
 
std::optional< PositiongetPosition (const std::string &accountId, const std::string &instrumentId) const
 获取持仓
 
std::vector< PositiongetPositionsByAccount (const std::string &accountId) const
 获取账户所有持仓
 
std::vector< PositiongetAllPositions () const
 获取所有持仓
 
bool hasPosition (const std::string &accountId, const std::string &instrumentId) const
 检查是否有持仓
 
size_t size () const
 获取持仓数量
 
void openPosition (const std::string &accountId, const std::string &instrumentId, OrderSide side, int64_t volume, double price, double margin)
 开仓
 
double closePosition (const std::string &accountId, const std::string &instrumentId, OrderSide side, int64_t volume, double price, int volumeMultiple)
 平仓
 
void updateAllProfits (const MarketDataSnapshot &snapshot, int volumeMultiple)
 更新指定合约所有持仓的浮动盈亏
 
double updateProfit (const std::string &accountId, const std::string &instrumentId, double lastPrice, int volumeMultiple)
 更新指定持仓的浮动盈亏
 
double getTotalProfit (const std::string &accountId) const
 获取账户总浮动盈亏
 
void clear ()
 清空所有持仓
 

Detailed Description

持仓管理器

负责持仓的开仓、平仓、盈亏计算等操作。 支持与IStore接口集成进行数据持久化。

线程安全
所有公共方法都是线程安全的,使用互斥锁保护内部数据。
持仓计算
  • 开仓:增加持仓量,计算新的持仓均价
  • 平仓:减少持仓量,计算平仓盈亏
  • 浮动盈亏:根据最新价实时计算
使用示例
// 开仓
mgr.openPosition("user001", "IF2601", OrderSide::BUY, 2, 4000.0, 240000.0);
// 更新浮动盈亏
snapshot.lastPrice = 4050.0;
mgr.updateAllProfits(snapshot, 300);
// 平仓
double profit = mgr.closePosition("user001", "IF2601", OrderSide::BUY, 1, 4050.0, 300);
持仓管理器
Definition position_manager.hpp:56
double closePosition(const std::string &accountId, const std::string &instrumentId, OrderSide side, int64_t volume, double price, int volumeMultiple)
平仓
Definition position_manager.cpp:143
void updateAllProfits(const MarketDataSnapshot &snapshot, int volumeMultiple)
更新指定合约所有持仓的浮动盈亏
Definition position_manager.cpp:219
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 market_data_snapshot.hpp:47
double lastPrice
最新价
Definition market_data_snapshot.hpp:56

Constructor & Destructor Documentation

◆ PositionManager() [1/3]

fix40::PositionManager::PositionManager ( )

默认构造函数

◆ PositionManager() [2/3]

fix40::PositionManager::PositionManager ( IStore store)
explicit

带存储接口的构造函数

Parameters
store存储接口指针(可为nullptr)
Note
当 store 不为空时,会在构造阶段从存储中加载已存在的持仓, 用于服务端重启后的持仓状态恢复。
Here is the call graph for this function:

◆ ~PositionManager()

fix40::PositionManager::~PositionManager ( )
default

析构函数

◆ PositionManager() [3/3]

fix40::PositionManager::PositionManager ( const PositionManager )
delete

Member Function Documentation

◆ clear()

void fix40::PositionManager::clear ( )

清空所有持仓

◆ closePosition()

double fix40::PositionManager::closePosition ( const std::string &  accountId,
const std::string &  instrumentId,
OrderSide  side,
int64_t  volume,
double  price,
int  volumeMultiple 
)

平仓

减少持仓量,计算平仓盈亏。

Parameters
accountId账户ID
instrumentId合约代码
side平仓方向(BUY=平空头,SELL=平多头)
volume平仓数量
price平仓价格
volumeMultiple合约乘数
Returns
平仓盈亏
盈亏计算
  • 平多头:(平仓价 - 持仓均价) × 平仓量 × 合约乘数
  • 平空头:(持仓均价 - 平仓价) × 平仓量 × 合约乘数

◆ getAllPositions()

std::vector< Position > fix40::PositionManager::getAllPositions ( ) const

获取所有持仓

Returns
所有持仓列表

◆ getPosition()

std::optional< Position > fix40::PositionManager::getPosition ( const std::string &  accountId,
const std::string &  instrumentId 
) const

获取持仓

Parameters
accountId账户ID
instrumentId合约代码
Returns
持仓信息,不存在时返回 std::nullopt

◆ getPositionsByAccount()

std::vector< Position > fix40::PositionManager::getPositionsByAccount ( const std::string &  accountId) const

获取账户所有持仓

Parameters
accountId账户ID
Returns
持仓列表

◆ getTotalProfit()

double fix40::PositionManager::getTotalProfit ( const std::string &  accountId) const

获取账户总浮动盈亏

Parameters
accountId账户ID
Returns
总浮动盈亏

◆ hasPosition()

bool fix40::PositionManager::hasPosition ( const std::string &  accountId,
const std::string &  instrumentId 
) const

检查是否有持仓

Parameters
accountId账户ID
instrumentId合约代码
Returns
有持仓返回 true

◆ openPosition()

void fix40::PositionManager::openPosition ( const std::string &  accountId,
const std::string &  instrumentId,
OrderSide  side,
int64_t  volume,
double  price,
double  margin 
)

开仓

增加持仓量,计算新的持仓均价。

Parameters
accountId账户ID
instrumentId合约代码
side买卖方向(BUY=多头,SELL=空头)
volume开仓数量
price开仓价格
margin占用保证金
均价计算
新均价 = (原均价 × 原持仓 + 开仓价 × 开仓量) / (原持仓 + 开仓量)

◆ operator=()

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

◆ size()

size_t fix40::PositionManager::size ( ) const

获取持仓数量

Returns
持仓记录数量

◆ updateAllProfits()

void fix40::PositionManager::updateAllProfits ( const MarketDataSnapshot snapshot,
int  volumeMultiple 
)

更新指定合约所有持仓的浮动盈亏

Parameters
snapshot行情快照
volumeMultiple合约乘数

◆ updateProfit()

double fix40::PositionManager::updateProfit ( const std::string &  accountId,
const std::string &  instrumentId,
double  lastPrice,
int  volumeMultiple 
)

更新指定持仓的浮动盈亏

Parameters
accountId账户ID
instrumentId合约代码
lastPrice最新价
volumeMultiple合约乘数
Returns
更新后的总浮动盈亏
Here is the call graph for this function:

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