GMDS

輕鬆擷取RMDS的資料作即時分析或運用

張貼者:2017年11月20日 下午10:59Wei-Xiuang Wang   [ 已更新 ]


目前於RMDS上的應用架構通常為

 ( <--- 箭頭方向為由Client連線Server )
路透主機 <---...--- [ RMDS-Proxy <--- PatsEmu-RMDS ] <--- 各種應用

其中 PatsEmu-RMDS 透過 YTSetFile 的設定作商品代碼轉碼規劃, 產生路透代碼描述的 DataSetFile ,
之後轉交 RMDS-Proxy 將所需要的商品代碼註冊至路透主機, 透過RMDS-Proxy接收所有行情訊息提供DTS服務內容,
而PatsEmu輸出的信息是仿PATS應用所需要的各種資訊

於相同的架構模式下也可使用TSHS-RMDS來運作提供TSHS服務,
輸出的信息則是完整的RMDS的所有FID資訊, 只是TSHS-RMDS僅設計使用路透代碼描述的 DataSetFile 的設定方式,
一樣的把 DataSetFile 設定內容轉交 RMDS-Proxy 將所需要的商品代碼註冊至路透主機, 透過RMDS-Proxy接收所有行情訊息

現在則是要說明其實架構是可以這樣運用的,
在一個運作中的PatsEmu-RMDS系統下, 資訊持續運作的情形下,
可以旁接API小程式或是TSHS-RMDS 去連結 RMDS-Proxy,
而RMDS-Proxy會把原本輸出給 PatsEmu-RMDS 的資訊 同時輸出給連上來的其他連線,
那麼就等同能在不影響原本的運作之下, 擷取路透當前輸出的所有訊息

圖中 RproxyTest 就是用API(PktEvCdll.dll)的範例,將所有路透的資訊直接秀出來
(於TSHS的說明頁中有 PktEvCdll API 連線 RMDS-Proxy 的處理範例 )

雖然API也可要求註冊商品, 不過這裏著重在側接資料, 因此以不發出任何要求的方式為主,
圖中可以看到 RproxyTest 與 PatsEmu-RMDS 都是連往 port 15306

現在改用現成的 TSHS-RMDS 直接當作側接工具,
可以複製執行檔到一個空的資料夾, 直接執行後會產生一個預設的 RMDS_DataSetFile.txt 設定,
因為是想要用作側接, 並沒有要要求註冊任何商品, 可把內容中的 '+' 改成 '-' 即可,
-IDN_SELECTFEED/NQH1,NQM1,NQU1,NQZ1
-IDN_SELECTFEED/NQH1m,NQM1m,NQU1m,NQZ1m

或者把內容刪除成空的檔案也行(檔案要留著)

幫 TSHS-RMDS 建立捷徑, 設定執行參數 /Host 127.0.0.1:15306 就可連上指定 RMDS-Proxy
這樣就能透過 TSHS-RMDS 的介面直接檢視所有商品的FID欄位內容了~

而TSHS架構的好處就是能把資料流完整分時保存下來, 不僅可供作即時架構中斷後的回補機能, 也能作為模擬與重複使用等其他應用,
所以於捷徑上可再增加執行參數 /Log 15306\ 便可以開始紀錄保存由 RMDS-Proxy 的所有訊息於工作路徑下指定的 15306\ 資料夾中

之後使用相同的 PktEvCdll API 連線, 不過要改連 TSHS-RMDS, 稍微設計一些篩選功能
以2017-11-20的 STWX7 為例, 想對早上08:45(am盤開盤)開始交易的過程進行分析,可從08:00作為進入點
pktevcapi 127.0.0.1:30031 20171120080000,00000000
獲得這樣的資料(每一行路透商品FID資訊 對應一行有解到的想看欄位)
STWX7       :1067=00:30:00,25=403.70,441=403.70,31=1,735=1,3386=20 NOV 2017,3855=1800110,4147=1800110,
 賣: 403.70
STWX7       :3855=1800111,22=402.30,436=402.30,30=1,730=1,4150=1800111,
 買: 402.30
STWX7       :25=403.50,441=403.50,31=1,735=1,3855=1800112,4147=1800112,
 賣: 403.50
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1800114,4147=1800114,
 賣: 376.90
STWX7       :3855=1800138,22=411.00,436=411.00,30=8,730=8,4150=1800138,
 買: 411.00
STWX7       :1067=00:30:02,25=375.90,441=375.90,31=6,735=6,3855=1802138,4147=1802138,
 賣: 375.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1802677,4147=1802677,
 賣: 376.90
STWX7       :25=374.90,441=374.90,31=6,735=6,3855=1802678,4147=1802678,
 賣: 374.90
STWX7       :3855=1803018,1067=00:30:03,22=415.00,436=415.00,30=3,730=3,4150=1803018,
 買: 415.00
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1803209,4147=1803209,
 賣: 376.90
STWX7       :25=373.90,441=373.90,31=6,735=6,3855=1803210,4147=1803210,
 賣: 373.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1803742,4147=1803742,
 賣: 376.90
STWX7       :25=372.90,441=372.90,31=6,735=6,3855=1803744,4147=1803744,
 賣: 372.90
STWX7       :1067=00:30:04,25=376.90,441=376.90,31=40,735=40,3855=1804288,4147=1804288,
 賣: 376.90
STWX7       :25=371.90,441=371.90,31=6,735=6,3855=1804289,4147=1804289,
 賣: 371.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1804832,4147=1804832,
 賣: 376.90
STWX7       :25=370.90,441=370.90,31=6,735=6,
 賣: 370.90
STWX7       :1067=00:30:05,25=376.90,441=376.90,31=40,735=40,3855=1805017,4147=1805017,
 賣: 376.90
STWX7       :25=369.90,441=369.90,31=6,735=6,3855=1805018,4147=1805018,
 賣: 369.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1805358,4147=1805358,
 賣: 376.90
STWX7       :25=368.90,441=368.90,31=6,735=6,
 賣: 368.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1805887,4147=1805887,
 賣: 376.90
STWX7       :25=367.90,441=367.90,31=6,735=6,3855=1805889,4147=1805889,
 賣: 367.90
STWX7       :1067=00:30:06,25=376.90,441=376.90,31=40,735=40,3855=1806438,4147=1806438,
 賣: 376.90
STWX7       :25=366.90,441=366.90,31=6,735=6,3855=1806440,4147=1806440,
 賣: 366.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1806983,4147=1806983,
 賣: 376.90
STWX7       :25=365.90,441=365.90,31=6,735=6,3855=1806984,4147=1806984,
 賣: 365.90
STWX7       :1067=00:30:07,25=376.90,441=376.90,31=40,735=40,3855=1807520,4147=1807520,
 賣: 376.90
STWX7       :25=364.90,441=364.90,31=6,735=6,3855=1807521,4147=1807521,
 賣: 364.90
STWX7       :1067=00:30:08,25=376.90,441=376.90,31=40,735=40,3855=1808067,4147=1808067,
 賣: 376.90
STWX7       :25=363.90,441=363.90,31=6,735=6,3855=1808069,4147=1808069,
 賣: 363.90
STWX7       :25=376.90,441=376.90,31=40,735=40,3855=1808592,4147=1808592,
 賣: 376.90
STWX7       :25=362.90,441=362.90,31=6,735=6,3855=1808594,4147=1808594,
 賣: 362.90
STWX7       :1067=00:30:09,25=376.90,441=376.90,31=40,735=40,3855=1809151,4147=1809151,
 賣: 376.90
STWX7       :25=362.80,441=362.80,31=6,735=6,3855=1809152,4147=1809152,
 賣: 362.80
STWX7       :1067=00:31:30,25=376.90,441=376.90,31=20,735=20,3855=1890035,4147=1890035,
 賣: 376.90
STWX7       :25=362.80,441=362.80,31=3,735=3,3855=1890037,4147=1890037,
 賣: 362.80
STWX7       :3855=2285781,1067=00:38:05,22=431.30,436=431.30,4150=2285781,5=00:38,
 買: 431.30
STWX7       :3855=2287478,22=415.00,436=415.00,4150=2287478,
 買: 415.00
STWX7       :11809=n/a,1704=00:45,7084=3,14260=n/a,3404=403.46,372=403.46,9227=n/a,3132=6696,9994=n/a,9258=n/a,32743=n/a,32=6696,32691=n/a,100=2701546.90,373=146,7085=18,6947=146,8672=692259671968332150,8273=403.10,32741=n/a,5387=3,32694=n/a,11786=n/a,
 *總量* 6696
STWX7       :7084=1,3132=6697,32=6697,100=2701950.00,373=147,7085=19,6947=147,8672=692259671968332151,5387=1,
 *總量* 6697
STWX7       :7084=2,3132=6699,32=6699,100=2702756.20,373=149,7085=20,6947=149,8672=692259671968332152,5387=2,
 *總量* 6699
STWX7       :7084=3,3132=6702,32=6702,100=2703965.50,373=152,7085=21,6947=152,8672=692259671968332153,5387=3,
 *總量* 6702
STWX7       :3132=6705,32=6705,100=2705174.80,373=155,7085=22,6947=155,8672=692259671968332154,
 *總量* 6705
STWX7       :7084=9,3132=6714,32=6714,100=2708802.70,373=164,7085=23,6947=164,8672=692259671968332155,5387=9,
 *總量* 6714
STWX7       :7084=3,3132=6717,32=6717,100=2710012.00,373=167,7085=24,6947=167,8672=692259671968332156,5387=3,
 *總量* 6717
STWX7       :3132=6720,32=6720,100=2711221.30,373=170,7085=25,6947=170,8672=692259671968332157,
 *總量* 6720
STWX7       :7084=2,3132=6722,32=6722,100=2712027.50,373=172,7085=26,6947=172,8672=692259671968332158,5387=2,
 *總量* 6722
STWX7       :7084=5,3132=6727,32=6727,100=2714043.00,373=177,7085=27,6947=177,8672=692259671968332159,5387=5,
 *總量* 6727
STWX7       :7084=8,3404=403.45,372=403.45,3132=6735,32=6735,100=2717267.80,373=185,7085=28,6947=185,8672=692259671968332160,5387=8,
 *總量* 6735
STWX7       :7084=4,3132=6739,32=6739,100=2718880.20,373=189,7085=29,6947=189,8672=692259671968332161,5387=4,
 *總量* 6739
STWX7       :7084=1,3132=6740,32=6740,100=2719283.30,373=190,7085=30,6947=190,8672=692259671968332162,5387=1,
 *總量* 6740
STWX7       :25=376.90,441=376.90,31=20,735=20,
 賣: 376.90
STWX7       :22=407.30,436=407.30,
 買: 407.30
STWX7       :25=390.00,441=390.00,31=17,735=17,
 賣: 390.00
STWX7       :22=407.20,436=407.20,30=9,730=9,
 買: 407.20
STWX7       :22=407.10,436=407.10,30=3,730=3,
 買: 407.10
STWX7       :3855=2700185,22=407.00,436=407.00,4150=2700185,
 買: 407.00
STWX7       :22=405.70,436=405.70,30=7,730=7,
 買: 405.70
STWX7       :22=405.00,436=405.00,30=8,730=8,
 買: 405.00
STWX7       :25=400.00,441=400.00,31=1,735=1,4147=2700185,
 賣: 400.00
STWX7       :3132=6741,32=6741,100=2719686.40,373=191,7085=31,6947=191,8672=692259671968332163,
 *總量* 6741
STWX7       :22=404.30,436=404.30,30=7,730=7,
 買: 404.30
STWX7       :22=404.00,436=404.00,
 買: 404.00
STWX7       :25=400.50,441=400.50,
 賣: 400.50
STWX7       :25=401.80,441=401.80,31=7,735=7,
 賣: 401.80
STWX7       :25=401.90,441=401.90,
 賣: 401.90
STWX7       :22=403.80,436=403.80,30=14,730=14,
 買: 403.80
STWX7       :25=402.20,441=402.20,31=22,735=22,3855=2700186,4147=2700186,
 賣: 402.20
STWX7       :22=403.20,436=403.20,30=8,730=8,
 買: 403.20
STWX7       :22=403.10,436=403.10,30=13,730=13,
 買: 403.10
STWX7       :3132=6742,32=6742,100=2720089.50,373=192,7085=32,6947=192,8672=692259671968332164,
 *總量* 6742
STWX7       :25=403.40,441=403.40,31=7,735=7,
 賣: 403.40
STWX7       :7084=6,3132=6748,32=6748,100=2722508.10,373=198,7085=33,6947=198,8672=692259671968332165,5387=6,
 *總量* 6748
STWX7       :7084=1,3132=6749,32=6749,100=2722911.20,373=199,7085=34,6947=199,8672=692259671968332166,5387=1,
 *總量* 6749
STWX7       :7084=6,3132=6755,32=6755,100=2725329.80,373=205,7085=35,6947=205,8672=692259671968332167,5387=6,
 *總量* 6755
STWX7       :7084=1,3132=6756,32=6756,100=2725732.90,373=206,7085=36,6947=206,8672=692259671968332168,5387=1,
 *總量* 6756
STWX7       :7084=7,3132=6763,32=6763,100=2728554.60,373=213,7085=37,6947=213,8672=692259671968332169,5387=7,
 *總量* 6763
STWX7       :7084=1,3132=6764,32=6764,100=2728957.70,373=214,7085=38,6947=214,8672=692259671968332170,5387=1,
 *總量* 6764
STWX7       :7084=7,3132=6771,32=6771,100=2731779.40,373=221,7085=39,6947=221,8672=692259671968332171,5387=7,
 *總量* 6771
STWX7       :7084=5,3132=6776,32=6776,100=2733794.90,373=226,7085=40,6947=226,8672=692259671968332172,5387=5,
 *總量* 6776
STWX7       :7084=1,3132=6777,32=6777,100=2734198.00,373=227,7085=41,6947=227,8672=692259671968332173,5387=1,
 *總量* 6777
STWX7       :3854=2700170,3900=692259671968332176,18=00:45,4756=1,56=0.00,11=0.00,379=00:45:00,77=4537,3132=6778,12770=n/a,16=20 NOV 2017,178=1,100=2734601.10,6=403.10,32=6778,32696=n/a,14=1,
 -- 00:45:00 --  成交: 403.10 *總量* 6778

STWX7       :178=2,3900=692259671968332177,3132=6780,77=4538,32=6780,100=2735407.30,
 *總量* 6780
STWX7       :3900=692259671968332178,3854=2700177,56=0.07,11=0.30,3132=6782,77=4539,32=6782,100=2736214.10,6=403.40,
 *總量* 6782 成交: 403.40
STWX7       :25=403.30,441=403.30,31=2,735=2,3855=2700233,4147=2700233,
 賣: 403.30
STWX7       :178=1,3900=692259671968332179,3854=2700336,56=0.00,11=0.00,3132=6783,77=4540,32=6783,100=2736617.20,6=403.10,14=2,
 *總量* 6783 成交: 403.10


結果發現, 08:00~08:45 有很多買賣價與成交量資訊, 但是沒有任何成交時間與成交價(FID 6),
可以搜尋log中文字內容 ",6=" 就能找到成交價的部分,
第一筆是發生在路透提供成交時間為 GMT 00:45:00 的地方,
相同的方式分析 STWamX7 所獲得的資料除了總量有固定的差距外, 其於資料幾乎都是一模一樣的,
只是STWam早上會清盤,如果都沒有來成交價,以系統時間與成交量紀錄到的tick在08:45:00之前會是空的成交價之原因,
而STW則是延續pm盤繼續交易,沒有清盤的動作,所以成交價維持在pm盤最後一筆成交的價位
(也因此前面的STWX7的資料並沒有發現 FID 19 或 47 的開盤價)

如果直接觀察 STWamX7 , 就可以發現與STWX7對應的同一筆有 FID 19 的資料, 提供了開盤價位 (與當筆成交價位是一致的)
STWamX7     :1067=00:30:00,25=403.70,441=403.70,31=1,735=1,3386=20 NOV 2017,3855=1800110,4147=1800110,
 賣: 403.70
STWamX7     :3855=1800111,22=402.30,436=402.30,30=1,730=1,4150=1800111,
 買: 402.30
STWamX7     :25=403.50,441=403.50,31=1,735=1,3855=1800112,4147=1800112,
 賣: 403.50
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1800114,4147=1800114,
 賣: 376.90
STWamX7     :3855=1800138,22=411.00,436=411.00,30=8,730=8,4150=1800138,
 買: 411.00
STWamX7     :1067=00:30:02,25=375.90,441=375.90,31=6,735=6,3855=1802138,4147=1802138,
 賣: 375.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1802677,4147=1802677,
 賣: 376.90
STWamX7     :25=374.90,441=374.90,31=6,735=6,3855=1802678,4147=1802678,
 賣: 374.90
STWamX7     :3855=1803018,1067=00:30:03,22=415.00,436=415.00,30=3,730=3,4150=1803018,
 買: 415.00
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1803209,4147=1803209,
 賣: 376.90
STWamX7     :25=373.90,441=373.90,31=6,735=6,3855=1803210,4147=1803210,
 賣: 373.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1803742,4147=1803742,
 賣: 376.90
STWamX7     :25=372.90,441=372.90,31=6,735=6,3855=1803744,4147=1803744,
 賣: 372.90
STWamX7     :1067=00:30:04,25=376.90,441=376.90,31=40,735=40,3855=1804288,4147=1804288,
 賣: 376.90
STWamX7     :25=371.90,441=371.90,31=6,735=6,3855=1804289,4147=1804289,
 賣: 371.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1804832,4147=1804832,
 賣: 376.90
STWamX7     :25=370.90,441=370.90,31=6,735=6,
 賣: 370.90
STWamX7     :1067=00:30:05,25=376.90,441=376.90,31=40,735=40,3855=1805017,4147=1805017,
 賣: 376.90
STWamX7     :25=369.90,441=369.90,31=6,735=6,3855=1805018,4147=1805018,
 賣: 369.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1805358,4147=1805358,
 賣: 376.90
STWamX7     :25=368.90,441=368.90,31=6,735=6,
 賣: 368.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1805887,4147=1805887,
 賣: 376.90
STWamX7     :25=367.90,441=367.90,31=6,735=6,3855=1805889,4147=1805889,
 賣: 367.90
STWamX7     :1067=00:30:06,25=376.90,441=376.90,31=40,735=40,3855=1806438,4147=1806438,
 賣: 376.90
STWamX7     :25=366.90,441=366.90,31=6,735=6,3855=1806440,4147=1806440,
 賣: 366.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1806983,4147=1806983,
 賣: 376.90
STWamX7     :25=365.90,441=365.90,31=6,735=6,3855=1806984,4147=1806984,
 賣: 365.90
STWamX7     :1067=00:30:07,25=376.90,441=376.90,31=40,735=40,3855=1807520,4147=1807520,
 賣: 376.90
STWamX7     :25=364.90,441=364.90,31=6,735=6,3855=1807521,4147=1807521,
 賣: 364.90
STWamX7     :1067=00:30:08,25=376.90,441=376.90,31=40,735=40,3855=1808067,4147=1808067,
 賣: 376.90
STWamX7     :25=363.90,441=363.90,31=6,735=6,3855=1808069,4147=1808069,
 賣: 363.90
STWamX7     :25=376.90,441=376.90,31=40,735=40,3855=1808592,4147=1808592,
 賣: 376.90
STWamX7     :25=362.90,441=362.90,31=6,735=6,3855=1808594,4147=1808594,
 賣: 362.90
STWamX7     :1067=00:30:09,25=376.90,441=376.90,31=40,735=40,3855=1809151,4147=1809151,
 賣: 376.90
STWamX7     :25=362.80,441=362.80,31=6,735=6,3855=1809152,4147=1809152,
 賣: 362.80
STWamX7     :1067=00:31:30,25=376.90,441=376.90,31=20,735=20,3855=1890035,4147=1890035,
 賣: 376.90
STWamX7     :25=362.80,441=362.80,31=3,735=3,3855=1890037,4147=1890037,
 賣: 362.80
STWamX7     :3855=2285781,1067=00:38:05,22=431.30,436=431.30,4150=2285781,5=00:38,
 買: 431.30
STWamX7     :3855=2287478,22=415.00,436=415.00,4150=2287478,
 買: 415.00
STWamX7     :1704=00:45,7084=3,3404=403.10,372=403.10,3132=3,32=3,100=1209.30,373=3,7085=1,6947=3,8672=692259671968332150,8273=403.10,5387=3,
 *總量* 3
STWamX7     :7084=1,3132=4,32=4,100=1612.40,373=4,7085=2,6947=4,8672=692259671968332151,5387=1,
 *總量* 4
STWamX7     :7084=2,3132=6,32=6,100=2418.60,373=6,7085=3,6947=6,8672=692259671968332152,5387=2,
 *總量* 6
STWamX7     :7084=3,3132=9,32=9,100=3627.90,373=9,7085=4,6947=9,8672=692259671968332153,5387=3,
 *總量* 9
STWamX7     :3132=12,32=12,100=4837.20,373=12,7085=5,6947=12,8672=692259671968332154,
 *總量* 12
STWamX7     :7084=9,3132=21,32=21,100=8465.10,373=21,7085=6,6947=21,8672=692259671968332155,5387=9,
 *總量* 21
STWamX7     :7084=3,3132=24,32=24,100=9674.40,373=24,7085=7,6947=24,8672=692259671968332156,5387=3,
 *總量* 24
STWamX7     :3132=27,32=27,100=10883.70,373=27,7085=8,6947=27,8672=692259671968332157,
 *總量* 27
STWamX7     :7084=2,3132=29,32=29,100=11689.90,373=29,7085=9,6947=29,8672=692259671968332158,5387=2,
 *總量* 29
STWamX7     :7084=5,3132=34,32=34,100=13705.40,373=34,7085=10,6947=34,8672=692259671968332159,5387=5,
 *總量* 34
STWamX7     :7084=8,3132=42,32=42,100=16930.20,373=42,7085=11,6947=42,8672=692259671968332160,5387=8,
 *總量* 42
STWamX7     :7084=4,3132=46,32=46,100=18542.60,373=46,7085=12,6947=46,8672=692259671968332161,5387=4,
 *總量* 46
STWamX7     :7084=1,3132=47,32=47,100=18945.70,373=47,7085=13,6947=47,8672=692259671968332162,5387=1,
 *總量* 47
STWamX7     :25=376.90,441=376.90,31=20,735=20,4147=2700183,
 賣: 376.90
STWamX7     :22=407.30,436=407.30,
 買: 407.30
STWamX7     :25=390.00,441=390.00,31=17,735=17,
 賣: 390.00
STWamX7     :22=407.20,436=407.20,30=9,730=9,
 買: 407.20
STWamX7     :22=407.10,436=407.10,30=3,730=3,
 買: 407.10
STWamX7     :22=407.00,436=407.00,
 買: 407.00
STWamX7     :22=405.70,436=405.70,30=7,730=7,
 買: 405.70
STWamX7     :22=405.00,436=405.00,30=8,730=8,
 買: 405.00
STWamX7     :25=400.00,441=400.00,31=1,735=1,
 賣: 400.00
STWamX7     :3132=48,32=48,100=19348.80,373=48,7085=14,6947=48,8672=692259671968332163,
 *總量* 48
STWamX7     :22=404.30,436=404.30,30=7,730=7,
 買: 404.30
STWamX7     :22=404.00,436=404.00,
 買: 404.00
STWamX7     :25=400.50,441=400.50,
 賣: 400.50
STWamX7     :25=401.80,441=401.80,31=7,735=7,
 賣: 401.80
STWamX7     :25=401.90,441=401.90,3855=2700184,4147=2700184,
 賣: 401.90
STWamX7     :22=403.80,436=403.80,30=14,730=14,4150=2700184,
 買: 403.80
STWamX7     :25=402.20,441=402.20,31=22,735=22,
 賣: 402.20
STWamX7     :22=403.20,436=403.20,30=8,730=8,
 買: 403.20
STWamX7     :22=403.10,436=403.10,30=13,730=13,
 買: 403.10
STWamX7     :3132=49,32=49,100=19751.90,373=49,7085=15,6947=49,8672=692259671968332164,
 *總量* 49
STWamX7     :204=403.10,59=403.40,57=403.10,735=7,3514=403.40,203=403.10,31=7,3512=403.40,25=403.40,441=403.40,
 賣: 403.40
STWamX7     :7084=6,3132=55,32=55,100=22170.50,373=55,7085=16,6947=55,8672=692259671968332165,5387=6,
 *總量* 55
STWamX7     :7084=1,3132=56,32=56,100=22573.60,373=56,7085=17,6947=56,8672=692259671968332166,5387=1,
 *總量* 56
STWamX7     :7084=6,3132=62,32=62,100=24992.20,373=62,7085=18,6947=62,8672=692259671968332167,5387=6,
 *總量* 62
STWamX7     :7084=1,3132=63,32=63,100=25395.30,373=63,7085=19,6947=63,8672=692259671968332168,5387=1,
 *總量* 63
STWamX7     :7084=7,3132=70,32=70,100=28217.00,373=70,7085=20,6947=70,8672=692259671968332169,5387=7,
 *總量* 70
STWamX7     :7084=1,3132=71,32=71,100=28620.10,373=71,7085=21,6947=71,8672=692259671968332170,5387=1,
 *總量* 71
STWamX7     :7084=7,3132=78,32=78,100=31441.80,373=78,7085=22,6947=78,8672=692259671968332171,5387=7,
 *總量* 78
STWamX7     :7084=5,3132=83,32=83,100=33457.30,373=83,7085=23,6947=83,8672=692259671968332172,5387=5,
 *總量* 83
STWamX7     :7084=1,3132=84,32=84,100=33860.40,373=84,7085=24,6947=84,8672=692259671968332173,5387=1,
 *總量* 84
STWamX7     :19=403.10,6258=2700170,12=403.10,285=00:45,379=00:45:00,32=85,286=00:45,6259=2700170,13=403.10,3854=2700170,3900=692259671968332176,11=0.00,287=00:45,3132=85,77=1,6=403.10,100=34263.50,18=00:45,6260=2700170,56=0.00,4756=1,16=20 NOV 2017,178=1,
 開盤: 403.10 -- 00:45:00 --  *總量* 85 成交: 403.10

STWamX7     :178=2,3900=692259671968332177,3132=87,77=2,32=87,100=35069.70,
 *總量* 87
STWamX7     :6259=2700177,12=403.40,372=403.11,11=0.30,3132=89,77=3,56=0.07,3404=403.11,3854=2700177,3900=692259671968332178,32=89,100=35876.50,6=403.40,14=1,
 *總量* 89 成交: 403.40
STWamX7     :4147=2700233,3855=2700233,3514=403.30,25=403.30,441=403.30,31=2,735=2,
 賣: 403.30
STWamX7     :178=1,3900=692259671968332179,3854=2700336,56=0.00,11=0.00,3132=90,77=4,32=90,100=36279.60,6=403.10,14=2,
 *總量* 90 成交: 403.10


最後比對SGX提供的Tick明細(WEBPXTICK_DT-20171120.zip)
可以發現 08:30:00~ 08:45:00 只有買賣價, 並且有穿價狀態的現象 (因為非交易時段不會成交)
084501才有成交,就是開盤價 403.10
Message Code
B : Bid
A : Ask
T : Traded
Time,Price,Msg_Code,Volume
083000,0000037690,A,00040
083000,0000041100,B,00008
083002,0000037490,A,00006
083003,0000037290,A,00006
083003,0000041500,B,00009
083004,0000037090,A,00006
083005,0000036790,A,00006
083006,0000036590,A,00006
083007,0000036490,A,00006
083008,0000036290,A,00006
083009,0000036280,A,00006
083010,0000036280,A,00006
083012,0000036280,A,00006
083014,0000036280,A,00006
083015,0000036280,A,00006
083016,0000036280,A,00006
083017,0000036280,A,00006
083018,0000036280,A,00006
083020,0000036280,A,00006
083031,0000036280,A,00006
083031,0000041500,B,00009
083033,0000041500,B,00009
083035,0000041500,B,00009
083038,0000036280,A,00006
083040,0000041500,B,00009
083043,0000041500,B,00009
083048,0000036280,A,00006
083055,0000041500,B,00009
083100,0000036280,A,00006
083106,0000036280,A,00006
083107,0000036280,A,00006
083108,0000036280,A,00006
083109,0000036280,A,00006
083110,0000036280,A,00006
083110,0000041500,B,00009
083111,0000036280,A,00006
083113,0000036280,A,00006
083114,0000041500,B,00009
083116,0000036280,A,00006
083117,0000036280,A,00006
083118,0000036280,A,00006
083121,0000041500,B,00009
083123,0000036280,A,00006
083124,0000036280,A,00006
083125,0000036280,A,00006
083126,0000036280,A,00006
083126,0000041500,B,00009
083127,0000036280,A,00006
083128,0000036280,A,00006
083129,0000036280,A,00006
083130,0000036280,A,00003
083130,0000041500,B,00009
083131,0000036280,A,00003
083131,0000041500,B,00009
083132,0000041500,B,00009
083133,0000041500,B,00009
083135,0000041500,B,00009
083141,0000036280,A,00003
083141,0000041500,B,00009
083142,0000041500,B,00009
083145,0000036280,A,00003
083145,0000041500,B,00009
083146,0000041500,B,00009
083148,0000036280,A,00003
083151,0000041500,B,00009
083157,0000036280,A,00003
083157,0000041500,B,00009
083158,0000036280,A,00003
083200,0000041500,B,00009
083201,0000036280,A,00003
083201,0000041500,B,00009
083204,0000036280,A,00003
083210,0000036280,A,00003
083210,0000041500,B,00009
083215,0000041500,B,00009
083217,0000041500,B,00009
083218,0000036280,A,00003
083220,0000041500,B,00009
083229,0000036280,A,00003
083229,0000041500,B,00009
083230,0000036280,A,00003
083233,0000036280,A,00003
083233,0000041500,B,00009
083234,0000036280,A,00003
083235,0000041500,B,00009
083238,0000036280,A,00003
083238,0000041500,B,00009
083239,0000036280,A,00003
083239,0000041500,B,00009
083240,0000036280,A,00003
083241,0000036280,A,00003
083241,0000041500,B,00009
083242,0000036280,A,00003
083243,0000036280,A,00003
083244,0000041500,B,00009
083245,0000036280,A,00003
083246,0000036280,A,00003
083246,0000041500,B,00009
083247,0000036280,A,00003
083248,0000041500,B,00009
083249,0000041500,B,00009
083250,0000041500,B,00009
083251,0000041500,B,00009
083253,0000041500,B,00009
083256,0000041500,B,00009
083257,0000036280,A,00003
083258,0000041500,B,00009
083259,0000041500,B,00009
083301,0000041500,B,00009
083302,0000041500,B,00009
083303,0000041500,B,00009
083304,0000041500,B,00009
083305,0000041500,B,00009
083307,0000041500,B,00009
083308,0000041500,B,00009
083309,0000041500,B,00009
083313,0000041500,B,00009
083314,0000041500,B,00009
083315,0000041500,B,00009
083316,0000041500,B,00009
083317,0000036280,A,00003
083317,0000041500,B,00009
083318,0000036280,A,00003
083318,0000041500,B,00009
083319,0000036280,A,00003
083319,0000041500,B,00009
083320,0000036280,A,00003
083320,0000041500,B,00009
083321,0000036280,A,00003
083321,0000041500,B,00009
083322,0000036280,A,00003
083322,0000041500,B,00009
083323,0000036280,A,00003
083323,0000041500,B,00009
083324,0000036280,A,00003
083325,0000036280,A,00003
083326,0000036280,A,00003
083327,0000036280,A,00003
083327,0000041500,B,00009
083328,0000036280,A,00003
083328,0000041500,B,00009
083329,0000036280,A,00003
083329,0000041500,B,00009
083330,0000036280,A,00003
083330,0000041500,B,00009
083331,0000041500,B,00009
083332,0000041500,B,00009
083333,0000041500,B,00009
083334,0000041500,B,00009
083335,0000041500,B,00009
083344,0000036280,A,00003
083358,0000041500,B,00009
083404,0000041500,B,00009
083417,0000036280,A,00003
083417,0000041500,B,00009
083418,0000036280,A,00003
083418,0000041500,B,00009
083426,0000036280,A,00003
083427,0000036280,A,00003
083433,0000036280,A,00003
083435,0000036280,A,00003
083435,0000041500,B,00009
083436,0000041500,B,00009
083437,0000041500,B,00009
083438,0000041500,B,00009
083439,0000041500,B,00009
083440,0000036280,A,00003
083440,0000041500,B,00009
083442,0000036280,A,00003
083443,0000036280,A,00003
083444,0000036280,A,00003
083445,0000036280,A,00003
083446,0000036280,A,00003
083446,0000041500,B,00009
083447,0000036280,A,00003
083449,0000036280,A,00003
083455,0000036280,A,00003
083500,0000036280,A,00003
083501,0000036280,A,00003
083503,0000041500,B,00009
083504,0000036280,A,00003
083504,0000041500,B,00009
083506,0000036280,A,00003
083507,0000036280,A,00003
083508,0000036280,A,00003
083514,0000036280,A,00003
083522,0000036280,A,00003
083530,0000036280,A,00003
083530,0000041500,B,00009
083531,0000041500,B,00009
083532,0000041500,B,00009
083533,0000041500,B,00009
083536,0000036280,A,00003
083541,0000036280,A,00007
083542,0000036280,A,00007
083554,0000036280,A,00007
083556,0000036280,A,00007
083556,0000041500,B,00009
083557,0000036280,A,00007
083557,0000041500,B,00009
083559,0000036280,A,00007
083600,0000036280,A,00007
083601,0000036280,A,00007
083602,0000036280,A,00007
083606,0000036280,A,00007
083607,0000036280,A,00007
083608,0000036280,A,00007
083609,0000036280,A,00007
083610,0000036280,A,00007
083611,0000036280,A,00007
083612,0000036280,A,00007
083614,0000036280,A,00007
083615,0000036280,A,00007
083618,0000036280,A,00007
083619,0000036280,A,00007
083620,0000036280,A,00007
083624,0000036280,A,00007
083628,0000036280,A,00007
083629,0000036280,A,00007
083630,0000036280,A,00007
083631,0000041500,B,00009
083633,0000036280,A,00007
083647,0000036280,A,00007
083655,0000041500,B,00009
083657,0000036280,A,00008
083701,0000036280,A,00008
083702,0000036280,A,00008
083703,0000036280,A,00008
083706,0000036280,A,00008
083710,0000036280,A,00008
083712,0000036280,A,00008
083717,0000041500,B,00009
083719,0000036280,A,00008
083722,0000041500,B,00009
083725,0000036280,A,00008
083727,0000041500,B,00009
083731,0000036280,A,00008
083733,0000036280,A,00008
083737,0000036280,A,00008
083738,0000041500,B,00009
083745,0000041500,B,00009
083752,0000041500,B,00009
083753,0000041500,B,00009
083759,0000041500,B,00009
083802,0000041500,B,00009
083804,0000036280,A,00008
083805,0000043130,B,00018
083807,0000041500,B,00009
083809,0000041500,B,00009
083812,0000041500,B,00009
083814,0000041500,B,00009
083815,0000036280,A,00008
083817,0000041500,B,00009
083818,0000036280,A,00008
083824,0000041500,B,00009
083839,0000041500,B,00009
083842,0000041500,B,00009
083850,0000041500,B,00009
083851,0000041500,B,00009
083854,0000041500,B,00009
083855,0000041500,B,00009
083856,0000036280,A,00010
083857,0000041500,B,00009
083858,0000036280,A,00010
083859,0000036280,A,00010
083902,0000036280,A,00010
083902,0000041500,B,00009
083903,0000041500,B,00009
083904,0000036280,A,00010
083908,0000041500,B,00009
083911,0000041500,B,00009
083913,0000036280,A,00010
083915,0000036280,A,00010
083917,0000041500,B,00009
083920,0000041500,B,00009
083925,0000041500,B,00009
083934,0000036280,A,00010
083936,0000041500,B,00009
083939,0000036280,A,00010
083939,0000041500,B,00009
083944,0000036280,A,00010
083949,0000036280,A,00010
083949,0000041500,B,00009
084003,0000036280,A,00010
084005,0000036280,A,00010
084005,0000041500,B,00009
084006,0000041500,B,00009
084008,0000041500,B,00009
084009,0000041500,B,00009
084010,0000041500,B,00009
084011,0000041500,B,00009
084014,0000041500,B,00009
084015,0000041500,B,00009
084016,0000041500,B,00009
084019,0000041500,B,00009
084020,0000041500,B,00009
084021,0000041500,B,00009
084023,0000041500,B,00009
084026,0000041500,B,00009
084027,0000041500,B,00009
084028,0000041500,B,00009
084029,0000041500,B,00009
084032,0000041500,B,00009
084033,0000041500,B,00009
084034,0000036280,A,00010
084034,0000041500,B,00009
084035,0000041500,B,00009
084039,0000041500,B,00009
084042,0000041500,B,00009
084046,0000041500,B,00009
084053,0000041500,B,00009
084054,0000041500,B,00009
084056,0000041500,B,00009
084059,0000036280,A,00010
084059,0000041500,B,00009
084104,0000036280,A,00010
084110,0000041500,B,00009
084112,0000036280,A,00008
084149,0000041500,B,00009
084152,0000041500,B,00009
084154,0000041500,B,00009
084159,0000041500,B,00009
084200,0000041500,B,00009
084201,0000041500,B,00009
084202,0000036280,A,00008
084203,0000041500,B,00009
084209,0000041500,B,00009
084211,0000041500,B,00009
084214,0000041500,B,00009
084215,0000041500,B,00009
084216,0000041500,B,00009
084217,0000041500,B,00009
084222,0000041500,B,00009
084223,0000041500,B,00009
084235,0000036280,A,00008
084236,0000036280,A,00008
084237,0000036280,A,00008
084241,0000036280,A,00008
084242,0000036280,A,00008
084243,0000036280,A,00008
084251,0000041500,B,00009
084252,0000041500,B,00009
084253,0000036280,A,00004
084253,0000041500,B,00009
084254,0000036280,A,00009
084257,0000036280,A,00009
084257,0000041500,B,00009
084258,0000041500,B,00009
084301,0000041500,B,00009
084304,0000041500,B,00009
084305,0000041500,B,00009
084313,0000041500,B,00009
084316,0000041500,B,00009
084317,0000036280,A,00009
084318,0000041500,B,00009
084319,0000041500,B,00009
084321,0000041500,B,00009
084324,0000041500,B,00009
084328,0000036280,A,00009
084328,0000041500,B,00009
084330,0000036280,A,00009
084331,0000036280,A,00009
084332,0000036280,A,00009
084334,0000036280,A,00009
084336,0000036280,A,00009
084336,0000041500,B,00009
084337,0000036280,A,00009
084342,0000041500,B,00009
084343,0000036280,A,00009
084344,0000041500,B,00009
084347,0000036280,A,00009
084353,0000036280,A,00009
084356,0000036280,A,00009
084356,0000041500,B,00009
084357,0000036280,A,00009
084400,0000041500,B,00009
084401,0000041500,B,00009
084404,0000036280,A,00009
084405,0000036280,A,00009
084406,0000036280,A,00009
084412,0000041500,B,00009
084416,0000036280,A,00009
084417,0000041500,B,00009
084420,0000041500,B,00009
084421,0000041500,B,00009
084422,0000036280,A,00009
084425,0000036280,A,00009
084426,0000041500,B,00009
084429,0000041500,B,00009
084431,0000036280,A,00009
084431,0000041500,B,00009
084432,0000041500,B,00009
084433,0000036280,A,00009
084434,0000041500,B,00009
084435,0000041500,B,00009
084436,0000041500,B,00009
084437,0000036280,A,00009
084437,0000041500,B,00009
084438,0000041500,B,00009
084439,0000036280,A,00009
084439,0000041500,B,00009
084441,0000041500,B,00009
084443,0000041500,B,00009
084444,0000041500,B,00009
084445,0000041500,B,00009
084447,0000036280,A,00009
084448,0000041500,B,00009
084449,0000041500,B,00009
084451,0000036280,A,00009
084452,0000036280,A,00009
084452,0000041500,B,00009
084453,0000036280,A,00009
084453,0000041500,B,00009
084454,0000036280,A,00009
084454,0000041500,B,00009
084455,0000036280,A,00009
084455,0000041500,B,00009
084456,0000036280,A,00009
084456,0000041500,B,00009
084457,0000041500,B,00009
084458,0000036280,A,00009
084458,0000041500,B,00009
084459,0000041500,B,00009
084500,0000040340,A,00015
084500,0000040320,B,00004
084501,0000040340,A,00021
084501,0000040330,B,00004
084501,0000040310,T,00003  <== 成交價 403.10 (開盤價)
084501,0000040310,T,00001
084501,0000040310,T,00002
084501,0000040310,T,00003
084501,0000040310,T,00003
084501,0000040310,T,00009
084501,0000040310,T,00003




都寫了一些怎樣程式?

張貼者:2017年10月29日 上午8:40Wei-Xiuang Wang   [ 已更新 2017年11月1日 上午6:13 ]


這裡作一個 string 和 strcpy 的簡單比較


程式的執行結果如下:


測試的結果 string 的方式所需費時較 strcpy 多好幾倍, 也就是 string 是比較慢的

往往相同的問題解決的方式很多, 有時候只需要能達到目的即可,
但是如果是需要高頻的處理, 效率就變的很重要...
因此常看到市面的行情相關軟體會有快市時的各種問題可見一般!

大學生解題系統中計算階層為例
解法當然很多, 但是效率有多大的差距可以看得到, 記憶體的用量也會有很大的不同

在簡單問題下或許差異不大, 不過一旦問題開始變複雜, 差距就會越來越大!

現在的APP市場就可以看到, 並非新就是好 而是要穩定然後反應快才能讓人願意使用,
APP評論中總是看到最多的不滿就是
 三部五時更版, 動不動就沒反應當掉, 強迫更版, 把用戶當白老鼠

所以寫程式真的要很小心很用心才行,
越小的地方越是不能忽略而且還要更加以重視才好!


10月最後一個星期日一過,就又看到一堆資訊產品哀鴻遍野...
拜託, 日光節約又不是什麼大問題, 10年如一日 依然沒改善嗎?!


透過Feed-Server/API輕鬆完成機房服務監測

張貼者:2017年9月26日 下午11:35Wei-Xiuang Wang   [ 已更新 2017年9月27日 上午10:49 ]


每次話題總是離不開行情,這裏洩漏一下系統還可以有這樣的玩法!

利用Feed-API回報資訊到Feed-Server上,就像是餵行情的概念一樣,
於Server端就能瞭解各主機負載狀態與行情是否有延遲的狀況

前篇已經介紹過透過Feed-Server/API建立行情系統(AGVS)有多簡單,
現在同樣的透過巧思來監測機房服務狀態,於Server介面就能一覽無遺,
如果利用行情的特性,也能將想要的狀態統一像Tick紀錄一樣保留下來,
或者透過API訂閱的方式重新設計來規劃log/event/message...等的需求

而這邊為了簡化(偷懶)設計也便於說明,
把Feed-API的小程式設計為每一個console只收集一台服務主機的資訊打到Feed-Server上,
由於是IP化的架構, 可以於Feed-Server端跑多個console收集遠端服務主機的狀態,
當然也可以於各服務主機上分別跑console小程式把資訊打回Feed-Sever,
如果是後者,還可以把主機的CPU/記憶體/磁碟空間等...各種資訊也都打回Feed-Server囉!

程式也是都一樣很簡單

收到Tick

                    if (caINSAPPid[0])
                    {
                        char caBuffer[256];
                        char *cpBuf = caBuffer;
                        cpBuf += sprintf(cpBuf,
                            "$%s,3=%u,93=%s,94=%s,95=%02d:%02d:%02d.%03d"
                            , caINSAPPid, uTotalVolume, caMonitorExch, caMonitorSym
                            , spLocalTime->wHour, spLocalTime->wMinute, spLocalTime->wSecond, spLocalTime->wMilliseconds
                        );

                        cpBuf++;//含ZE
                        fnPktEvFeeder_SendPacket('F', caBuffer, (cpBuf - caBuffer), false);
                    }


收到連線數回報

if (caINSAPPid[0])
            {
                int &connOnINSAPP = *(int *)(pkt.data.bpData + 1);
                char caBuffer[128];
                char *cpBuf = caBuffer;
                cpBuf += sprintf(cpBuf, "$%s,92=#%d", caINSAPPid, connOnINSAPP);

                cpBuf++;//含ZE
                fnPktEvFeeder_SendPacket('F', caBuffer, (cpBuf - caBuffer), false);
            }



台灣21:46時由總成交量可以觀察到主機fort04有明顯的延遲狀況!

雖然21:50時行情有跟上,但台灣23:25時主機fort04延遲的狀況又更嚴重!!

主機fort04於23:51後行情才又跟上...



CME MDP3.0的規劃與建置

張貼者:2015年3月2日 下午7:08Wei-Xiuang Wang   [ 已更新 2017年7月22日 上午3:40 ]


CME於2015/6/10開始, 全面改用FIX/SBE的方式並停用FIX/FAST

FIX的重大改變

The following data will be removed from the FIX/FAST Market Data Incremental Refresh (35=X) message format:

  Tag 75-TradeDate - only the time is included on each message to save space. The Trade Date will be included on every Security Status (35=f) message update.
  (http://www.cmegroup.com/confluence/display/EPICSANDBOX/MDP3+-+Market+Data+Security+Status)

  Tag 273-MDEntryTime - Currently, tag 273-MDEntryTime is sent in each Market Data Incremental Refresh (35=X) message data block. Beginning with this release, the Start of Event timestamp (tag 60-TransactTime) will be sent once for each message. This will provide a more accurate timestamp for the message blocks.

  The following market data will no longer be sent:
    - Better Bid/Offer (CLAST)
    - Simulated Buy/Sell
    - Calculated Prices for Trades (Leg or Implied Orders Only)
    - Net Change
    - Tick Direction
    - Trade Condition

  Tag 731-SettlPriceType will be used for settlement prices; tag 286-OpenCloseSettlFlag will no longer be sent for settlement prices.

  The table below shows the relationship between the MDP and iLink tags.
    (Previous MDP Format[FAST])   (MDP3.0 New [FIX/SBE])
         tag 1151-SecurityGroup : tag 6937-Asset
         tag 55-Symbol          : tag 1151-SecurityGroup
         tag 107-SecurityDesc   : tag 55-Symbol


  The following new tags will be added to the Market Data Security Definition (35=d) message:
        tag 779-LastUpdateTime indicates the timestamp for when the instrument was last added, modified or deleted.
        tag 1300-MarketSegmentID identifies the market segment for all CME Globex Instruments.
        tag 6937-Asset indicates the underlying asset code, which was previously disseminated in tag 1151-SecurityGroup.
        tag 167-SecurityType indicates the type of security.
        tag 6350-TickRule indicates the VTT Code provided for instruments with variable ticks in addition to the Tick Size in Tag 969-MinPriceIncrement.
        tag 37702-MainFraction indicates the price denominator of the main fraction.
        tag 37703-SubFraction indicates the price denominator of the sub fraction.
        tag 9800-PriceDisplayFormat indicates the number of decimals in the displayed price (e.g., for price '100.25' will = '2')
        tag 731-SettlPriceType will be sent for settlement prices. It will contain a bitmap field of Boolean type indicators representing the settlement price type as described for the Incremental Refresh message.

  The following tags will be removed from the Market Data Security Definition (35=d) message:
        tag 5796-TradingReferenceDate
        tag 827-ExpirationCycle
        tag 107-SecurityDesc
        tag 9853-PricingModel
        tag 454-NoSecurityAltID with repeating groups: tag 455-SecurityAltID and tag 456-SecurityAltIDSource
        tag 1144-ImpliedMarketIndicator (implied eligibility for instruments will be found in the tag 871-InstAttribType=24 repeating group).
        tags from the Leg repeating group (tag 555-NoLegs):
    - tag 5795-LegSecurityGroup
    - tag 600-LegSymbol
    - tag 608-LegCFICode
    - tag 764-LegSecuritySubType
    - tag 556-LegCurrency
    - tag 610-LegMaturityMonthYear
    - tag 612-LegStrikePrice
    - tag 616-LegSecurityExchange
    - tag 620-LegSecurityDesc
    - tag 942-LegStrikeCurrency
    - tag 286-OpenCloseSettlFlag


特別是商品描述的欄位部分非常容易混淆

Previous MDP Format (FAST)
MDP 3.0 (New Market Data Format - SBE)
iLink Order Entry

tag1151-SecurityGroup  

tag 6937-Asset

tag1151-SecurityGroup

tag 55-Symbol  

tag1151-SecurityGroup  

tag 55-Symbol  

tag 107-SecurityDesc

tag 55-Symbol

tag 107-SecurityDesc



以CME的用戶端iLink來看, 應該是要讓MDP3.0經過轉換後相容於之前的對應

個人觀點:
 項目/格式 FIX/FAST(舊的MDP) FIX/SBE(新的MDP3.0)
 概念 以商品訊息為主軸 以資料處理為主軸
 格式 格式繁多雜亂,重複設計,焦點不明確 格式統一,功能明確,變動可能性降低
 封包 FAST壓縮,位元組傳輸量較少 Binary無壓縮,封包數增加20%~50%,傳輸量大增
 閱讀 封包內容經FAST壓縮,人工閱讀困難 結構化Binary資料,內容單純易於確認與溝通
 行情解讀 一個商品一個訊息更新 一個訊息多個商品更新
 成交揭示 一個商品一個訊息完成,較為單純 一個商品兩個訊息完成,恐增加行情處理負載
 價位小數 只有小數三位數 完整小數位數
 Tick合併 逐筆不合併,真實呈現 同一個TimeStamp同價合併,Tick大幅度減量
 實測數據 整體原始數據量所需位元組較少 可高達FAST的2.33倍,也就是增加1300%,需更大的頻寬確保品質

價位小數點的差異:

Tick合併比較:

以期貨商品同時段同範圍資料量比較:
FIX/FAST: Channel ( 7,9,11,13,15,30,31,32,33,60,111,117,113,115 )
FIX/SBE: Channel ( 310,312,314,316,318,382,386,384,360,320,340,346,342,344 )
新格式明顯為舊格式的2倍多


GMDS的規劃與建置, 介紹由當前FAST移轉到SBE的方式

假設FIX/FAST的GMDS/URDS設定為
Future  /channel 7,9,11,13,15,30,31,32,33,60,111,117,113,115,801
Option CBT
 /channel 112,114,116
Option CME
 /channel 8,12,61
Option NYM
 /channel 35,38
(PS: 801 or 117是設定相同的Group進系統, 只會有其中之1)

FIX/FAST的GMDS/PatsEmu-CME設定為
Future SecurityExchange=XCME,XCBT,XNYM,XCEC
Symbol=6A,6B,6C,6E,GF,GE,LE,HE,6M,6N,6J,NQ,ES,ND,NK,6S,SP,ZQ,XC,XK,ZC,ZR,ZD,YM,ZO,ZS,ZB,ZF,ZW,GC,QO,HG,SI,QM,NG,PD,PL,CL,XR,BD,IE,OP,ZN,ZT
Option CBT
SecurityExchange=XCBT
SecurityGroup=6E,ES,OG,LO,SO,6A,6B,6C,6J,OZC,OZW,OYM,OZB,OZS,OZN,OZF
Option CME
SecurityExchange=XCME
SecurityGroup=6E,ES,OG,LO,SO,6A,6B,6C,6J,OZC,OZW,OYM,OZB,OZS,OZN,GE,LE,GF
Option NYM
SecurityExchange=XNYM,XCEC
SecurityGroup=6E,ES,OG,LO,SO,6A,6B,6C,6J,OZC,OZW,OYM,OZB,OZS,OZN,ON
(PS: 選擇權設定有點亂, 用顏色把對應交易所的商品標示出來, 不符合交易所的設定商品可以移除)


由CME的對照表
http://www.cmegroup.com/confluence/display/EPICSANDBOX/MDP3#MDP3-FIX/FASTtoMDP3ChannelMapping
新的FIX/SBE的GMDS/URDS設定變為
Future  /channel 310,312,314,316,318,382,386,384,360,320,340,346,342,344
Option CBT
 /channel 341,343,345
Option CME
 /channel 311,315,321
Option NYM
 /channel 383,361

FIX/SBE的GMDS/PatsEmu-CME設定為 (也就是沒有改變)
Future SecurityExchange=XCME,XCBT,XNYM,XCEC
Symbol=6A,6B,6C,6E,GF,GE,LE,HE,6M,6N,6J,NQ,ES,ND,NK,6S,SP,ZQ,XC,XK,ZC,ZR,ZD,YM,ZO,ZS,ZB,ZF,ZW,GC,QO,HG,SI,QM,NG,PD,PL,CL,XR,BD,IE,OP,ZN,ZT
Option CBT
SecurityExchange=XCBT
SecurityGroup=OZC,OZW,OYM,OZB,OZS,OZN,OZF
Option CME
SecurityExchange=XCME
SecurityGroup=6E,ES,6A,6B,6C,6J,GE,LE,GF
Option NYM
SecurityExchange=XNYM,XCEC
SecurityGroup=OG,LO,SO,ON

如果選用Multi-DB版本來規劃, 可以簡化為 (基於Future/Option的應用或架構方式可能不同, 還是規劃成兩個分流)
URDS的設定(也就是把Option的部分簡化為一個)
Future  /channel 310,312,314,316,318,382,386,384,360,320,340,346,342,344
Option
 /channel 341,343,345,311,315,321,383,361

PatsEmu-CME的設定(也就是把Option的部分簡化為一個)
Future SecurityExchange=XCME,XCBT,XNYM,XCEC
Symbol=6A,6B,6C,6E,GF,GE,LE,HE,6M,6N,6J,NQ,ES,ND,NK,6S,SP,ZQ,XC,XK,ZC,ZR,ZD,YM,ZO,ZS,ZB,ZF,ZW,GC,QO,HG,SI,QM,NG,PD,PL,CL,XR,BD,IE,OP,ZN,ZT
Option
SecurityExchange=XCBT,XCME,XNYM,XCEC
SecurityGroup=OZC,OZW,OYM,OZB,OZS,OZN,OZF,6E,ES,6A,6B,6C,6J,GE,LE,GF,LO,ON,OG,SO

Multi-DB版本的PatsEmu-CME提供 /GroupMap 參數(點連結直接參考)
所以, 針對Future與Option的GroupMap設定檔可以分別這樣設計

PatsEmu-CME GroupMap for Future

"XCME",0x8100
"XNYM",0x8200
"XCBT",0x8300
"XCEC",0x8400

PatsEmu-CME GroupMap for Option

"O_XCME",0x8101
"O_XNYM",0x8201
"O_XCBT",0x8301
"O_XCEC",0x8401

'因為LO選擇權Strike特別多,將其獨立抽出可以有較好的處理效率
"LO|XNYM",0x8202    '交易所XNYM的LO全部選擇權
(PS: 由於LO有獨立抽出, 所以O_XNYM中不含LO商品, 於此例中只剩ON而已)

不同於之前的設置方式, 差異如表
  分流數
 TSHS-TfsRaw  PatsEmu-CME  數據庫(DbfId)  UniDnf-SB 同步需求
 TSHS-UniDbf/OBG
 舊的方式 4
 4 4
 4 ( 1 Future 3 Option )
 4 選擇性少,
容易有多餘的資源耗費
 新的方式 2
 2  2 9 ( 4 Future 5 Option)
 2 選擇性多,
有效使用資源提升效率
也就是新的方式架構更為簡單, 但能提供更多數據庫組合方式作為運用

同步的部分也能考慮改用UniDbf Merge Server (UniDbf-MS), 那麼只需執行一個UniDbf-MS 便能替代多個UniDbf-SB
不過舊的設置方式中, 每個分流的PatsEmu-CME要先透過/DbfId參數變更預設數據庫代碼0x0022成四個分別不同的代碼才能作為區別

新版的PatsEmu-CME支援FIX/SBE並相容舊的CME平台FIX/FAST,
新增Channel View可以查看所有Channel接收情形

新增FIX/SBE格式查看功能(rem是格式名稱,如果是偵測到新格式則是格式分析說明)

調整CME Filter的方式, 易於對照交易所提供之商品是否正確

新的URDS增加8,9,10三種新的接收方式 (可參考 URDS延伸參數說明 )
其中模式9可以用來替代目前收FIX/FAST使用的模式6
新的SBE則用模式10設定來接收

由於URDS接收模式9,10為自行定義清單, 因此控制分流接收可以透過檔案內容設定不同清單,
也可用相同的完整清單設定透過 /Channel 參數作不同的分流設定

例如以目前的Future/Option兩個分流, 可以用一個完整的清單

URDS-ByList-SBE.cfg

#註解行引符可為 # ; ' 與 Tab(x09)

#依序設定欄位
#Title,#Group IP,#Listen port

#模式一(任意來源):
    #Title - 簡稱(30Bytes以內)
    #Group IP - Multicast Group IP for join
    #Listen port - port number for listen

#模式二(CME AB備源):
    #Title - 以'*'帶Channel-ID作為Title, 例如 *300
    #Group-A IP - Multicast Group IP for join
    #Listen port - listen port for  Group-A
    #Group-B IP - Multicast Group IP for join
    #Listen port - listen port for  Group-B

#可透過 <enable> 與 <disable> 指定該行以下之設定是否生效

<enable>
#CME MDP3.0 FIX/SBE的Multicast Group IP/port ( A/B-Feed )
#正式環境 ftp://ftp.cmegroup.com/SBEFix/Production/Configuration/config.xml
*310,224.0.31.1,14310    ,224.0.32.1,15310  
*311,224.0.31.2,14311    ,224.0.32.2,15311  
*312,224.0.31.3,14312    ,224.0.32.3,15312  
'*313,224.0.31.4,14313    ,224.0.32.4,15313  
*314,224.0.31.5,14314    ,224.0.32.5,15314  
*315,224.0.31.6,14315    ,224.0.32.6,15315  
*316,224.0.31.7,14316    ,224.0.32.7,15316  
'*317,224.0.31.8,14317    ,224.0.32.8,15317  
*318,224.0.31.9,14318    ,224.0.32.9,15318  
'*319,224.0.31.10,14319   ,224.0.32.10,15319 
*320,224.0.31.11,14320   ,224.0.32.11,15320 
*321,224.0.31.12,14321   ,224.0.32.12,15321 
*340,224.0.31.64,14340   ,224.0.32.64,15340 
*341,224.0.31.65,14341   ,224.0.32.65,15341 
*342,224.0.31.66,14342   ,224.0.32.66,15342 
*343,224.0.31.67,14343   ,224.0.32.67,15343 
*344,224.0.31.68,14344   ,224.0.32.68,15344 
*345,224.0.31.69,14345   ,224.0.32.69,15345 
*346,224.0.31.70,14346   ,224.0.32.70,15346 
*360,224.0.31.192,14360  ,224.0.32.192,15360
*361,224.0.31.193,14361  ,224.0.32.193,15361
'*380,224.0.31.128,14380  ,224.0.32.128,15380
'*381,224.0.31.129,14381  ,224.0.32.129,15381
*382,224.0.31.130,14382  ,224.0.32.130,15382
*383,224.0.31.131,14383  ,224.0.32.131,15383
*384,224.0.31.132,14384  ,224.0.32.132,15384
'*385,224.0.31.133,14385  ,224.0.32.133,15385
*386,224.0.31.134,14386  ,224.0.32.134,15386
'*387,224.0.31.135,14387  ,224.0.32.135,15387
'*410,224.0.33.1,14410    ,224.0.34.1,15410  
'*430,224.0.33.64,14430   ,224.0.34.64,15430 
'*431,224.0.33.65,14431   ,224.0.34.65,15431 
'*440,224.0.33.80,14440   ,224.0.34.80,15440 
'*441,224.0.33.81,14441   ,224.0.34.81,15441 
'*450,224.0.33.96,14450   ,224.0.34.96,15450 
'*460,224.0.33.112,14460  ,224.0.34.112,15460
'*461,224.0.33.113,14461  ,224.0.34.113,15461
那麼可以設定
Pars_10fut 內容為
/CfgFile URDS-ByList-SBE.cfg /Channel 310,312,314,316,318,382,386,384,360,320,340,346,342,344
Pars_10opt 內容為
/CfgFile URDS-ByList-SBE.cfg /Channel 341,343,345,311,315,321,383,361

也可以用兩個分別的清單檔案來完成

URDS-ByList-SBEfut.cfg

<enable>
*310,224.0.31.1,14310    ,224.0.32.1,15310  
*312,224.0.31.3,14312    ,224.0.32.3,15312  
*314,224.0.31.5,14314    ,224.0.32.5,15314  
*316,224.0.31.7,14316    ,224.0.32.7,15316  
*318,224.0.31.9,14318    ,224.0.32.9,15318  
*382,224.0.31.130,14382  ,224.0.32.130,15382
*386,224.0.31.134,14386  ,224.0.32.134,15386
*384,224.0.31.132,14384  ,224.0.32.132,15384
*360,224.0.31.192,14360  ,224.0.32.192,15360
*320,224.0.31.11,14320   ,224.0.32.11,15320 
*340,224.0.31.64,14340   ,224.0.32.64,15340 
*346,224.0.31.70,14346   ,224.0.32.70,15346 
*342,224.0.31.66,14342   ,224.0.32.66,15342 
*344,224.0.31.68,14344   ,224.0.32.68,15344 

URDS-ByList-SBEopt.cfg

<enable>
*341,224.0.31.65,14341   ,224.0.32.65,15341 
*343,224.0.31.67,14343   ,224.0.32.67,15343 
*345,224.0.31.69,14345   ,224.0.32.69,15345 
*311,224.0.31.2,14311    ,224.0.32.2,15311  
*315,224.0.31.6,14315    ,224.0.32.6,15315  
*321,224.0.31.12,14321   ,224.0.32.12,15321 
*383,224.0.31.131,14383  ,224.0.32.131,15383
*361,224.0.31.193,14361  ,224.0.32.193,15361
那麼則設定清單檔案即可
Pars_10fut 內容為
/CfgFile URDS-ByList-SBEfut.cfg
Pars_10opt 內容為
/CfgFile URDS-ByList-SBEopt.cfg



多重數據庫( Multi-DB )說明

張貼者:2014年6月23日 下午9:29Wei-Xiuang Wang   [ 已更新 2014年8月7日 下午8:24 ]


初接觸DTS系統, 經常會對註冊數據庫的設定碼(如: 0x0020=PATS )感到疑惑,
因為目前大多數應用都是單一數據庫, 所以感覺就是全部資料都收下來為何還需要設定,
而實際上DTS支援多重數據庫功能, 設定註冊碼時可以選擇其中部分所需的數據庫即可,
例如: 0x1001=CME,0x1002=CBOT 可註冊兩個數據庫, 同理視需求可以註冊更多,
前提是DTS上須有所要的數據庫提供, 先前只有陸股行情會以 0x0001 與 0x0002
同時提供上證(show2003.dbf)與深證(sjshq.dbf)兩個行情數據庫,
其他FTDC,PatsRaw/Emu等系列都只提供單一行情數據庫而已~
現在 PatsRaw/Emu 也開始提供多重行情數據庫功能應用了!


PatsRaw/Emu系列的Tag #1欄位, 為以交易所與商品代碼組成可作為全局性唯一的商品Key
使用多重數據庫模式時, 便是以Tag #1的 '|' 之後的商品來源作為群組識別碼, 若不啟用多重功能,
所有商品都會在原本的單一數據庫中, 該預設數據庫於多重功能啟動時其群組識別碼為 '$Default',
當有指定不同之DbfId來作為某群組識別碼的服務數據庫時,
符合的商品將被抽離預設數據庫而篩選到新的數據庫代碼中提供服務

圖中為PatsEmu-CME的設置範例, 透過參數 /GroupMap 指定設定檔

設定檔內容

'for Option by key as "Contract|Exchange" , the others using "Exchange" as key
'Example:
'    "CME_CBT",0xA100
'    "TOCOM",0xA200
'    "GOLD|TOCOM",0xA201

"HFOCX",0xCA00    'Gcbullion Test
"XCME=HW",0x8000
"XNYM=CL",0x8100
"XNYM=NG",0x8200


此案例中, 原本單一數據庫共有7927個商品行情, 將HW,CL,NG三組期貨抽離後只剩3789個
其中期貨HW本身就有3498個商品接近半數~

下游的應用則可視需求給予註冊碼

只收CL商品
0x8100=輕原油

收CL和NG兩組商品
0x8100=CL輕原油,0x8200=NG天然氣

收其他未分群商品全部
0x0022=MyCME

將所有數據庫接收下
0x0022=A,0x8000=A0,0x8100=A1,0x8200=A2

前列註冊碼的示範 與熟悉的 0x0020=PATS 或 0x0021=RMDS 或 0x0022=CME 是同樣的意義
Code=Name 的 Code 是指上游的資料庫代碼 如 0x0020 , 0x0021
而Name的部分則是供讀取數據庫的應用端口可以識別的代碼, 依本身應用需求可自行任意命名


關於 類視頻/逐筆行情 之 設定

張貼者:2014年5月16日 上午7:43Wei-Xiuang Wang   [ 已更新 2014年5月16日 上午8:11 ]


PatsEmu <-- UniDbf-TS

這一層 UniDbf-TS 如果設 /tick 代表一律逐筆
沒加則看在Server端的IP為何 127.*.*.* , 10.*.*.* , 192.168.*.* 都會自動變逐筆
所以想要啟動類視頻必須(以下兩條件同時成立)
1. 不要設 /tick
2. IP用前面說的那三段之外的其他IP
這樣的邏輯在於所有資訊源都希望是逐筆的,
但Internet上會自動預設開類視頻以節省頻寬增加即時性,
但如果是需求上是只能經過Internet時,仍想要逐筆,則透過/tick來達成設定確認

UniDbf-TS <-- TSHS

這一層 TSHS 預設都是逐筆的(並且與IP完全無關),
因為所有行情都會希望資料是一致性的
但如有特殊原因真的需要類視頻,則透過/notick的方式來達成設定確認

TSHS <-- TSHS-GW

這一層則是把完全相同,一模一樣的TSHS資料延伸到其他地點服務
所以不會有任何 類視頻/逐筆行情 的設定功能

PatsEmu 看連線的 User# 欄位, 有 '*' 號代表逐筆即時的Tick模式連線, 沒有'*'號則是類視頻省頻寬的行情即時模式
所以圖中 UniDbf-SB 設定的連線IP是 172.* 的方式, 但參數沒加 /tick 就會變成類視頻

UniDbf-SB上看連線 User# 欄位, 一樣由 '*' 就可知道 TSHS是逐筆Tick即時模式
但如果UniDbf-SB本身對上游就已經是設成跑類視頻的方式,那麼UniDbf-SB這層以下都會受影響


TSHS合流程式部署示意(for PATS Tags)

張貼者:2014年5月6日 上午3:52Wei-Xiuang Wang   [ 已更新 2014年5月15日 下午8:31 ]


透過TSHS可結合不同的分流資訊甚至與不同來源的資訊作合流匯整

如下圖部署示意中產生兩種合流後的服務來源 (A)-TSHS 與 (B)-DTS


1. GMDS本身以DTS(DBF Transaction Server)服務為主作複製或延伸, 提供高效率資訊同步架構建置,
    DTS可想成是一個Multi Sheets EXCE Table的 Server/Client RTC同步架構, 可參考 DbfTS

2. 被合流的來源可為 PatsRaw 或 PatsEmu已支援之其他導入架構, 可參考 行情程式說明

3. TSHS (Tag Sream History Server), 具備跨平台Client應用, 採Tag編碼簡易協定作為通訊,
    提供有效率的不漏不中斷之服務, 同時可滿足各種系統重啟或Recover的需求, 可參考 TSHS

4. PATS Tags為依據PATS的報價結構定義而成, 可參考 DbfTC API Tag List for PATSFeedServer預設欄位介紹(含特殊欄位規則說明)

5. 欄位Tag #1為統一的全域編碼Symbol, 也就是最後Client端處理數據時會看到的Key(SymbolName或ItemName)

GMDS-PATS Symbol編碼方式

YYMM + contract name + ‘|’ + exchange name
表示期貨商品, 例如:
CME,CMX HG,APR11 編碼為 1104CMX HG|CME
eCBOT,MINI GOLD,AUG12 編碼為 1208MINI GOLD|eCBOT

'@' + contract date + '@' + contract name + '|' + exchange name
表示指數/現貨商品, 例如:
SGX,TW IDX,TW 編碼為 @TW@TW IDX|SGX
SGX,SG IDX,SG 編碼為 @SG@SG IDX|SGX

'#' + YYMMYYMM + '#' + contract name + '|' + exchange name
表示複合商品, 例如:
SGX,TW,JUN11|JUN13 編碼為 #11061306#TW|SGX
SGX,TW,FEB11|DEC12 編碼為 #11021212#TW|SGX

YYMM + contract name + '(' + 'P/C' + Strike + ')' + ‘|’ + exchange name
表示期貨選擇權商品, 例如:
XCME,6E,J3 C1280 編碼為 13046E(C1280)|XCME

其餘未能正確辨識類型的商品皆以指數/現貨的方式編碼
(例如尚未解釋選擇權的版本,看到的選擇權商品編碼是'@'開頭的方式)

6. 使用TSHS-UniDbf-PATS-OBG66作為DTS/TSHS服務轉換,以新的OBG 66格式取代舊的01格式,可提供完整的所有行情資訊欄位供應用
    若使用舊版TSHS-UniDbf-PATS-OBG則只能傳遞原OBG格式能傳遞的資訊+已擴充的66格式欄位(未平倉,隱含買賣價1,2檔)

7. TSHS-UniDbf-PATS-OBG66於未使用Log的運作機制下,有狀態回補機制,故分流下無其他應用需求可選擇不使用Log
    若各分流在每日特定時間點需留存一份完整資訊歷程Log,可透過新的參數指令完成即可, 參考 TSHS /Refresh 參數

8. 在設置TSHS連結DTS時使用的資料來源指定參數, 例如 /Data 0x0021=RMDS
    其中的 'RMDS' 就是最後Client端處理數據時會看到的 DBName,
    不同來源可以設定不同名稱作為識別, 也可以都用相同的名稱作統一代碼, 可視需求調整

9. 合流(B) 可提供 DbfTCdll.dll (DBF Transaction Client API) 建立對DTS的連線取得完整來源資訊, 可參考 DbfTC API連線範例

10. 合流(B) 可透過 fakePATS API模式, 可直接將現行的PATS's API行情程式移轉改連DTS取得資訊, 可參考 fakePATS API
    基於原本的PATS's API行情程式應該都有代碼轉換與價格倍率調整功能, 大致上應該是調整設定即能完成轉移,
    若原系統確實缺乏前述功能,可於fakePATS中加入對應功能調整,或於6.中進行代碼轉換另於合流(B)中作倍率調整設定.
    此方式缺點為僅能透過原本PATS定義的報價結構獲取對應資訊, 來源所提供的其他實用數據欄位須透過一定的設計修改配合後才能應用

11. 合流(A) 可提供 PktEvCdll.dll (Packet Event Client API) 建立對TSHS的連線取得完整來源資訊, 可參考 PktEvC API連線範例 (OBG66格式)

12. 合流(A)中提供的是的RawData格式, 以此架構輸出的是 OBG66 格式, 參考 PktEvC API處理RawData

13. 另可於合流(B)上建置TSHS-UniDbf 提供 合流(C)-TSHS 之服務, 則同 11.合流(A)之服務輸出處理方式, 但輸出為TSHS的Tag-Stream格式

14. 以合流(B)再生源作為整流過的頂源DTS, 因有6.與10.的客製性功能, 這樣的架構可以讓不同資訊源的相同商品最後都提供統一相同的輸出

15. 第14.的說明也就是異源備源的可行性, 在經過一定的調整後確實可以在原PATS行情系統不用修改的狀態下, 完成以路透資訊源直接替代的目的

16. 不作代碼轉換, 單純合流再生的架構方式




Sync-Working 打造最穩定的程式運作

張貼者:2014年4月8日 下午8:07Wei-Xiuang Wang   [ 已更新 2014年5月6日 下午11:53 ]


其實只是一個概念


或許經常使用Multi-Thread設計程式時覺得很方便,
但是系統只要稍為複雜, 很容易因為不容易注意到的疏忽造成資料會錯誤甚至程式不穩定,
因此很多專家的結論是, 儘可能Multi-Thread只在有等待需求的的必要性下來使用,

基於此概念, 若將所有會互相影響的程式功能安置於同一執行緒中運作,
自然而然就成為一個易於持續開發和維護的程式架構囉!

像是中斷(IRQ)或說插斷也都是相同的概念,
現在很多驅動程式不穩定都是因為誤以為Multi-Thread是改善效能的藥方而濫用,可見一般!

以fakePATS的應用為例, Sync-Working相關程式碼內容:




Super Tick Manager 簡介

張貼者:2014年3月29日 上午4:52Wei-Xiuang Wang   [ 已更新 2014年3月29日 上午5:16 ]


首先瞭解:
Index Page Mapping System 是一個架構於萬用動態資料表之上,專門為DB-like系統設計的高效率技術引擎,

而 STM 是 Super Tick Manager 的縮寫,
基於 Index Page Mapping System 作為管理Block的方式延伸為處理Tick的高效率巨量處理引擎

一般Tick的概念發生在商品有交易時的價量逐筆紀錄, 如果有像STM如此高效率又容易使用的引擎,
不僅處理行情系統甚為容易, 也能作為一種3D結構管理應用

可以用EXCEL來想像這樣的架構:
橫向的列 每一欄是一個群, 每個群是一種相同的結構定義
直向的行 每一欄是一個商品, 每個商品於每個群都有一個對應(多重結構)
行列上的每格皆有一個Tick Log, 這樣就形成了一個3D架構,
說是Tick Log, 其實也是一個索引器, 可以作為一系列同構商品的索引管理
雲端核心常說的Map/Reduce說再多都沒用, 用STM就對了!

簡化以API為例:

隨意設計一個結構來用用看:

範例程式碼:

範例程式輸出結果:




fakePATS API : 無痛昇級PATS架構介接GMDS

張貼者:2013年8月2日 上午12:01Wei-Xiuang Wang   [ 已更新 2014年4月23日 下午9:01 ]


簡介:
fakePATS API 可用來替代原本基於PATS's API開發的資訊接收程式,
透過提供與原本PATS's API相同的操作函式,
程式只須將原本的PATS's API改用fakePATS API替代,
無須修改程式碼便能直接改收GMDS的PatsEmu系列DbfTS架構下提供之資訊服務,
立即昇級系統改提供GMDS之路透或各種DMA來源數據!

作為PATS行情供應商:
fakePATS API 本身是透過 DbfTCdll.dll 連接DbfTS, 當來源Tag是PATS-Base系列時
便能模擬原本PATS's API所提供之功能提供資料就像是接到PATS Server一樣

以GMDS使用PATS's API導入資訊之PatsRaw程式作為示範說明

原設定檔內容

PATSini.cfg

//-------------------------------------------------------------
PATSDllFile=PATSAPI.dll
PATSLogonReport=N
PATSLogonReset=Y
PATSInitReset=TRUE
PATSEnvType=ptTestClient
PATSPassword=PRES2345
PATSUserID=TEST4_PF
PATSPriceAddress=203.120.20.221:20000
PATSHostAddress=202.172.185.10:18030
PATSLicenseKey=TEST4
PATSApplicationID=TEST4
PATSApplicVersion=1.0
//-------------------------------------------------------------

經以下步驟作設定調整即能改接GMDS

1. 將使用之 PATSAPI.dll 改用 fakePATS.dll 取代
(不能透過設定變更的系統, 可直接把檔案取代掉)

2. PriceAddress 與 HostAddress 擇一設定即可, 改連PatsEmu/UniDbfTS
(由於GMDS僅須一個連線, 兩個都設一樣或只設定一個fakePATS便會正確連結)

3. 透過LicenseKey用來指定註冊之DataSet

4. ApplicationID與ApplicVersion則會當作是連線GMDS之User代碼

程式完全不用修改, 原本連接PATS的系統 變成介接GMDS了!

新設定檔內容

PATSini.cfg

//-------------------------------------------------------------
PATSDllFile=fakePATS.dll
PATSLogonReport=N
PATSLogonReset=Y
PATSInitReset=TRUE
PATSEnvType=ptTestClient
PATSPassword=PRES2345
PATSUserID=TEST4_PF
PATSPriceAddress=192.168.1.117:31213
PATSHostAddress=192.168.1.117:31213
PATSLicenseKey=0x0022=PATS
PATSApplicationID=TEST4
PATSApplicVersion=1.0
//-------------------------------------------------------------

成功獲得GMDS系統(DMA: PatsEmu-CME)之商品資訊
(透過PATS的Callback DataDLCompelete, 抓取所有商品進行訂閱)

於PatsEmu-CME可看到連線訊息

一般正規的PATS's API應用程式, 透過以下API完成資訊行情接收的皆能不用修改程式碼, 直接套用

已模擬的Callback (未模擬的的會於Register時回應 ptErrFalse)

 VOID WINAPI HostLinkStateChange(LinkStateStructPtr data);
 VOID WINAPI PriceLinkStateChange(LinkStateStructPtr data);
 VOID WINAPI DataDLComplete();
 VOID WINAPI PriceUpdate(PriceUpdStructPtr PriceUpdate);
 VOID WINAPI ContractAdded(ContractUpdStructPtr data);
 VOID WINAPI Ticker(TickerUpdStructPtr data);

已模擬的API (未模擬的會於呼叫時回應 ptErrFalse, 或選用 ptSuccess )

 ptRegisterCallback(INT callbackID, ProcAddr CBackProc)
 ptRegisterLinkStateCallback(INT callbackID, LinkProcAddr CBackProc)
 ptRegisterPriceCallback(INT callbackID, PriceProcAddr CBackProc)
 ptRegisterContractCallback(INT callbackID, ContractProcAddr CBackProc)
 ptRegisterTickerCallback(INT callbackID, TickerUpdateProcAddr CBackProc)
 ptRegisterSettlementCallback(INT callbackID, SettlementProcAddr CBackProc)
 ptCountContracts(PINT Count)
 ptGetContract(INT Index, ContractStructPtr Contract)
 ptGetContractByName(ExchNamePtr ExchangeName, ConNamePtr ContractName, ConDatePtr ContractDate, ContractStructPtr Contract)
 ptInitialise(CHAR Env, LPCSTR  APIversion, LPCSTR  ApplicID, LPCSTR  ApplicVersion, LPCSTR License, boolean InitReset)
 ptReady( )
 ptDisconnect( )
 ptSetHostAddress(LPCSTR  IPaddress, LPCSTR IPSocket)
 ptSetPriceAddress(LPCSTR  IPaddress, LPCSTR IPSocket)
 ptSubscribePrice(ExchNamePtr ExchangeName, ConNamePtr ContractName, ConDatePtr ContractDate)
 ptGetPriceForContract(ExchNamePtr ExchangeName, ConNamePtr ContractName, ConDatePtr ContractDate, PriceStructPtr CurrentPrice)

 ptLogOn(LogonStructPtr LogonDetails)
 ptGetLogonStatus(LogonStatusStructPtr LogonStatus)




如同正常的PATS's API應用方式
1. 正常必要的CB設定: HostLinkStateChange, DataDLComplete, PriceUpdate (或 Ticker )
2. 設立連結源: ptSetHostAddress
3. 呼叫 ptReady 開始運行
4. 於 HostLinkStateChange 中被通知已連線, 呼叫 ptLogOn 進行登入動作
5. 於 DataDLComplete 中透過 ptCountContracts 與 ptGetContract 取得商品序列, 同時以 ptSubscribePrice 進行訂閱
6. 於 PriceUpdate , Ticker 通知行情時, 呼叫 ptGetPriceForContract 取得報價結構抓取所需數據

自主開發
提供授權客戶程式源碼, 可自行調整與擴充維護fakePATS API功能,
交易的部分若有合適的配合系統當然也能改用自己的交易平台來取代



1-10 of 38