一、仓位查询
1、仓位查询API
virtual RESULT QueryAccountPosition(const char* accountId, int nReqId) = 0 ;
virtual void OnQueryAccountPosition(const char* pAccount, EES_AccountPosition* pAccoutnPosition, int nReqId, bool bFinish);
2、仓位计算
EES_AccountPosition字段如下:
EES_Account m_actId:账户
EES_Symbol m_Symbol:合约代码
EES_PosiDirection m_PosiDirection:多空方向,多头(1),空头(5)
unsigned int m_InitOvnQty:隔夜仓初始数量,不会变化
unsigned int m_OvnQty:当前隔夜仓数量,可以为0
unsigned int m_FrozenOvnQty:冻结的昨仓数量
unsigned int m_TodayQty:当前今仓数量,可能为0
unsigned int m_FrozenTodayQty:冻结的今仓数量
double m_OvnMargin:隔夜仓占用保证金
double m_TodayMargin:今仓占用的保证金
double m_PositionCost:持仓成本
EES_HedgeFlag m_HedgeFlag:仓位对应的投机套利标志
REM持仓查询结果会根据账户合约的持仓多空方向分批进行推送,m_PosiDirection字段值为EES_PosiDirection_long(1)表示多头持仓,EES_PosiDirection_short(5)表示空头持仓。
LongPosition = m_TodayQty
ShortPosition = m_TodayQty
LongOpenPosition = m_TodayQty - m_OvnQty
ShortOpenPositon = m_TodayQty - m_OvnQty
YdPosition = m_InitOvnQty
二、实时仓位计算
REM成交回报通过OnOrderExecution推送。
virtual void OnOrderExecution(EES_OrderExecutionField* pExec);
EES_UserID m_Userid:UserID
EES_Nanosecond m_Timestamp:成交时间,从1970年1月1日0时0分0秒开始的纳秒时间
EES_ClientToken m_ClientOrderToken:订单token
EES_MarketToken m_MarketOrderToken:REM订单号
unsigned int m_Quantity:订单成交量
double m_Price:订单成交价
EES_MarketToken m_ExecutionID:订单成交号(TAG 1017)
EES_MarketExecId m_MarketExecID:交易所成交号
基于成交回报的EES_ClientToken m_ClientOrderToken字符串格式化的订单引用OrderRef维护订单状态,根据订单状态OrderStatus的InstrumentID和OrderSide确定合约及其多空持仓、平仓,实时计算合约仓位信息。
在计算合约冻结仓位数量时,可以在OnOrderAccept增加合约冻结仓位数量,在OnOrderMarketReject、OnOrderExecution或OnOrderCxled减少合约冻结仓位数量,需要根据订单状态开平标识区分多空开平标识。