資訊系統/架構/產品‎ > ‎KGQ‎ > ‎GMDS相關文章‎ > ‎GMDS‎ > ‎

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

張貼者:2013年8月2日 上午12:01Wei-Xiuang Wang   [ 已更新 2018年6月15日 上午12:57 ]

簡介:
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功能,
交易的部分若有合適的配合系統當然也能改用自己的交易平台來取代

升級為x64專案
由於API亦提供x64版的DLL,當然舊的應用想切換升級為x64的版本也是理所當然沒問題


註解