2017年10月30日 星期一

HKFE IDC RawData Q&A

Q: 我在 MDC 看不到 HCEI.1711/1806 的成交資訊, 但我確定有, 我要如何利用 RawData 找出我想要的價差商品 RawLog, 去詢問 IDC 為什麼沒有成交資訊 ?

A:
首先, 我們先確定幾個資訊
* HKFE  Level 1 的  IDC SrcID:710  (L2 SrcID=876)
* HCEI 在 IDC 原名為 HHI
* HKFE價差商品代碼, 是用  5=Sn:REFCODE 的設計

好, 接下來我們要找出我們要的東西, 步驟如下:
※ 你需要使用過 x_dsrawkit

1. 找出商品代碼(Sn:REFCODE) 
 我們要先用 IDC Token 3172 來確定流水代碼
 所以要先查 3172=HHIX7/M8  (即 HCEI.1711/1806), 指令如下:
 ./x_dsrawkit -f ../log/yyyymmdd/mdcsd_hkfe_0.taw -ds dsIDC -t -sdt -and '|3172=HHIX7/M8'
 理論上會列出二筆快照, 分別是 5=S1:38408097 以及 5=S2:38408097 的二個交易時段商品

2. 找出這二個商品的所有 Level 1 資訊
 排除線路 Level2 (Token 3) 是 SrcID: 876  , 指令如下:
 ./x_dsrawkit -f ../log/yyyymmdd/mdcsd_hkfe_0.taw -ds dsIDC -t -sdt -o hhix7m8.txt -or '5=S1:38408097' '5=S2:38408097' -drop '3=876'

3. 從濾出的 L1 資料文字檔(hhix7m8.txt) 尋找成交資料
 IDC 成交資訊必須同時有以下 Token 8(成價), 9(成量), 22(總量)
 cat hhix7m8.txt | grep '|8=' | grep '|9=' | grep '|22='
 果然沒有半筆, 就可以拿著這份資料去找 IDC 理論了


2017年10月29日 星期日

關於 RawData


Q: 如何產生 RawData 檔?
A: mdcsd 有提供一個 write_rawdata 的服務給來源物件
 由 mdcsd  .conf 的 MDCS.RawData 決定

Q: MDCS.RawData 設定有 "原始檔" 和 "加值檔" 有什麼差異?
A: 原始檔 .raw 寫下純原始內容檔
 加值檔 .taw 寫下含 "時間戳" 的內容檔
 
Q: RawData 存放在那?
A: 存放在當日 LOG 目錄 (log/yyyymmdd) 中

Q: RawData 保留多久?
A: 雖然我們存放在 log 日目錄中,但 RawData 的資料量極大
 所以將以 主服務(mdcsvcd) conf 的 Env.RawReserve 為主要維護天數設定
 當然超過 conf  Env.LogReserve 一樣會被標準保留 LOG 天數刪除

Q: RawData 檔案名稱為?
A: 主檔名格式為  mdcsd_[confname]_#  (# 為多線路的流水號)
 若程式重啟,為避免累加至已存檔案,有破格式問題
 所以會出現 "之號" 檔案,格式為 mdcsd_[confname]_#-## (## 流水號)

Q: RawData 如果讀取?
A: .raw 的內容都是上手原始的傳送資料,因此您可以自己解格式讀取
 .taw 的格式,因為包含時間戳,千萬不可直接解讀
 若您需要讀取 .taw 可應用 x_dsrawkit 工具,轉換為 .raw 檔的模式

Q: x_dsrawkit 工具在那?
A: 位於 mdc/bin 目錄中

Q: 如何將 .taw 轉換為 .raw
A: ./x_dsrawkit -f [來源.taw] -o [目標.raw]

Q: x_dsrawkit 還有什麼功能?
A: 支援叫用原 ds(DataSource) 協助解析為文字檔案
 支援解析後字串 "過濾" 與 "拋棄" 的功能
 .taw 檔案,支援匯出時間範圍條件
 其他細節 您可叫起 ./x_dsrawkit , 會有參數列表

2017年10月10日 星期二

dsIDC SGX 最佳買賣檔位處理

IDC 的新交所(SGX) 委託簿(SrcId=578) 為全委託簿(MBO)

所以存在著開盤前委託簿 Bid>Ask 的現象

為了讓開盤前可以呈現出最佳買賣價

dsIDC 支援了二個設定, 供 MBO 類型來源, 做最佳買賣檔位處理依據, 如下:

設定: DS.BestDepthBA
說明: 最佳買賣檔處理開關
參數:  0 = 關閉
           1 = 開啟

設定: DS.BestDepthCMT
說明: 最佳買賣檔處理 ControlMessageType 範圍
參數: 0 = NonCxl  (不可刪改單)
          1 = NonCxl + PreOpen (重新收單)
          2 = NonCxl + PreOpen + OrderCxl (清除所有訂單)


以下以 SGX CN 為例, 我們來看看相關時序關係:

8:45 PreOpen
8:58 NonCxl
9:00 Open
.
.
16:50 PreOpen
16:58 NonCxl
17:00 Open

依參數 DS.BestDepthCMT 來看時間範圍
若為0, 作動時間為 8:58-9:00 & 16:58-17:00
若為1, 作動時間為 8:45-9:00 & 16:50-17:00
若為2, 作動同 1 , 因為 SGX 沒有清除訂單的 CMT

2017年10月5日 星期四

dsPATS 工作流程說明

單元: dsPATS
服務: mdcsd

註: [ ] 中表示 LOG 樣本


{啟動部份}

 1. mdcsd 服務啟動
   [S ---< Market Data Center Server (MDC Group) Version:1.6.0.8 running >---]

 2. mdcsd 載入 dsPATS 並啟動
   [S Data source 'dsPATS' initial.]

 3. mdcsd 呼叫 dsPATS 啟動 (dsPATS 回報狀態)
   [S DS State:CallStart ds_start call]
   [S Data source 'dsPATS' started]
   [S DS Initialised PATs API ok!]

 4. dsPATS 載入 PATSAPI.dll
   [S DS PATs API Library load success]
 
 5. dsPATS 呼叫 PATSAPI 環境設定
    ptEnable(Config DS.Enable)
    ptSetHostHandShake(Config DS.HostHandShake_Interval, Config DS.HostHandShake_Timeout)
    ptSetHostReconnect(Config DS.HostReconnect)
    ptSetPriceAddress(Config DS.PriceIPAddress, Config DS.PriceIPSocket)
    ptSetHostAddress(Config DS.HostIPAddress, Config DS.HostIPSocket)
    ptSetPriceReconnect(Config DS.PriceReconnect)
    ptSetInternetUser(Config DS.InternetUser)
    ptNotifyAllMessages(Y)
    ptReady()
    ptSuperTASEnabled()
    >>失敗(以上任一) 都將寫下 Error Log, 並中止流程
      [S DS State:Stop PATs API Library start failed]
    >>成功(全部), 進行至 [6.]
      [S DS PATs API Library start success]


{Host連線部份}
     
 6. PATSAPI 提供連線事件 cb_HostLinkStateChange
   >>當出現 Connected 時, 進行至 [7.]
     [S DS Host link state change prev=2(Connecting) now=3(Connected)]
   >>其他, 進行至 [6.] 繼續等待
     [S DS Host link state change prev=#($desc) now=#($desc)]

 7. dsPATS 回報狀態改變為 Connected
   [S DS State:Connected PATs Host link ready]


{登入部份}

 8. dsPATS 呼叫登入 PATSAPI.ptLogOn
   [S DS Try to logon uid:PAZAPIGF]
   >>失敗, 休息2秒, 進行至 [8.] 上限次數3次, 達上次數, 中止流程
     [S DS ptLogOn result=##, retry after 2 sec.]
   >>成功, 正常流程, 不寫任何 LOG
 
 9. PATSAPI 提供登入事件 cb_LogonStatus
    呼叫 ptGetLogonStatus 取得登入狀態
    >>失敗, 中止流程
      [S DS Logon status change #($desc)]
    >>成功, 進行至 [10.]
      [S DS Logon status change 1()]

10. dsPATS 寫下登入資訊, 以及取出某些系統狀態
   [S DS State:LoginOk Logon account=PAZAPIGF success, default=PAZ8000]
   [S DS EnabledFunctionality Function:2E1 Software:0]


{商品資訊部份}

xx. PATSAPI 提供下載商品事件 cb_DataDLComplete
   [S DS Data download complete]


{Price連線部份}
 
11. PATSAPI 提供行情連線事件 cb_PriceLinkStateChange 
   >>當出現 Connected 時, 進行至 [12.]
     [S DS Price link state change prev=2(Connecting) now=3(Connected)]
   >>其他, 進行至 [11.] 繼續等待
     [S DS Price link state change prev=#($desc) now=#(#desc)]
   
   
{行情處理部份}
   
12. dsPATS 開始列舉商品並訂閱
    依 ptCountContracts 數量, 叫用 ptGetExtendedContract 取出合約資訊
    再依 Config MDCS.Exch + mdcmd CommodityRoot + mdcmd SourceDetail 條件判斷是否要訂閱處理行情
   

{無限等待事件化處理}
 
xx. PATSAPI Host連線變化 cb_HostLinkStateChange
    進行至 [6.]

xx. PATSAPI Price連線變化 cb_PriceLinkStateChange
    進行至 [11.]

xx. PATSAPI 更新報價 cb_PriceUpdate
    呼叫 ptGetPriceForContract 取出行情, 推入 mdcsd 處理

xx. PATSAPI 更新DOM cb_DOMUpdate
    呼叫 ptGetPriceForContract 取出行情, 推入 mdcsd 處理

xx. mdcsd 呼叫中斷服務
   [S DS State:CallStop Call stop]
   [S DS Call PATs API ptLogOff!]
   [S DS State:Stop Stop]
   [S Data source 'dsPATS' stoped]
   [S Data source 'dsPATS' free.]
   中止服務

tspubtm 壓測工具

tspubtm 壓測工具的測試模型, 如下: tspubtm(send)  ---tcp-->  MDC ---tcp-->  tspubtm(recv)  ※ tspubtm(send) /  tspubtm(recv) 須為同設備       為了更精確的計算時差...