C#交易API使用手冊

C#交易API流程說明

API驗證流程

STEP1

請先下載API元件,並使用您的程式登入元富API,登入測試環境。

STEP2

ROD下單、改單、刪單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。

STEP3

IOC下單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。

STEP4

FOK下單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。

STEP5

下單完成後,於數位API網站線上驗證頁面輸入委託書號。

STEP6

以上3.4.5步驟均填入委託書號後,於數位API網站線上驗證頁面點選"驗證"。

STEP7

驗證成功後及驗證完成,須待人員審核,請稍待審核流程,方能開通權限。

關聯網站

C#交易API範例程式說明

1. 系統需求

  • .Net Framwork 4.0

  • Visual Studio 2010

  • 須先以系統管理員身分執行路徑:WPF_MasterFutTradeSample\bin_x86\RegOcx.bat,進行api元件註冊(檔案路徑不可存在中文)

2. 執行Sample

Docs UI Kit
1

選擇連線至"測試主機",先確認能夠正常使用

2

輸入身分證字號、密碼後,登入帳號

3

填入商品代號、委託價、委託口數,按下下單

3. 回報狀態事件

3.1 系統訊息

OnSystemEvent:系統訊息事件

欄位名稱 格式 說明
Msg String 系統訊息文字

3.2 期貨交易連線狀態

OnTxConnEvent:期貨交易連線狀態事件

欄位名稱 格式 說明
IsConnected Boolean 是否已連線

3.3 返回可交易期貨帳號

OnAccListEvent:返回可交易期貨帳號事件

欄位名稱 格式 說明
AccList List<TCommonAccData> 可交易期貨帳號列表

3.4 期貨交易回補完成

OnRecoverEvent:期貨交易回補完成事件

欄位名稱 格式 說明
aIsFinished Bool 回補是否成功
aErrMsg String 錯誤訊息

3.5 期貨交易即時結果回報

OnResultReportEvent:期貨交易即時結果回報事件

欄位名稱 格式 說明
aReportData TReportData 期貨即時結果回報格式

3.6 GW查詢連線狀態

OnGWQryConnEvent: GW查詢連線回報事件

欄位名稱 格式 說明
IsConn Boolean 是否已連線

3.7 GW查詢結果-失敗

OnGWQryResFailEvent: GW查詢結果-失敗回報事件

欄位名稱 格式 說明
aAccNo7 String 七碼交易帳號
aQryKind TQryKind 查詢庫存彙總:TQryKind.BALANCE
查詢庫存彙總(盤後盤):TQryKind.BALANCE_C
查詢保證金: TQryKind.MARGIN_TOT
查詢保證金(盤後盤): TQryKind.MARGIN_TOT_After
計算最佳化保證金: TQryKind.ComQueryB
全拆平組:TQryKind.ComBestB
aErrMsg String 失敗訊息

3.8 GW查詢結果-成功

OnGWQryResSuccEvent:GW查詢結果-成功回報事件

欄位名稱 格式 說明
aAccNo7 String 七碼交易帳號
aQryKind TQryKind 查詢庫存彙總:TQryKind.BALANCE
查詢庫存彙總(盤後盤):TQryKind.BALANCE_C
查詢保證金: TQryKind.MARGIN_TOT
查詢保證金(盤後盤): TQryKind.MARGIN_TOT_After
計算最佳化保證金: TQryKind.ComQueryB
全拆平組:TQryKind.ComBestB
aResList Object -
aResList TBalLSS 庫存彙總物件:List<TBalRec>
aResList TBalLSS 庫存彙總(盤後盤) 物件:List<TBalRec>
aResList TMarginRec 保證金物件
aResList TMarginRec 保證金(盤後盤)物件
aResList TOptComboLSS 計算最佳化保證金物件:List<TOptComboData>
aResList String 全拆平組結果

3.9 期貨公告

OnAnnouncementEvent: 期貨公告回報事件

欄位名稱 格式 說明
data String 公告訊息

4. API物件欄位說明

4.1 新單格式:NewOrderMessage

欄位名稱 格式 說明
AccountFlag String 投資人身份碼(註:預帶1=國內自然人)
Market MarketEnum mFutures:期貨
mOptions:選擇權
Side SideEnum sBuy:買
sSell:賣
Symbol String 商品委託代碼(TXFC1、TXO17000C1)
OrderQty Int 委託口數
Price Double 委託價
OrderType OrderTypeEnum otMarket:市價
otLimit:限價
otMarketWithProtection:一定範圍市價
TimeInForce TimeInForceEnum tifROD:ROD
tifIOC:IOC
tifFOK:FOK
PositionEffect PositionEffectEnum peOpen:新倉
peClose:平倉
peAuto:自動
TradingSessionID TradingSessionIDEnum 請填:TradingSessionIDEnum.tsAuto
EventType EventTypeEnum evtCall:Call
evtPut:Put
(選擇權商品者須填)
StrikePrice double 履約價(選擇權商品者須填, EX:17600)

4.2 刪單格式:CancelOrderMessage

欄位名稱 格式 說明
OrderID String 委託單號
Symbol String 商品委託代碼(TXFC1、TXO17000C1)
Side SideEnum sBuy:買
sSell:賣
Market MarketEnum mFutures:期貨
mOptions:選擇權

4.3 改單格式:ReplaceOrderMessage

欄位名稱 格式 說明
OrderID String 委託單號
Symbol String 商品委託代碼(TXFC1、TXO17000C1)
Side SideEnum sBuy:買
sSell:賣
Market MarketEnum mFutures:期貨
mOptions:選擇權
OrderType OrderTypeEnum otMarket:市價
otLimit:限價
otMarketWithProtection:一定範圍市價
TimeInForce TimeInForceEnum tifROD:ROD
tifIOC:IOC
tifFOK:FOK
OrderQty Int 減量口數(改價時請略過)
Price Double 新價格(減量時略過)

註:改價於委託價格欄位填入新委託價、改量於委託股數欄位填入新的委託股數,且不要同時改量與改價



4.4 可交易帳號格式:TAccData

欄位名稱 格式 說明
BkrNo String 分公司代碼
AccNo String 分公司代碼-七碼子帳號
MAccNo String 分公司代碼-七碼母帳號
AccNo7 String 七碼子帳號
MAccNo7 String 七碼母帳號
IsSub String 是否為母子帳
CARec.CAStu Boolean 憑證狀態
CARec.CAMsg String 憑證狀態訊息
CName String 戶名
IdNo String 身份證

4.5 回報格式:TReportData

欄位名稱 格式 說明
OrderStatus String 2:委託成功
4:改單成功
6:已刪單
7:委託成交
11:委託失敗
AccNo7 String 七碼子帳號
BSType SideEnum sBuy:買
sSell:賣
CallPut EventTypeEnum evtCall:Call
evtPut:Put
CumQty Int 已成交口數
DealPrice String 成交價
DealTime String 成交時間
DelQty Int 已刪單口數
Market MarketEnum mFutures:期貨
mOptions:選擇權
Message String 訊息
Month String 交割月份
OrderID String 單號
OrderPrice Double 委託價
OrderQty Int 委託口數
OrderTime String 委託時間
OriginalQty Int 原始委託口數
PositionEffect PositionEffectEnum peOpen:新倉
peClose:平倉
peAuto:自動
PriType OrderTypeEnum otMarket:市價
otLimit:限價
otMarketWithProtection:一定範圍市價
SegMkt String 盤別
StrikeP Double 履約價
Symbol String 商品委託代碼
TimeInForce TimeInForceEnum tifROD:ROD
tifIOC:IOC
tifFOK:FOK
UserDefine String 使用者自定義

4.6 庫存格式: TBalRec

欄位名稱 格式 說明
BSType String B/S
CallPut String C/P
今日平倉損益 String -
今日成交買口數 String -
今日成交賣口數 String -
今日買均價 String -
今日賣均價 String -
交割月 String -
原碼商品 String -
庫存口數 String -
庫存均價 String -
商品代碼 String -
履約價 String -

4.7 最佳化保證金: TOptComboData

欄位名稱 格式 說明
AccNo7 String 七碼交易帳號
Symbol1 String 商品1
CallPut1 String CallPut1
StrikePrice1 double 履約價1
BuySell1 String 買賣1(B/S)
Date1 String 年月1
Symbol2 String 商品2
CallPut2 String CallPut2
StrikePrice2 double 履約價2
BuySell2 String 買賣2(B/S)
Date2 String 年月2
Qty String 口數
SingleMargin String 單式保證金

4.8 保證金格式: TMarginRec

欄位名稱 格式 說明
今日存款 String -
今日提款 String -
手續費 String -
加收保證金 double -
可動用保證金 String -
未沖銷期貨浮動損益 String -
未沖銷買方選擇權市值B String -
未沖銷賣方選擇權市值C String -
本日期貨平倉損益淨額 String -
本日餘額 String -
存提 String -
有價證券可用餘額 String -
有價證券抵繳總額 String -
到期履約損益 String -
前日餘額 String -
客戶名稱 String -
昨權益總值 String -
風險指標 String -
原始保證金 String -
期交稅 String -
超額or追繳保證金 String -
維持保證金 String -
總維持率 String -
權利金收入與支出 String -
權益數A String -
權益總值 String -

4.9 資券配額格式: TCrQtyAndDbQty

欄位名稱 格式 說明
Symbol String 股票代碼
IsCrStop String 是否停資(Y/N)
CrQty String 融資配額股數
IsDbStop String 是否停券(Y/N)
DbQty String 融券配額股數
CrRate String 資成數
DbRate String 券成數
CanShortUnderUnchanged String 平盤下是否可下券(Y/N)
DayTrade String X=可現股當沖;Y=僅可先買後賣沖;其他為不可現股當沖
DayTradeCName String 當沖中文描述
ResultStr String 資券配額查詢結果
QryDateTime String 查詢時間

C#交易API實作說明

物件名稱:MasterTradeAPI:

API主要物件,負責API證券連線、交易、回報等行為

1. 連線

                                                        
                                fMasterFutTradeAPI.Connect(sLoginID, pwbx_LoginPw.Password, euSrvKind, isForce);
                            
                            

Connect:建立連線

輸入/輸出 欄位名稱 格式 說明
In LoginID String 使用者名稱
In LoginPw String 使用者密碼
In euSrvKind TServerKind Release:連線至正式主機
Test:連線至測試主機
In IsForce String 單一帳號認證成功即下單

2. 切斷連線

                            
                                fMasterFutTradeAPI.Disconnect();
                            
                            

Disconnect:切斷連線

3. 下單

                            
                                var tmpAcc = cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData;
                                var newObj = new SpeedyAPI.NewOrderMessage();//新單物件
                                newObj.AccountFlag = "1";//投資人身份碼(註:預帶1=國內自然人)
                                newObj.Market = (cbx_NewOrd_Market.SelectedItem as TSelectItem).Key;//市場別(期貨、選擇權)
                                newObj.Side = (cbx_NewOrd_BSType.SelectedItem as TSelectItem).Key;//買賣別
                                newObj.Symbol = tbx_NewOrd_ProdID.Text;//商品委託代碼
                                newObj.OrderQty = int.Parse(tbx_NewOrd_OrdQty.Text);//委託口數
                                
                                //委託價(註:若有小數點,小數位數要補滿8碼, 以免double精準度不夠)
                                decimal dPrice = decimal.Parse(tbx_NewOrd_OrdPrice.Text);
                                newObj.Price = Convert.ToDouble(dPrice);
                                
                                newObj.OrderType = (cbx_NewOrd_PriType.SelectedItem as TSelectItem).Key;//限市價
                                newObj.TimeInForce = (cbx_NewOrd_FIR.SelectedItem as TSelectItem).Key;//ROD、IOC、FOR
                                newObj.PositionEffect = (cbx_NewOrd_Position.SelectedItem as TSelectItem).Key;//新平倉
                                //請注意:期貨不可用"自動"
                                if (newObj.Market == SpeedyAPI.MarketEnum.mFutures && newObj.PositionEffect ==
                                SpeedyAPI.PositionEffectEnum.peTAIFEXAuto)
                                {
                                MessageBox.Show("期貨不可用「自動」");
                                return;
                                }
                                newObj.TradingSessionID = SpeedyAPI.TradingSessionIDEnum.tsAuto;
                                //填入選擇權相關資料
                                if (newObj.Market == SpeedyAPI.MarketEnum.mOptions)
                                {
                                decimal dStrikeP;
                                if (!decimal.TryParse(tbx_NewOrd_StrikeP.Text, out dStrikeP))
                                dStrikeP = 0m;
                                newObj.EventType = (cbx_NewOrd_CallPut.SelectedItem as TSelectItem).Key;
                                newObj.StrikePrice = Convert.ToDouble(dStrikeP);//選擇權商品,須填履約價, EX:17600(註:若有小數點,小數位數要補滿8碼, 以免double精準度不夠)
                                }                                
                                //送單
                                string sMsg = "";
                                fMasterFutTradeAPI.SendNewOrder(newObj, tmpAcc, tbx_NewOrd_UserData.Text.Trim(), ref sMsg)

                            
                            

SendNewOrder:新單

輸入/輸出 欄位名稱 格式 說明
In aMsgObj NewOrderMessage Speedy新單物件
In aAccData TAccData MLApi_Fut_SpdySSO的帳號物件
In aUserDefine String 使用者自定義
In aMsgObj NewOrderMessage Speedy新單物件
In/Out aMsg String 訊息

4. 刪單

                            
                            var tmpAcc = cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData;
                            var delObj = new SpeedyAPI.CancelOrderMessage();// Speedy 刪單元件
                            delObj.OrderID = tbx_DelOrd_OrdNo.Text.Trim();//單號
                            delObj.Symbol = tbx_DelOrd_ProdID.Text; //原委託單的交易所委託代碼(EX:TXFF1)
                            delObj.Side = (cbx_DelOrd_BSType.SelectedItem as TSelectItem).Key;//買賣別
                            delObj.Market = (cbx_DelOrd_Market.SelectedItem as TSelectItem).Key;//市場別(0=期貨 1=選擇權)
                            //送單
                            string sMsg = "";
                            fMasterFutTradeAPI.SendDelOrder(delObj, tmpAcc, tbx_DelOrd_UserData.Text.Trim(), ref sMsg)
                          
                            
                            

SendDelOrder:刪單

輸入/輸出 欄位名稱 格式 說明
In aMsgObj CancelOrderMessage Speedy刪單物件
In aAccData TAccData MLApi_Fut_SpdySSO的帳號物件
In aMsgObj CancelOrderMessage Speedy刪單物件
In aUserDefine String 使用者自定義
In/Out aMsg String 訊息

5. 改單

                            
                                var tmpAcc = cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData;
                                
                                var chgQObj = new SpeedyAPI.ReplaceOrderMessage();//Speedy 改單元件-減量
                                chgQObj.OrderID = tbx_ChgQOrd_OrdNo.Text;//單號
                                chgQObj.Symbol = tbx_ChgQOrd_ProdID.Text; //原委託單的交易所委託代碼(EX:TXFF1)
                                chgQObj.Side = (cbx_ChgQOrd_BSType.SelectedItem as TSelectItem).Key;//買賣別
                                chgQObj.Market = (cbx_ChgQOrd_Market.SelectedItem as TSelectItem).Key;//市場別(0=期貨 1=選擇權)
                                chgQObj.OrderQty = int.Parse(tbx_ChgQOrd_OrdQty.Text);//欲減口數
                                chgQObj.OrderType = (cbx_ChgQOrd_PriType.SelectedItem as TSelectItem).Key;//限市價
                                chgQObj.TimeInForce = (cbx_ChgQOrd_FIR.SelectedItem as TSelectItem).Key;//ROD、IOC、FOK
                                
                                //送單
                                string sMsg = "";
                                fMasterFutTradeAPI.SendChgOrder(chgQObj, tmpAcc, tbx_ChgQOrd_UserData.Text.Trim(), ref sMsg)                                                    
                            
                            

SendChgOrder:改單

輸入/輸出 欄位名稱 格式 說明
In aMsgObj ReplaceOrderMessage Speedy改單物件
In aAccData TAccData MLApi_Fut_SpdySSO的帳號物件
In aUserDefine String 使用者自定義
In/Out aMsg String 訊息

6. 查詢庫存彙總

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        fMasterFutTradeAPI.SendGWQry(MLApi_Fut_GWQrySSO.TQryKind.BALANCE, tmpAcc.AccNo7, out sErrMsg)						  
                        
                        

SendGWQry:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.BALANCE」
In aAccNo7 String 七碼交易帳號
Out aErrMsg String 錯誤訊息

7. 查詢庫存彙總(盤後盤)

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        fMasterFutTradeAPI.SendGWQry(MLApi_Fut_GWQrySSO.TQryKind.BALANCE_C, tmpAcc.AccNo7, out sErrMsg)

                        
                        

SendGWQry:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.BALANCE_C」
In aAccNo7 String 七碼交易帳號
Out aErrMsg String 錯誤訊息

8. 保證金查詢

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        fMasterFutTradeAPI.SendGWQry(MLApi_Fut_GWQrySSO.TQryKind.MARGIN_TOT, tmpAcc.AccNo7, out sErrMsg)

                        
                        

SendGWQry:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.MARGIN_TOT」
In aAccNo7 String 七碼交易帳號
Out aErrMsg String 錯誤訊息

9. 保證金查詢(盤後盤)

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        fMasterFutTradeAPI.SendGWQry(MLApi_Fut_GWQrySSO.TQryKind.MARGIN_TOT_After, tmpAcc.AccNo7, out sErrMsg)
                        
                        

SendGWQry:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.MARGIN_TOT_After」
In aAccNo7 String 七碼交易帳號
Out aErrMsg String 錯誤訊息

10. 保證金組合試算

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        var sKind = (rbComBestKind_Y.IsChecked.Value) ? "Y" : "N"; //Y=只有選擇權組單;N=可組非期交所全部組單
                        fMasterFutTradeAPI.SendGWQry_ComBest(MLApi_Fut_GWQrySSO.TQryKind.ComQueryB, tmpAcc.AccNo, sKind, out sErrMsg)
                        
                        

SendGWQry_ComBest:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.ComQueryB
In aAccNo7 String 七碼交易帳號
In sKind String Y=只有選擇權組單;N=可組非期交所全部組單
Out aErrMsg String 錯誤訊息

11. 全拆平組

                        
                        string sErrMsg = string.Empty;
                        var tmpAcc = (cbx_FutAcc.SelectedItem as MLApi_Fut_SpdySSO.TAccData);
                        var sKind = (rbComBestKind_Y.IsChecked.Value) ? "Y" : "N"; //Y=只有選擇權組單;N=可組非期交所全部組單
                        fMasterFutTradeAPI.SendGWQry_ComBest(MLApi_Fut_GWQrySSO.TQryKind.ComBestB, tmpAcc.AccNo, sKind, out sErrMsg)

                        
                        

SendGWQry_ComBest:GW查詢

輸入/輸出 欄位名稱 格式 說明
In aQryKind TQryKind 請填入「TQryKind.ComBestB」
In aAccNo7 String 七碼交易帳號
In sKind String Y=只有選擇權組單;N=可組非期交所全部組單
Out aErrMsg String 錯誤訊息