CTP程序化交易入门系列之五:现手、增仓、开平、对手盘计算

在同花顺等软件中有推送全市场的现手、增仓、开平等数据。但根据前面《系列之三》的学习,我们知道API中推送的行情数据结构体CThostFtdcDepthMarketDataField 中并无这些字段。而且CTP平台对接的交易所行情源和这些客户端所对接的行情源基本是一致的,那客户端的这些数据哪来的呢?

其实这些数据都是可以根据CTP API接口自己计算得到,只需要用到CThostFtdcDepthMarketDataField 结构中的Volume,OpenInterest,LastPrice,AskPrice1,BidPrice1这5个字段就可以。

下面就来详细讲讲(全文代码可在公众号后台回复pyctp获取)。

一、 现手和增仓

现手是指当前两个行情切片之间的成交量,增仓是指对应成交量增加的持仓量。现手是大于等于0的,但是增仓却可正可负。

目前CTP行情的推送是500ms一次切片,其中Volume和OpenInterest是累计量,所以根据同一合约的前后两笔行情就可以计算出现手、增仓,如下(表格1):

现手 volume_delta = 后一笔Volume - 前一笔volume
增仓 open_interest_delta = 后一笔OpenInterest - 前一笔OpenInterest 

                                                                                表格1 现手、增仓计算

 

二、 开平

有了上面的现手和增仓,我们就能计算出开平(不带方向),如下(表格2):

性质 现手与增仓 含义
双开

现手=增仓>0

多头和空头同时开仓

开仓

现手>增仓>0

主动开仓数量大于平仓数量

平仓

现手> (-增仓) >0

主动平仓数量大于开仓数量

换手

现手>增仓=0

多头互换或者空头互换仓位

双平

现手+增仓=0

多头和空头同时平仓

未知

现手=增仓=0

异常情况,仅为记录

                                                                   表格2 性质、现手、增仓公式及含义

 

有了(表格2)后,我们还需要知道价格趋势才能计算出方向,然后才能计算出真正的开平。根据价格比较我们可以计算出当前成交时价格是向上还是向下,如下(表格3):

方向 价格条件
向上

后一笔最新价LastPrice >= 前一笔卖一价AskPrice1

向下

后一笔最新价LastPrice <= 前一笔买一价BidPrice1

向上

后一笔最新价LastPrice >= 后一笔卖一价AskPrice1

向下

后一笔最新价LastPrice <= 后一笔买一价BidPrice1

不变 除上面四种外

                                                                           表格3 价格方向与条件

 

现在有了(表格2)和(表格3)后,就可以计算出真正的开平了。表格2中性质有6种,表格3中方向有3种,所以一共有18种开平组合。如下:

性质、方向 开平

换手,向上

多换,红色

换手,向下

空换,绿色

双开,向上

双开,红色

......

......

平仓,向下

多平,绿色

                                                                     表格4 性质、方向与开平

 

三、 对手单

先要说明一点,按证监会要求,期货市场数据统计将从2020年1月1日起统一调整为单边计算。下面的计算还是按照目前的双边来说明的。

 

CTP程序化交易入门系列之五:现手、增仓、开平、对手盘计算_第1张图片

               图1 20191015夜盘数据

 

这里以上图中第一单为例:

1. 看性质: 空平意味着单子是由空头主动平仓引起的

2. 再价格: 空头买入平仓,成交价格为卖出价,价格向上

3. 看成交: 72手(单边成交36手,意味着空头主动买入平仓36手)

4. 看增仓: -56手(单边减持28手,意味着28手空头买入平仓和28手多头卖出平仓)

5. 所以对手单是28手多头卖平,36-28=8,这8手为空头开仓与空头平仓互换

 

总结:

买方:36=28+8 ,28是影响仓位的空头买入平仓, 8是不影响仓位的空头买入平仓

卖方:36=28+8 ,28是影响仓位的多头卖出平仓, 8是不影响仓位的空头卖出开仓

 

总结出公式(1)如下:

设S是对手单中开平方向相同的操作,O是对手单中开平方向相反的操作。

S+O=volume_delta/2

S-O=abs(open_interest_delta )-volume_delta/2

解以上方程得到:

S=abs(open_interest_delta )/2

O=volume_delta/2 - S

 

在上例中,S=abs(-56)/2 = 28, O=72/2 - 28 =8。所以与空平方向相同的多头卖出平仓28手,方向相反的空头卖出开仓8手。

 

为了便于对手单的理解,这里再给出一些示例:

CTP程序化交易入门系列之五:现手、增仓、开平、对手盘计算_第2张图片

                                                        图2 对手单计算示例

 

至此,我们根据上文提及的表格与公式就能计算出现手、增仓等相关数据了。

 

全部的实现逻辑都可以在公众号后台回复pyctp得到!

 

往期推荐

● CTP程序化交易入门系列之一:准备

● CTP程序化交易入门系列之二:API基本架构及初始化

● CTP程序化交易入门系列之三:获取实时行情及K线合成

● CTP程序化交易入门系列之四:行情订阅常见问题解答

● CTP 4097错误根源

● Level-1、Level-2、快照数据、Tick数据的区别你都了解吗?

● 什么是穿透式监管,需要投资者做什么?

你可能感兴趣的:(程序化入门,CTP)