介紹
今天要串接的是 BitMEX 交易平台,我們串接的市場會是 XBTUSD
,由於是期貨市場,我們會依序串接幾個主要的 API:
- Orderbook
- Create Order
- Get Order
- Get Position
- Close Position
很重要的一點就是我們一定要參考官網的 API 文件,由於正式環境要放真錢,我們只用測試環境示範
正式環境
測試環境
前置作業
- 請將 BitLook 裡面這個程式下載,建議利用
git clone
的方式,但是非必要。 - 需要安裝
nodejs
(這部分應該上網查一下就可以了)。我使用的nodejs
版本是v10.17.0
建議一樣,減少出問題的機會。 - 一顆想要透過程式交易的心。
以上都準備好了我們就要開始了~
正式開始
Step1: 申請帳號
請自行到以上網址申請帳號
Step2: 取得 API Key
這個用途是為了讓程式對平台做操作時,要讓平台知道我們到底是誰,所以藉由這個唯一的 Api Key 去達成這個目的。
記得這個資料不能隨便給其他人,等於帳號密碼的意思
我們可以看到 BitLook 有一個 setting.js
的檔案,照著上圖操作即可
Step 3: Command Line 到下載 BitLook 的檔案
我的長這樣,如果你的跟我的不一樣不用大驚小怪,每個人的本來就不一樣。
以下是串接 API 的部分
Step 4: 取得 Orderbook
我們先打開 index.js
檔案,接著把以下這行註解的程式碼打開。(記得存擋)
bitMex.getOrderBook({symbol: 'XBTUSD', depth: 1}).then(resp => console.log(resp));
其中:symbol 是決定要看哪一個市場;depth 是要看多少層的 orderbook。
可以自行換掉後面的參數試試 eg: {symbol: 'XBTUSD', depth: 10}
然後我們回到 Step 3 的地方輸入 node index.js
,如下圖:
以上的圖其實就是網站的 Orderbook (與下圖數字不一樣的原因是因為截圖時 Orderbook 已經變動了)
Step 5: 建立訂單 Create Order
接下來就是下單了,我們準備利用程式幫我們下單。
一樣我們繼續編輯 index.js
檔案,接著把以下這行註解的程式碼打開。
bitMex.createOrder({symbol: 'XBTUSD', orderQty: 20}).then(resp => console.log(resp));
接著一樣回到 Step 3 的地方再執行一次 node index.js
。
這裡的意思是我們在 XBTUSD
這個市場下 20 美元的訂單,由於我們沒有設定額外參數,所以我們是下 market 單,會立即成交。緊接著我們就會看到下圖:
可自行將 bitMex.createOrder 裡面參數換成
{symbol: 'XBTUSD', orderQty: 20, ordType: 'Limit', price: 8000}
如果我們改成這個參數,看到的則會如下圖
到目前為止我們已經完成查看 orderbook 以及下單了。
Step 6: 查詢 Order
既然我們下單了,如果 Order 沒有成交,在 pending 狀態,我們也需要程式碼去查詢狀況。(也就是查詢上圖 Active Orders 的 Tab 中顯示的那張單)
那我們一樣在 index.js
中,打開以下這行的註解,然後執行 node index.js
bitMex.getOrder({symbol: 'XBTUSD', filter: JSON.stringify({open: true})}).then(resp => console.log(resp));
這裡我們發現 getOrder 裡面的參數多了
filter
這個字,這是因為 BitMEX 查詢 ORDER 的 API 中,如果沒有傳入只看 Open Order (也就是 Active Order:未成交的 Order),會將歷史成交的記錄也撈出來。目前我們只需要專注在未成交的 Order 就好了。各位也可以自行將上面那行成是改成
bitMex.getOrder({symbol: 'XBTUSD'}).then(resp => console.log(resp));
試試看
執行完後我們會看到類似下圖的資料:
在這張圖我們就可以找到許多資訊。
Step 7: 查詢 Position
再來就是我們下的 Order 如果成交了,它就會跑到 Position 也就是變成我們開始持倉了。Position 就是用來查看我們持倉部位的資訊。
一樣在 index.js
中,打開以下這行的註解,然後執行 node index.js
bitMex.getPosition({symbol: 'XBTUSD'}).then(resp => console.log(resp));
接著我們會看到類似下圖的資料:
由於資料很多,無法完整截圖,但可以看到這邊提供的資料比網頁看到的資料更詳盡。我們可以看到我們平均下單的價格
、Liquidation price
、未實現損益
等等。有了這些資料以後,交易員就可以利用自己的決策做策略了。
Step 8: Close Position
接下來就是 Close Position。
有幾種情況我們需要關閉我們的倉位:
- 獲利了結
- 止損
- 手癢 (當然我們用程式交易就是要避免手癢的狀況? 有時好像還是會手癢偷改程式 XD)
我們在 index.js
中,打開以下這行的註解,然後執行 node index.js
bitMex.closePosition({symbol: 'XBTUSD'}).then(resp => console.log(resp));
然後我們沒意外大概就會看到我們的 Position 消失了。
--
以上我們 BitMEX 平台 API 的串接也算是告一段裸落。但事實上它們 API 之多,各位有興趣可以自己查閱或是詢問專業的 Trader。