ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-05 21:02:27  阅读:500  来源: 互联网

标签:冻结 CTP FTDC THOST 仓位 Position 报单 Close Hello


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

一、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
    }
}

标签:冻结,CTP,FTDC,THOST,仓位,Position,报单,Close,Hello
来源: https://blog.51cto.com/u_9291927/2984697

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有