關於期貨交易CTP介面的五檔行情接收,和設定實現
就像2020年總結提到,最近想在中高頻策略搞搞。對於高頻交易,如果有深度行情當然是必須的,看到說上期所五檔行情免費提供,而且我用其他行情軟體可以查到,就想在VNPY儲存到資料庫先研究下。有點發現,寫下來記錄下。
首先看了下程式碼,VNPY的ctp_gateway已經支援五檔行情接收,也不需要什麼配置,但是沒有發現五檔行情資料,無論是介面端還是資料庫。
然後研究下,因為 ctp_ gateway行情接收是採用繼承介面被呼叫的模式,是由CTP API工作執行緒驅動;沒法被直接debug,倒是可以直接插入print方法輸出。發現是有返回值,但是是1.79769313486232e+308這樣的溢位值,被一個VNPY專門寫靜態方法adjust_price給過濾掉了。順便說下,1.9.2版本也實現ctp五檔行情讀取,不過要改改 ctp_ gateway程式碼,把上期所加入。
我想是不是VNPY封裝的CTP介面太老呢,不支援呢,因為看Github歷史記錄是2年前更新的。就研究了下CTP-API,發現原來是由下面幾個點要注意,稍微說下。
首先按照CTP-API介面文件說的支援的通訊模式有三種:對話通訊模式,私有通訊模式,廣播通訊模式,
- 對話通訊模式
對話通訊模式是指由會員端主動發起的通訊請求。該請求被交易所端接收和處理,並給予響應。例如報單、查詢等。這種通訊模式與普通的客戶/伺服器模式相同。CTP-API中的命名Req------或者ReqQry------這樣都是發起API
- 私有通訊模式
私有通訊模式是指交易所端主動,向某個特定的會員發出的資訊。例如成交回報等,一般是On-----這樣名字,也是上面提到繼承介面被CTP呼叫。
- 廣播通訊模式(公有流)
廣播通訊模式又稱公有流,是指交易所端主動,向市場中的所有會員都發出相同的資訊。例如公告、市場公共資訊等。
但是,在CTP-API文件裡面很明確的說明,五檔行情是使用組播模式,針對同一組的機器進行廣播。
二代組播行情(下文簡稱二代行情):交易所以組播方式提供的實時五檔行情。因為是組播,所以接收端必須在內部網路並且要加入組播組。
目前交易所不允許投資者直接連線交易所報盤網去接收組播行情,如果期貨公司將行情轉發出來給投資者使用,投資者便能享受到快速的組播行情。我和我期貨公司溝通,必須要把機器放在期貨公司委託機房才可以接收轉發組播的五檔行情。 這邊補充下,查了些文件,組播也可以在公網搞,但是因為UDP沒有確認,容易掉包,CTP-API提供增量方法來保證針對這個情況加以彌補,但是很少期貨公司提供公網組播,比較吃了不討好,如果那個提供我就去了,哈。
就算機器放在託管機房了,還有一個地方要設定,就是設定訂閱組播行情前置,CTP-API方法如下
static CThostFtdcMdApi *CreateFtdcMdApi(const char *pszFlowPath = "", const bool bIsUsingUdp=false, const bool bIsMulticast=false);
各型別行情欄位組合如下:
bIsUsingUdp | bIsMulticast | |
---|---|---|
TCP行情前置 | false | false |
UDP行情前置 | true | false |
組播行情前置 | true | true |
那麼說,五檔行情時候必須引數 bIsUsingUdp和 bIsMulticast都為True才可以。
我看了下VNPY 2.1.8的ctp-api,vnctpmd.h標頭檔案的介面是createFtdcMdApi(string pszFlowPath = ""),沒有提供 bIsUsingUdp和 bIsMulticast引數錄入。可能是vnpy封裝的 CTP-API的版本太老,因為6.3.15api中的好像最早版本的行情部分並不支援二代,必須自己拼接。
總結下,就是要拿到免費五檔行情,需要機器放在託管機房,另外ctp行情訂閱必須把 bIsUsingUdp和 bIsMulticast都為True,對於VNPY需要重新封裝以下 CTP-API,更新下ctp_gateway。
參考了這篇文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2753148/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 介面的定義和實現
- 現貨期權期貨交易所開發(詳情)丨現貨期權期貨交易所繫統開發(PHP/JAVA開發)PHPJava
- 合約交易和現貨交易的區別 | 現貨合約交易系統模式開發定製部署模式
- VNPY 單品種期貨的網格交易策略的實現
- 現貨期權交易所繫統(成熟原始碼)丨現貨期權交易所繫統開發(方案)原始碼
- 數字貨幣現貨交易方式 | 數字貨幣現貨交易模式系統開發定製部署模式
- 現貨期權交易所開發詳情丨現貨期權交易所繫統開發(原理及邏輯)
- 現貨期權交易所開發案例原始碼丨現貨期權交易所繫統開發(海外版)原始碼
- 關於PHP.ini檔案的設定PHP
- 關於利用jQuery實現愛奇藝裡面的滑鼠移入改變當前頁面的功能的實現原理jQuery
- GitHub Wiki 頁面的新增和設定Github
- 關於node實現檔案上傳
- 現貨期權合約交易所開發模板丨現貨期權合約交易所繫統開發技術說明及方案
- 數字貨幣比特幣以太坊買賣五檔行情資料API介面比特幣API
- 關於抽象類和介面的初步理解抽象
- 怎麼用VNPY CTP 模擬櫃檯來實現CTP 程式TICK級回測
- 現貨期權交易所繫統開發(多語言)丨現貨期權交易所繫統開發(詳細邏輯及原始碼)原始碼
- 現貨期權期貨數字貨幣秒合約交易所繫統開發(開發案例及原始碼)原始碼
- “進化與適應”:除期貨交易外,高盛可能將涉足加密貨幣交易加密
- 現貨期權交易系統開發原始碼案例|秒合約原始碼
- 關於locale的設定
- 【乾貨】遊戲介面設計 (五)表現設計遊戲
- 英國加密貨幣交易所將推出Litecoin期貨加密
- IE 相容模式 設定 Meta Compatible 和 Iframe 子頁面的關係模式
- 白雲龍期貨投資-第五講
- 長線交易與短線交易的最本質區別(期貨交易)(ZT)
- 致力於通過演算法與交易系統致力於實現業務各個方面的自動化演算法
- 經典量化策略——做市商交易(期貨)
- 高盛將開始比特幣期貨交易比特幣
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- 五礦期貨:NebulaGraph 圖資料庫在金融期貨行業的應用與實踐探索資料庫行業
- 現貨期權合約交易所開發正式版丨現貨期權合約交易所繫統開發(詳情規則)及案例原始碼原始碼
- 現貨量化交易機器人開發穩定版丨現貨量化交易機器人系統開發(成熟及方案)機器人
- Comparable介面的實現和使用
- 關於靜態檔案目錄與模板引用和Nginx location塊的適配設定Nginx
- 期貨量化合約交易系統開發多少錢一套?(期貨量化合約交易系統開發流程)
- MySQL 關於Table cache設定MySql
- 關於定時器週期、頻率等相關計算定時器