当前位置: 首页 > 工具软件 > CTP > 使用案例 >

Hello CTP(五)——CTP仓位计算

燕永昌
2023-12-01

一、CTP仓位

LongOpenPosition:多头开仓量

LongOpenFrozen:多头开仓冻结

LongYdPosition:多头昨仓

LongTdPosition:多头今仓

LongCloseTdFrozen:多头平今仓冻结

LongCloseYdFrozen:多头平昨仓冻结

ShortOpenPosition:空头开仓量

ShortTdPosition:空头今仓

ShortYdPosition:空头昨仓

ShortCloseTdFrozen:空头平今仓冻结

ShortCloseYdFrozen:空头平昨仓冻结

LongFrozenAmount:多头冻结金额

ShortFrozenAmount:空头冻结金额

FrozenMargin:冻结保证金

FrozenCommission:冻结手续费

二、仓位查询

1、仓位查询

交易系统启动时会获取账号的当前持仓状况,只能通过查询CTP得到。交易过程中如果有报单或者成交,会有相应的持仓冻结及仓位变化,由于CTP查询流控以及确保仓位更新实时性,通常会自己根据订单回报更新仓位状态。

2、仓位查询API

仓位查询请求API:

virtual int ReqQryInvestorPosition(CThostFtdcQryInvestorPositionField *
            pQryInvestorPosition, int nRequestID) = 0;

仓位回报回调函数:

virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *
            pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, 
            int nRequestID, bool bIsLast);

3、仓位计算

CThostFtdcInvestorPositionField返回仓位字段如下:

BrokerID:经纪公司代码

InvestorID:投资者代码

PosiDirection:持仓多空方向

HedgeFlag:投机套保标志

PositionDate:持仓日期

YdPosition:上日持仓

Position:当前持仓

LongFrozen:多头冻结

ShortFrozen:空头冻结

LongFrozenAmount:开仓冻结金额

ShortFrozenAmount:开仓冻结金额

OpenVolume:开仓量

CloseVolume:平仓量

OpenAmount:开仓金额

CloseAmount:平仓金额

PositionCost:持仓成本

PreMargin:上次占用保证金

UseMargin:占用保证金

FrozenMargin:冻结保证金

FrozenCash:冻结资金

FrozenCommission:冻结手续费

CashIn:资金差额

Commission:手续费

CloseProfit:平仓盈亏

PositionProfit:持仓盈亏

PreSettlementPrice:上次结算价

SettlementPrice:本次结算价

SettlementID:结算编号

OpenCost:开仓成本

ExchangeMargin:交易所保证金

CombPosition:组合成交形成持仓

CombLongFrozen:组合多头冻结

CombShortFrozen:组合空头冻结

CloseProfitByDate:逐日盯市平仓盈亏

CloseProfitByTrade:逐笔对冲平仓盈亏

TodayPosition:今日新开仓

MarginRateByMoney:保证金率

MarginRateByVolume:保证金率(按手数)

StrikeFrozen:执行冻结

StrikeFrozenAmount:执行冻结金额

ExchangeID:交易所代码

YdStrikeFrozen:执行冻结昨仓

InvestUnitID:投资单元代码

InstrumentID:合约代码

CTP持仓查询结果会根据账户合约的持仓多空方向分批进行推送,PosiDirection字段值为THOST_FTDC_PD_Long('2')表示多头持仓,THOST_FTDC_PD_Short('3')表示空头持仓。

LongPosition = Position

ShortPosition = Position

LongOpenPosition = OpenVolume

ShortOpenPositon = OpenVolume

LongClosePosition = CloseVolume

ShortClosePosition = CloseVolume

CurrentYdPosition = Position - TodayPosition

YdPosition = YdPosition

三、实时仓位计算

1、平仓操作

CTP成交回报和报单回报返回数据中,Direction字段值为THOST_FTDC_D_Buy('0')表示买入,THOST_FTDC_D_Sell('1')表示卖出。OffsetFlag开平标识字段值为THOST_FTDC_OF_Open('0')表示开仓,THOST_FTDC_OF_Close('1')表示平仓,THOST_FTDC_OF_ForceClose('2')表示强平,THOST_FTDC_OF_CloseToday('3')表示平今,THOST_FTDC_OF_CloseYesterday('4')表示平昨,THOST_FTDC_OF_ForceOff('5')表示强减,THOST_FTDC_OF_LocalForceClose('6')表示本地强平。

中金所平仓不分平今仓和平昨仓,一旦开仓,多头或空头的所有昨仓将会视为今仓,因此平仓操作成交回报只会返回THOST_FTDC_OF_Close('1'),需要根据Direction以及合约持仓的LongTdPosition、ShortTdPosition进行判断。如果LongTdPosition、ShortTdPosition大于0,平仓操作为平今仓,否则为平昨仓。

2、成交回报仓位计算

virtual void OnRtnTrade(CThostFtdcTradeField *pTrade);

CThostFtdcTradeField字段如下:

BrokerID:经纪公司代码

InvestorID:投资者代码

OrderRef:报单引用

UserID:用户代码

ExchangeID:交易所代码

TradeID:成交编号

Direction:买卖方向

OrderSysID:交易所报单编号

ParticipantID:会员代码

OffsetFlag:开平标识

HedgeFlag:投机套保标识

Price:价格

Volume:数量

TradeType:成交类型

TraderID:交易员代码

OrderLocalID:本地报单编号

SettlementID:结算编号

InstrumentID:合约代码

if(pTrade->Direction == THOST_FTDC_D_Buy && pTrade->OffsetFlag[0] == THOST_FTDC_OF_Close)
{
    if(ShortTdPosition > 0)
    {
        // Close Short Today Position
    }
    else
    {
        // Close Short YesToday Position
    }
}
else if(pTrade->Direction == THOST_FTDC_D_Sell && pTrade->OffsetFlag[0] == THOST_FTDC_OF_Close)
{
    if(LongTdPosition > 0)
    {
        // Close Long Today Position
    }
    else
    {
        // Close Long YesToday Position
    }
}

3、报单回报仓位计算

virtual void OnRtnOrder(CThostFtdcOrderField *pOrder);

CThostFtdcOrderField字段如下:

BrokerID:经纪公司代码

InvestorID:投资者代码

OrderRef:报单引用

UserID:用户代码

OrderPriceType:报单价格条件

Direction:买卖方向

CombOffsetFlag:组合开平标识

CombHedgeFlag:组合投机套保标识

LimitPrice:价格

VolumeTotalOriginal:数量

TimeCondition:有效期类型

VolumeCondition:成交量类型

MinVolume:最小成交量

ContingentCondition:触发条件

StopPrice:止损价

ForceCloseReason:强平原因

RequestID:请求编号

OrderLocalID:本地报单编号

ExchangeID:交易所代码

ParticipantID:会员代码

TraderID:交易员代码

OrderSubmitStatus:报单提交状态

SettlementID:结算编号

OrderSysID:交易所报单编号

OrderStatus:报单状态

OrderType:报单类型

VolumeTraded:今成交数量

VolumeTotal:剩余数量

FrontID:前置编号

SessionID:会话编号

StatusMsg:订单状态信息

AccountID:资金帐号

InstrumentID:合约代码

VolumeTraded:今成交数量

VolumeTotal:剩余数量

VolumeTotalOriginal:数量

if(pOrder->Direction == THOST_FTDC_D_Buy && 
            pOrder->CombOffsetFlag[0] == THOST_FTDC_OF_Close)
{
    if(ShortTdPosition > 0)
    {
        // Close Short Today Position
    }
    else
    {
        // Close Short YesToday Position
    }
}
else if(pOrder->Direction == THOST_FTDC_D_Sell && 
        pOrder->CombOffsetFlag[0] == THOST_FTDC_OF_Close)
{
    if(LongTdPosition > 0)
    {
        // Close Long Today Position
    }
    else
    {
        // Close Long YesToday Position
    }
}

 类似资料: