隨着區塊鏈資產量化交易的發展,越來越多的區塊鏈資產交易者認識到了量化交易這個工具。但是作為這個圈子的萌新成員,對於很多概念甚是迷惑。被各種名詞、軟件、信息等弄的暈頭轉向。本篇就帶你一起認識、熟悉常見的概念,從多方面了解區塊鏈資產量化交易中的各種有用的信息。本篇先概括基本概念,然后對應這些基本概念在FMZ量化交易平台上舉例說明。
-
交易所
首先我們要認識交易所這個概念,我們需要交易手中的區塊鏈資產進行投機、投資等需要在交易所進行。目前交易所有很多,資深的、新興的、規模大的、規模小的。對於在哪個交易所進行程序化、量化交易這些需要根據方方面面的信息自行篩選。
-
交易所賬號
交易所賬號,就是在這個交易所注冊開設的賬戶。區塊鏈資產可以存儲到這個賬戶中進行交易。有些交易所主賬戶下又可以創建、設置子賬戶方便資產分開進行交易、投機。每個交易所的子賬戶申請創建、機制、使用等方面各不相同,需要具體到交易所網站上查詢這些信息。或者咨詢交易所客服。在交易所網站用賬戶登錄后,通常可以看到區塊鏈資產可存放的地方分為多個“賬戶”(這里是邏輯上的賬戶,並非交易所賬戶)。通常分為錢包賬戶,幣幣交易賬戶,理財賬戶、合約交易賬戶 等。具體可能每個交易所有差別。通常沖入區塊鏈資產(幣)之后,是在某個賬戶下的(可能是在錢包賬戶,或者直接到幣幣交易賬戶)。所以充值后要檢查下資產到哪里了,需要划轉時划轉(比如需要在期貨交易時)。
-
交易所系統的API接口
很多沒有用過這個交易所功能的同學可能就問了:“什么是API接口”。API接口就是交易所系統給出的可以允許程序操作的接口。簡單說就是交易所給出了一個通道允許(實盤腳本)程序去在交易所系統(交易所網站上某個交易對盤面,這里自行腦補)中下單、撤單、查單、查賬戶資產、查持倉等操作。交易所API分為多種類型的接口,通常有
REST
協議接口、WebSocket
協議接口。很少的交易所也提供FIX
協議接口。這些只做了解,我們用的最多的還是REST
協議的接口,這些接口文檔通常都可以在交易所官網最下部有API字樣的鏈接中找到。有時候查詢一些接口報錯信息,還是需要到這些文檔中查看的。每家交易所的API系統都各不相同,差異化比較大,對於具體問題就要具體查看文檔。如果你不是一個策略開發者,那么這些內容可以僅作為了解。 -
賬號的API KEY
賬號API KEY這個就必須認真了解清楚了,因為這個東西關乎你的交易所中存放的區塊鏈資產安全。上面說了API接口是通道,那么API KEY這個就可以理解為通道的通行證。因為有了訪問通道,不能什么程序都允許訪問,那樣就很危險了。所以需要驗證,而API KEY就是用來驗證身份的。所以API KEY關乎你的資產安全,必須妥善保管。通常交易所的API KEY是在交易所頁面右上角,賬戶管理頁面創建的(也可能有交易所放在網頁的別的地方,找下有“API”關鍵字的鏈接點擊進去找下)。API KEY為兩串字符串,第一串字符串通常叫做
access key
,第二串通常叫做secret key
。也有交易所的API KEY還具有其他信息,例如OKEX V5和V3接口還有一個PassPhrase
,也是一個字符串(需要自己設置的字符串,用於加強安全驗證)。API KEY設置時通常還需要設置這個API KEY的權限,一般有“交易”、“提幣”等權限,要根據API KEY的用途具體設置,提幣權限需要謹慎使用。除了權限,API KEY還可以設置IP地址白名單,如果使用這個IP地址白名單之外的IP(IP地址概念不了解的可以百度搜索)訪問接口,會被拒絕訪問(也就是IP白名單之外的網絡無法訪問到或者操作你的賬戶)。
-
交易所對象
交易所對象這個概念是在發明者量化交易平台(FMZ.COM)上的概念。簡單說,指的是對交易所接口的封裝形成的一個對象。這個對象在FMZ策略代碼中就是exchange,調用exchange.GetTicker這個函數,實際就是調用了訪問交易所行情數據的接口。一個交易所可能有期貨板塊、現貨板塊。由於在FMZ上定義期貨交易所對象和現貨交易所對象是不同類型的交易所對象,是區分開的(期貨交易所對象比現貨交易所對象多了幾個函數,例如設置杠桿函數、查詢持倉函數等,具體查詢文檔)。
如果策略要操作的是期貨交易所對象,就添加期貨的,如果要操作現貨的就添加現貨的。為什么這樣設計,是由於交易所可能期貨現貨的接口完全不同,甚至接口基地址都不同,所以分別封裝。在FMZ平台上,exchange就是一個交易所對象,就代表一個交易所賬戶。
-
-
交易市場
這里所說的交易市場就是指具體的交易盤面(腦補某個交易頁面),通常交易所有多個板塊。例如:幣幣交易,幣幣杠桿交易,合約交易等。
-
交易對
我們通常說的“交易對”簡單理解就是我們買賣的東西,例如我們去市場上買白菜。那么 “白菜_錢” 就是一個交易對了(下划線_來分割)買家付錢得白菜,賣價付白菜得錢。到交易所具體的交易對例如:BTC_USDT,我們在這個交易對買入操作,指的就是付出USDT得到BTC。賣出操作就是付出BTC得到USDT。以BTC_USDT為例子,通常我們稱BTC為交易幣種,USDT為計價幣種。- 交易幣種,BaseCurrency。
- 計價幣種,QuoteCurrency。
-
現貨
幣幣交易,幣幣杠桿交易,歸類於現貨交易。現貨交易只用明確交易對就可以描述是在哪個市場上交易。 以FMZ量化交易平台上使用為例,如果要做BTC兌USDT的交易對。交易幣是BTC,計價幣是USDT。我們用FMZ平台的函數exchange.SetCurrency("BTC_USDT")
就切換當前交易對為:BTC_USDT
了。 -
合約(期貨、期權)
和現貨交易區別較大的就是合約交易了。目前交易所合約都分為幣本位合約
、USDT本位合約
,對於程序化交易、量化交易不僅要確定交易對、還要確定合約。比如要做的是BTC這個幣種,那么BTC這個幣種合約有很多,有季度合約(每個季度到期交割)、當周合約(每周5到期交割)、永續合約(不交割)等。那如果只用一個交易對標識,具體是做那種合約呢?所以就還需要具體的合約代碼來描述確定。這樣以來我們描述在哪個合約市場交易,就需要描述說明是什么幣種(交易對),是什么合約(合約代碼)。-
幣本位合約
以幣為保證金的合約(比如BTC幣本位合約,用BTC作為保證金,收益也是BTC),收益也是幣。通常幣本位合約的交易對的計價幣用USD表示(不用深究,大部分交易所都是這個表示)。所以交易對為BTC_USD,合約為季度合約。就表示我們在說的交易市場是BTC的幣本位季度合約
市場。
在FMZ量化交易平台上,exchange.SetCurrency("BTC_USD")
設置交易對,然后exchange.SetContractType("quarter")
設置季度合約。這樣當前的交易品種就是BTC的幣本位季度合約
了。 -
USDT本位合約
以USDT作為保證金的合約(比如BTC的USDT本位合約,用USDT作為保證金,收益也是USDT),收益也是USDT。通常USDT本位合約的交易對的計價幣用USDT表示。所以交易對為BTC_USDT,合約為永續合約。就表示我們在說的交易市場是BTC的USDT本位永續合約
市場。
在FMZ量化交易平台上,exchange.SetCurrency("BTC_USDT")
設置交易對,然后exchange.SetContractType("swap")
設置永續合約。這樣當前的交易品種就是BTC的USDT本位永續合約
了。
-
-
訂單
訂單具體指的什么?
訂單就是我們在交易所買賣時,向交易所提交的單子。訂單分為市價單、限價單、條件單等等。一個訂單的最基本屬性有:訂單標的物(簡單說就是買賣什么東西),訂單數量(買賣多少),訂單價格(以什么價格買賣)。如果下一個訂單不管多少錢,只確定買賣數量,確定買賣什么,那么這樣的訂單就叫做市價單。當然還有條件單(止損單、冰山委托單等)什么的,具體和交易所相關,有些交易所提供,有些交易所不提供,具體可以到交易所API文檔查詢。-
現貨
現貨的訂單市價單通常需要注意買單,現貨的市價單買單的下單量不是幣數而是金額。因為市價單不確定價格,只能通過金額來確定買多少。市價單賣單的數量是幣數,因為即使不確定價格,但是賣出多少幣是可以確定的。 -
合約
合約的下單量比較特殊,通常為合約張數,交易所的合約下單接口基本上都是合約張數,沒有以幣數為下單量的接口。幣安的USDT本位BTC永續合約可以以0.01的數量這樣下單BTC永續合約,但是也並不是幣數,同樣也是合約張數,只不過一張合約恰好是一個BTC。通常來說,不論市價單、限價單下單量均為合約張數。 -
什么是taker、maker訂單?
taker訂單就是提供流動性的訂單,簡單來說就是當前盤口買一價格是10,賣一價格是11,這個時候我掛一個買入價格為9的買入訂單,或者掛一個賣出價格為12的賣出訂單,這個時候我就給盤面上的深度提供了一個訂單,我的這個訂單就是maker。還是這個例子,如果我下了一個價格為11的買入訂單,這個時候我的這個訂單就會和盤面上賣一價格為11的訂單成交,這個時候我從盤面上拿走了一個訂單,這個時候我下的這個買入訂單就是taker訂單。舉個例子,在發明者量化交易平台上封裝的下單函數
exchange.Sell
、exchange.Buy
封裝的是普通的限價單、市價單接口。下單時訂單歸為taker還是maker,具體要看下單價格和當時的盤口,要看我們的這個訂單是提供了流動性,還是減少了流動性。在發明者量化交易平台上價格傳入-1,就是下市價單,注意現貨的市價單買單的下單量是金額,那么市價單肯定就是減少流動性,肯定就是一個taker訂單。 -
交易所條件單委托
很多交易所也支持條件訂單,比如冰山委托
、止損單
,止盈單
,post_only:只做maker單
,fok:全部成交或立即取消
,ioc:立即成交並取消剩余
等。這些訂單在發明者量化交易平台上可以用exchange.IO
函數直接訪問交易所下單接口指定要設置的參數(指定下那種條件訂單)去下單。
-
-
-
量化交易平台
量化交易平台可以看做是一個量化交易工具,可能是一個線上軟件系統,可能是一個網站,可能是一個本地可執行程序,甚至可能是一個GITHUB上的開源項目。簡單來說你可以把它看做是一個做量化交易的工具。
-
FMZ量化交易平台
發明者量化交易平台是一個線上的分布式的系統。 -
量化交易平台的回測系統
什么是回測系統?
簡單說,回測系統就是讓某個交易品種的歷史數據再回放一遍,回放的時候讓某個策略至於其中,得到這個策略在模擬歷史數據回放時的交易表現。所以說回測系統僅僅是個沙盒環境(腦補小盆友玩的沙堆,可以創造各種事物,但是僅僅是模型而已,和真實的事物無關),那么回測系統是不可能有真實交易所的任何功能的。發明者量化交易平台回測系統:
名稱 類型 說明 Bitfinex 現貨交易所對象 支持有限的交易對例如:BTC_USD,ETH_USD,LTC_USD等,注意交易對計價幣為USD是美元計價 幣安 現貨交易所對象 支持有限的交易對例如:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC等 OKEX 現貨交易所對象 支持有限的交易對例如:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC等 火幣 現貨交易所對象 支持有限的交易對例如:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTC等 OKEX期貨 期貨交易所對象 支持有限的交易對例如:BTC_USD,ETH_USD等,交易對計價幣為USD,設置具體合約代碼(參看exchange.SetContractType函數)后,合約為幣本位合約 HuobiDM 期貨交易所對象 HuobiDM即為火幣期貨(火幣合約),支持有限的交易對例如:BTC_USD,ETH_USD等,交易對計價幣為USD,設置具體合約代碼(參看exchange.SetContractType函數)后,合約為幣本位合約 BitMEX 期貨交易所對象 交易對為:XBT_USD,設置具體合約代碼(參看exchange.SetContractType函數)后,合約為幣本位合約 幣安期貨 期貨交易所對象 支持有限的交易對例如:BTC_USDT,ETH_USDT等,交易對計價幣為USDT,設置具體合約代碼(參看exchange.SetContractType函數)后,合約為USDT本位合約 Deribit期權 期權交易所對象 交易對為:BTC_USD,ETH_USD,設置具體合約代碼(參看exchange.SetContractType函數)后,合約為幣本位合約 -
量化交易平台的API KEY
交易所有API接口,同樣量化交易平台也有API接口。以FMZ量化交易平台為例,FMZ的API接口叫做擴展API
。可以程序化操作FMZ平台的一些功能。例如批量創建實盤、批量啟動實盤、批量修改實盤配置等。
-
-
程序化交易腳本
說了那么多,那具體是什么在自動化控制我的交易所賬戶進行交易買賣呢?
這就是程序化交易、量化交易的具體體現了--程序化交易腳本。這些實盤程序可以用各種語言編寫,例如FMZ量化交易平台上就支持用JavaScript、Python、C++語言編寫實盤交易策略。這些腳本程序通過交易所的API接口對某個賬戶進行買賣等各種操作。-
程序化交易腳本運行所在的設備
實盤腳本程序必須有設備載體(簡單說就是實盤必須要有它運行的地方)。幣圈做量化交易通常是把實盤程序部署到香港阿里雲服務器上(當然你也可以用其它地方的,其它運營商的服務器)。鑒於目前很多交易所都需要海外網絡訪問,所以用國內的服務器運行很多交易所API接口是訪問不到的。一般來說接口訪問不通就會報錯timeout
。
在FMZ量化通常可以用香港阿里雲服務器部署自己的軟件程序(發明者量化交易平台的實盤的載體軟件叫做【托管者】,量化交易實盤是基於托管者軟件運行的)。- 設備系統
各種各樣的操作系統windows/Linux/MAX OS/ARM Linux等,根據實盤腳本具體選擇。
在FMZ量化通常用Linux系統的服務器,Linux系統的使用其實並不復雜,簡單的使用只需掌握幾個命令即可,這些在FMZ教程中有所講解。
- 設備系統
-
腳本語言的選擇
編程語言太多了,基本都可以用來寫實盤腳本程序。
這里我們還會以FMZ量化交易平台為例子了解各種語言的優勢。在FMZ量化我們可以用以下編程語言編寫策略(機器人腳本程序)-
JavaScript
簡單易用,對設備環境依賴幾乎沒有,支持ES6標准。策略程序執行速度僅次於C++策略。(推薦FMZ量化交易初學者) -
Python
一定程度依賴設備環境,可以安裝各種庫,擴展性強。(推薦對於FMZ平台比較熟悉、對於Python比較熟悉的同學) -
C++
策略執行速度最快,效率最高,使用難度較大。
玩轉了,其它感覺so easy!
。 -
麥語言
FMZ支持的麥語言僅僅是最基礎的指令。- 麥語言適用寫一些趨勢策略
- 麥語言出現交易信號,執行交易指令時,只能吃單,不支持掛單。
- 麥語言適用於做單交易所對象的策略(只能控制一個交易所對象,雖然FMZ的麥語言支持嵌入JS代碼,但是對於萌新難度有些大,暫不予研究)
- 麥語言只適用於做單品種策略,多品種策略設計建議還是使用JavaScript,Python,C++。
-
可視化模塊拼接策略
可視化方式創建策略,僅僅用於興趣提升,認識程序邏輯。用於創建一些簡單邏輯尚可,策略稍微一復雜就不合適用這種方式設計策略了,因為難以維護、擴展,更難以設計復雜的邏輯。
-
-