在同花順等軟件中有推送全市場的現手、增倉、開平等數據。但根據前面《系列之三》的學習,我們知道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日起統一調整爲單邊計算。下面的計算還是按照目前的雙邊來說明的。
圖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手。
爲了便於對手單的理解,這裏再給出一些示例:
圖2 對手單計算示例
至此,我們根據上文提及的表格與公式就能計算出現手、增倉等相關數據了。
全部的實現邏輯都可以在公衆號後臺回覆pyctp得到!
往期推薦