介紹
今天要串接的是 BTSE 交易平台,這個平台我稍微比較熟悉一點(因為輸了一些錢 XD)。接下來,我們串接的市場會是 BTCPFC
,這是一個 Perpetual 的市場,也就是說,雖然它是期貨市場,但理論上永遠不會到期(除非平台不完了?)。
好,那我們會依序串接幾個主要的 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
的檔案,接著這個檔案應該會長這樣:
let testnet = {
BTSE: {
btseUrl: 'https://testapi.btse.io',
btseApi: 'ZjI5NTIzNWUzMzY1NGNlZmI5MWI2YTAwM2FlYTM4ZDk=',
btseSecret: 'ZWI1OTU2OGUxOWYzNGRj',
},
...
Step 3: Command Line 到下載 BitLook 的檔案
開啟 Terminal 到下載 BitLook
的檔案底下。我的長這樣,如果你的跟我的不一樣不用大驚小怪,每個人的本來就不一樣。
以下是串接 API 的部分
Step 4: 取得 Orderbook
我們先打開 index.js
檔案,接著把以下這行註解的程式碼打開。(記得存擋)
btse.getOrderBook({symbol: 'BTCPFC', depth: 1}).then(resp => console.log(resp));
其中:symbol 是決定要看哪一個市場,我們今天要看的是
BTCPFC
;depth 是要看多少層的 orderbook (各位可以自行改變數字,若沒傳或是傳 0,會拿到全部的資料)可以自行換掉後面的參數試試 eg: {symbol: 'BTCPFC', depth: 10} or {symbol: 'BTCPFC'}
然後我們回到 Step 3 的地方輸入 node index.js
,如下圖:
以上的圖其實就是網站的 Orderbook (與下圖數字不一樣的原因是因為截圖時 Orderbook 已經變動了)
Step 5: 建立訂單 Create Order
接下來就是下單了,我們準備利用程式幫我們下單。
一樣我們繼續編輯 index.js
檔案,接著把以下這行註解的程式碼打開。
btse.createOrder({
"size": 1,
"price": 8000,
"side": "BUY",
"symbol": "BTCPFC",
"type": "LIMIT"
}).then(resp => console.log(resp)).catch(e => e);
接著一樣回到 Step 3 的地方再執行一次 node index.js
。
這裡的意思是我們在 BTCPFC
這個市場下 1 size 的訂單 (= 0.001 個 BTC),由於我們是下限價單,而且現在價格 9170.0,所以不會成交。緊接著我們就會看到下圖:
可自行將 bitMex.createOrder 裡面參數換成
{ "size": 1, "side": "BUY", "symbol": "BTCPFC", "type": "MARKET" }
如果我們改成這個參數再執行一次,看到的則會如下圖
這代表我們已經確實用 9193.5 的價格買到 1 size 的 BTC 了
Step 6: 查詢 Order
既然我們下單了,如果 Order 沒有成交,在 pending 狀態,我們也需要程式碼去查詢狀況。(也就是查詢上圖 Active Orders 的 Tab 中顯示的那張單)
那我們一樣在 index.js
中,打開以下這行的註解,然後執行 node index.js
btse.getOpenOrder({symbol: 'BTCPFC'}).then(resp => console.log(resp)).catch(e => e);
這裡我們可以看到我們之前下單的狀況(我們剛剛用 8000 買了 1 size 的限價單)
執行完後我們會看到類似下圖的資料:
利用這張圖我們可以獲得許多資訊。
Step 7: 查詢 Position
再來就是我們下的 Order 如果成交了,它就會跑到 Position 也就是變成我們開始持倉了。Position 就是用來查看我們持倉部位的資訊。
一樣在 index.js
中,打開以下這行的註解,然後執行 node index.js
btse.getPosition({symbol: 'BTCPFC'}).then(resp => console.log(resp));
接著我們會看到類似下圖的資料:
從這張圖我們可以看到我們平均下單的價格 (entryPrice)
、liquidationPrice
、未實現損益 (unrealizedProfitLoss)
等等。有了這些資料以後,交易員就可以利用自己的決策做策略了。
Step 8: Close Position
接下來就是 Close Position。
有幾種情況我們需要關閉我們的倉位:
- 獲利了結
- 止損
- 手癢 (當然我們用程式交易就是要避免手癢的狀況? 有時好像還是會手癢偷改程式 XD)
我們在 index.js
中,打開以下這行的註解,然後執行 node index.js
btse.closePosition({symbol: "BTCPFC", type: 'MARKET'}).then(resp => console.log(resp));
然後我們沒意外大概就會看到我們的 Position 消失了。
這裡我們是利用市價去 close 我們的 Position,事實上也可以利用現價去關閉我們的 Position
eg: 指定要用 10000 的價錢去關閉我們的部位
btse.closePosition({symbol: "BTCPFC", type: 'LIMIT', price: '10000'}).then(resp => console.log(resp));
--
以上我們 BTSE 平台 API 的串接也算是告一段落。但事實上如果想更了解的話可能需要自己看文件或是詢問更專業的人。