C#交易API使用手冊
C#交易API流程說明
API驗證流程
請先下載API元件,並使用您的程式登入元富API,登入測試環境。
ROD下單、改單、刪單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。
IOC下單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。
FOK下單(依照數位API網站線上驗證下單內容,於您的程式進行委託下單)。
下單完成後,於數位API網站線上驗證頁面輸入委託書號。
以上3.4.5步驟均填入委託書號後,於數位API網站線上驗證頁面點選"驗證"。
驗證成功後及驗證完成,須待人員審核,請稍待審核流程,方能開通權限。
關聯網站
C#交易API範例程式說明
1. 系統需求
-
.Net Framwork 4.0
-
Visual Studio 2010
-
須先以系統管理員身分執行路徑:WPF_MasterFutTradeSample\bin_x86\RegOcx.bat,進行api元件註冊(檔案路徑不可存在中文)
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 | 錯誤訊息 |