揭開加密貨幣演算法交易的秘密

買賣虛擬貨幣
加密貨幣演算法交易還是一個神秘的未知領域。本文是目前唯一一篇用最詳盡分析,將加密貨幣演算法交易說透徹的文章。撰文:Kevin Zhou,加密貨幣演算法做市商及 OTC 交易商 Galois Capital 聯合創始人,曾擔任 Kraken 交易業務負責人在加密貨幣行業透過演算法進行交易是個值得探索的領域。在本篇文章中,我們探討了加密貨幣業中交易演算法的設計和實現。我們重點關注執行演算法、做市演算法和市場微結構需要考慮的幾個因素。我們還研究了實踐與理論的不同之處,尤其考慮了加密貨幣市場的特有問題該如何處理。執行演算法執行演算法的目標,是將投資組合的某種狀態轉換為另一種狀態,同時最大限度地降低其中的成本。比方說,如果你希望將 BTC/USD 的敞口提高 1000 倍,你大概不會將這筆交易訂單猛的砸到 BitMEX 的訂單裡,因為這會導致價格大幅下滑。相反,你可以考慮在一段時間裡透過多個不同交易所的市價和限價訂單的組合,來慢慢地達到你想要的頭寸。
一個執行演算法通常有三層:巨集交易員、微交易員和智慧路由。巨集交易員這一層將大額元訂單 [元訂單:即大額交易訂單,並分成小塊逐步執行] 或父訂單 [父訂單:即一大塊訂單,執行交易時,會將其切分為較小批次(稱為子訂單)] 拆分為跨越一段時間的較小子訂單。這實際上是整個演算法的排程部分。VWAP、TWAP 和 POV是巨集交易員演算法的常見簡單例子。鏈聞注,幾個演算法交易中的常用名詞需要解釋一下:VWAP:即成交量加權平均價格,它是將多筆交易的價格按各自的成交量加權而算出的平均價;TWAP:即時間加權平均價格,它指在特定時間內的平均價格;POV:即成交量百分比,這種交易演算法用於執行大訂單的交易量,而不會對市場價格產生過多的影響。

通常,要設計一個複雜的巨集交易員層,有許多不同的市場影響模型可供使用。市場影響模型,著眼於市場是如何對一次執行發生反應的。一次執行後市場是否保持原狀?還是偏離更遠?或是它能實現某種程度的恢復?兩個最具開創性的市場模型是 Almgren-Chriss (1999, 2000)永久市場影響模型和 Obizhaeva-Wang (2013)暫時市場影響模型。因為在實踐中市場影響並不是永久性的,所以,Obizhaeva-Wang 模型似乎更符合現實。此模型提出之後,人們構建了許多新模型來解決其不足之處。

微交易員層為每個子訂單做決策,比如到底是透過市價訂單還是透過限價訂單來執行,如果是限價訂單,具體應該定什麼價格。關於微交易員的設計的文獻要少得多。這是因為,子訂單的大小通常是整個市場的很小一部分,因此如何執行並不重要。

然而,加密領域卻非常不同,因為流動性非常薄,在實踐中即便普通規模的子訂單,價格下滑幅度也是相當顯著的。微交易員的設計,通常關注訂單到達在時間和深度上的分佈、佇列位置以及市場微觀結構的其他特徵。

市價訂單(和交叉 [交叉:指當經紀人以相同價格收到同一股票的買賣訂單,然後以該價格在兩個獨立的客戶之間進行同時交易] 限價單,如果我們忽略延遲)保證會執行,而未決限價訂單 [未決限價訂單:即還未成交的限價訂單(買入限價 < 最低報價,賣出限價 > 最高出價)] 則沒有這樣的保證。如果無法保證執行,你可能會跟不上巨集交易員設定的時間安排。

智慧路由層,則決定在不同的交易所 / 交易地之間如何選擇路徑。例如,在某一給定的價格水平下,如果 Kraken 擁有 60% 的流動性,GDAX (Coinbase Pro/Prime)擁有 40% 的流動性,那麼,微交易員決定的所有市價訂單,都應該是以 60-40 的比例分配到 Kraken-GDAX。

你也許會對此提出不同觀點:市場中的套利者和做市商會將流動性從一個交易所轉移到另一個交易所。所以,如果你在 Kraken 執行一半的訂單,然後等待幾秒鐘,流動性會在套利者和統計套利者的作用下從 GDAX 轉移到 Kraken,如此一來,你就可以用類似的價格完成剩餘的訂單。

然而,即使在這種情況下,套利者也會為了自己的利潤而向你收取額外費用,並轉嫁自己的對沖費用比如 Kraken 的做市費。還有一點,某些市場參與者會跨平臺地釋出超過自己實際想要規模的訂單,並且一旦目標達成,就會搶先取消超額的訂單。

歸根結底,最好還是擁有屬於自己的原生智慧路由。和第三方智慧路由服務相比,原生智慧路由還具有縮短延遲的優勢。依靠原生智慧路由,你可以直接路由到交易所,而在前一種情況下,你需要先向第三方服務傳送訊息,然後他們才會將你的訂單路由到交易所(而且你還得向第三方服務支付路由費)。總之,三角形的任意兩邊之和大於第三邊。

做市演算法

做市是指為市場中的其他參與者提供即時流動性並獲得補償。你承擔庫存風險以換取正向的預期價值。最終,做市商因為兩個原因獲得補償。

首先,市價接受方(market taker)有很高的時間偏好並希望馬上成交。而為流動性提供便利的做市商則因他們較低的時間偏好和耐心而獲得補償。其次,做市商的 PnL (利潤和損失)特性是左傾的,通常大多數人都是右傾偏好的。換句話說,做市商類似於競猜市場、賭場、保險公司和國營彩票的賭注經紀人。他們經常小贏,且不常大輸。因為採取了這種不受歡迎的回報策略,做市商獲得了可預期的價值的補償。

拔高來說,限價單其實是寫給其他市場參與者的免費期權。市場其他參與者有權利但沒有義務以限價單給定的價格買入或賣出一筆資產。在一個資訊完全的市場中,沒有人會出售免費期權。只是因為,市場的總體並不具有完全資訊,所以出售免費期權才有意義。

另一方面,如果市場完全不知曉資訊,那麼,即便只有極小的價差,一個風險中立的做市商也願意出售這些免費限價單的期權,因為這時所有交易都是噪音 [噪音:指由程式交易、股息支付或其他不反映整體市場情緒的現象引起的股票市場活動]。顯然,真實市場有各種參與者,每個參與者都具有各自的知情水平。

在設計一個做市演算法時,需要考慮三個視角:做市商的、市場接受方的和其他做市商的。

做市商自己的視角,以他們的庫存清單來表達。如果你已經有太多的資產敞口,那麼你可能會往低的方向傾斜 / 偏斜你的報價。如果資產敞口太小,你會有相反傾向。這樣做你有兩個不同的理由。首先,作為一家公司,你有一定程度的風險厭惡(可能比個人的少,但你的金錢效用曲線仍然是凹的)。這種效用函式的形狀有許多結構(例如 CARA、CRRA、更一般的 HARA 等)。其次,作為市場上的被動的流動性提供者,你將面臨逆向選擇風險。積極的流動性接受者可能會知道你不知道的東西,或者只是比你更聰明。從根本上說,這是向市場出售免費期權的人都要面臨的問題。

此外,即使在機械層面,擊中你的買價的市價單,會將按市值計價(mark-to-market)的價格降低,而滿足你的賣價的市價單則會將按市值計價的價格抬高。在任何交易的確切時刻,你總是站在錯誤的一邊。除此以外,做市商的報價會產生被動的市場影響。換句話說,將一筆訂單提交到訂單簿這一行為本身,就會有一點點作用把市場推離你。

市價接受方的觀點,則表現在訂單流上。成交量加權的訂單到達頻率,作為一種從訂單簿頂部算起的深度函式,應該具有幾個關鍵屬性。

該函式應該是

1. 遞減;
2. 凸(這裡用直覺很難解釋,但經驗層面上確實是這種情況);
3. 隨著深度變為無窮,函式趨近於 0。

某一些公式要求這種強度函式可以連續兩次微分,這種易處理性是一個好且合理的預設,但最終也是沒有必要的。此外,還有各種各樣的公式來計算「距離訂單簿頂部的深度或距離」。你通常既可以使用「合理的中間價」,也可以使用從各個角度出發的所謂最佳買價和最佳賣價。這兩種方法存在不同的權衡取捨,我們在這裡就不討論了。

此外,還有一個讓人燒腦的問題是,「合理的中間價」到底是什麼。

稍微補充幾句,所謂最佳買價和最佳賣價之間等距的中價,很容易受到噪音的影響,當垃圾訂單被提交又被取消時就會發生這種情況。此外,如果兩個案例具有相同的訂單簿形態,那麼最新發布的最佳買價,意味著會有一個低於最新發布的最佳賣價的合理價格。還有另一個問題,即釋出記錄的歷史是否重要,如果重要,那我們到底應該從時鐘時間還是交易量時間的角度來觀察它?基於訂單流的特徵,做市商的最優限價單的位置到底設在哪裡?如果你挨著訂單簿頂部提交緊密的報價,那麼你會頻繁成交,但每次都賺得很少。如果你提交深度報價,你的成交不會那麼頻繁,但每次你都會賺更多。這實際上是一個具有唯一全域性最大值的凸面最佳化問題。

另一個需要考慮的問題,是訂單流的跨時間到達,看起來有點兒像泊松過程。有人認為它更接近霍克斯過程。而且,做市商試圖捕獲的買價賣價波動(bid-ask bounce),是均值迴歸的最短期版本。由於這種超短期的均值迴歸是透過區域性波動來縮放的,因此做市商應該在量大時擴大報價範圍,而在交易量小時縮緊報價範圍。

其他做市商的視角則由訂單簿代表。訂單簿揭示了其他做市商的一些私密資訊。訂單簿頂部附近,如果賣單多於買單,則表明其他做市商更願意出售而不是購買資產。這有兩種可能,一是這些做市商的庫存中已經有巨大的正向不平衡,二是他們認為價格在短期內更有可能下降而不是上漲。

不管哪種情況,作為做市商的你,都可以根據訂單簿的扭曲來調整報價。而且,當做市商互相競爭時,如果最小報價單位 [最小報價單位:即兩個連續價格之間的最小差距] 很小,你就會經常看到所謂的「搶價差交易」(penny jumping) [ 搶價差交易:一種被嚴格禁止的交易。指在做市商交易制度下,證券公司、做市商在手中持有客戶交易委託的情況下搶先為自己的賬戶進行交易]行為。

做市商透過互相搶價或在訂單簿上爬樓梯來爭奪成交優先權,直到抵達投降點 [投降點:投降意味著放棄,這個術語表示投資者決定放棄試圖重新獲得因股價下跌而導致的損失收益的時間點],最終獲得成交優先權的勝者只有一位。

在確定勝者之後,亞軍通常會撤回到比下一個最佳買價或賣價差一個報價單位的位置。如果你沒獲得成交優先權,你還可以獲得第二成交優先權,並且只需支付剛剛夠的費用。這將導致一個迴歸,即冠軍退回到亞軍前面的最近報價單位,爬樓梯遊戲重新開始。你可以在真實的加密市場資料中看到這種爬樓梯遊戲。

最後,長時段的方向性的訊號可以覆蓋在做市演算法上,這樣的話,做市演算法的目標就不再是保持訂單庫存的持平或恆定,而是考慮一些長期目標以及相應的偏差來促其實現。

速度

速度很重要,原因有兩點。首先,你可以在訂單取消之前擊中訂單簿中的訂單。其次,你可以在訂單被擊中之前取消訂單簿中的訂單。換句話說,你想要點射陳舊訂單,也希望自己的訂單別被他人點射。套利演算法(主動)和執行演算法(主動)更看重前者,而做市演算法(被動)更看重後者。

通常,從速度獲益最多的策略也是最基本的策略。任何複雜的邏輯都必然減慢往返的時間。這些型別的演算法策略是交易世界的 F1 賽車。為了速度,資料驗證、安全檢查、儀表監測、編排等都可以被剝掉。跳過 OMS、EMS 和 PMS (資產組合管理系統),直接將你 GPU 上的計算邏輯連線到同一地點交易所的二進位制 API 上。這是一個快速而危險的遊戲。

另一類速度敏感策略,即相對統計套利策略,要求伺服器設定在多個交易所之間的物理位置,而不是與某一個交易所位於同一地點。雖然它們不能最快獲得任何單個交易所的資料,但它們將在任何其他策略之前獲得資料,並可在相關性和協整資料的基礎上採取行動。

在速度遊戲中,獲勝者拿走絕大多數所得。在最簡單的例子中,如果存在套利機會,誰先獲得套利機會,誰就搶得利潤。第二名會得到麵包屑,第三名則一無所有。收益很可能是冪律分佈的。

速度遊戲也是一場打到底線的競爭(race to the bottom)。一旦所有人都從光纖升級到微波或是鐳射網路,每個人都會回到同一起跑線,任何此前的優勢都會被磨平。

最小報價單位、填單優先權和佇列位置

大多數匹配引擎遵循價格-時間的優先順序(按比例匹配是一種不太常見的替代方案,但我們先不考慮這些)。價位更好的限價單比價位更差的限價單成交得早。如果多個限價單的價格相同,那麼早提交的訂單將比晚提交的訂單更早成交。

幣安將訂單簿切分至最小 8 位小數。如果某個資產程式碼的價格為 .000001,則 .00000001 的報價就是這一價格的 1% 。如果某資產的價格為 .0001,則 .00000001 的報價則是這一價格的 0.01%,即 1 個基點 (1 bps[ bps (basis points):即 0.01%,用於描述金融工具價值或利率變化百分比的計量單位])。兩者差異巨大。在前一種情況下,跑到一個大訂單前面需要花費整整一個點,因此時間優先更重要,而在後一種情況下,資金成本要便宜 100 倍,因此價格優先更重要。

換句話說,如果你必須支付整整 1% 來獲得成交優先權,那它可能並不值得,因為你支付了相對來說過高的費用,同時只是相對較小地增加了成交的可能性。這種情況下,也許排隊等候更好。但如果你只需要支付 0.01% 就能獲得成交優先權,那你最好這樣做,因為你只是耗費了一點點成本,卻相對較大地增加了成交的概率。較小的成交單位,有利於價格優先策略,而較大的成交單位則有利於時間優先策略。

這自然引出了下一個問題:你的佇列位置值多少錢?

訂單簿增量

在訂單簿的某一價格水平,量的消減只有兩種方式:要麼是交叉盤交易(trade crossed),要麼是未決限價單被取消。如果是交叉盤交易,那麼比此價格更好的所有其他價格水平,也會是交叉盤交易,量也會降低。我們可以在行情表上把開啟和取消的訂單一筆一筆的排列出來,並將每一個縮減記為一筆交易或一次取消。直觀地講,一筆交易意味著雙方同意以某一特定價格進行買賣,而一次取消則意味著,某一方決定不再以某特定價格買賣某資產。因此,從表面上看,我們可以說,如果某一筆最佳買價的訂單被取消,而不是被成交,那就是一個強烈的訊號,表明市場將在短期內向下。

另一方面,在訂單簿的某一價格水平,只有一種方式可以增加量:即一筆未決限價單被提交了。

訂單簿中的量增和量減都揭示了市場參與者的私密資訊,從而提供了短期的價格訊號。

更好的價格指數和最優交易所費用

目前,大多數價格指數都是從多個交易所獲取交易資料並將它們彙總在一起以獲得成交量加權的平均價格。Tradeblock 指數尤其特別,它會對不活躍和價格與同儕有偏差的交易所的權重加以處罰。而我們還能做什麼呢?

在 GDAX 上,做市手續費為 0 bps,而市價接受方手續費為 30 個基點(即萬分之 30),如果一筆公佈交易 [釋出價格:指當交易出現在自動收報機上或以其他方式公開記錄時的價格] 的價格為 $4000/BTC、且是賣價側被命中,則意味著賣家以 $4000/BTC 的價格賣出,而買家則以 $4012/BTC 價格買入。這筆交易的「合理價格」應該接近 $4006/BTC,而不是實際的釋出價格。

如果換到 Bittrex 交易所,由於有 25 基點的費用同時適用於做市商和接受方,因此合理價格就是釋出價格。換句話說,一筆 $4000/BTC 的釋出成交,實際上是買家以 $4010/BTC 的價格購買,而賣家以 $3990/BTC 的價格賣出,兩者平均就得到此單的價格。

因此,從價格發現 [價格發現:指買賣雙方在給定的時間和地方對一種商品的質量和數量達成交易價格的過程] 的角度來看,各交易所的行情表格不具有直接可比性,所以在構建價格指數時,應該刨去費用並標準化。

當然,這裡還存在另一種複雜性,來自基於交易量的費用階梯,這可能會增加或減少做市商-接受方費用的不對稱性,因為費用是階梯型跳躍的,所以我們無法確定,買家買入以及賣家售出的準確價格。這也暗示了兩個有趣的推論。

首先,價格發現是有限的,並且有點精神分裂[精神分裂:此處類比「公平價格」在這兩極之間迅速震盪的狀態],尤其是碰到那些在做市商-接受方費用方面極不對稱的交易所。

假設 GDAX 的大多數賬戶都處於 0/30 bps 的做市商-接受方費用等級,並且我們留意到 GDAX 在其 BTCUSD 的訂單簿上常有 1 分錢的價差,那麼,每一筆在買價側釋出的交易,其合理價格大概會低於此價格 15 bps,而每一筆在賣價側釋出的交易,其合理價格大概會高於此價格 15 bps。因此,在平靜時期,「合理價格」就會在這兩點之間快速震盪,兩者之間不會有顆粒度更細的價格發現。

其次,與生產者和消費者之間的稅收關聯一樣,做市商和接受方在費用分擔方面也存在類似的關聯。

如果你向做市商收取相對較多的費用,他們會拉大訂單簿的間隙,並將一些費用轉嫁給接受方。如果你向接受方收取相對較多的費用,那麼做市商就會將訂單簿的間隙壓緊,並吸收掉接受方的一些費用。

極端案例是,如果你過度取悅做市商,那麼訂單簿的價差就會縮小到最小報價單位(就像我們經常在 GDAX 上看到的那樣),訂單簿也就無法進一步縮緊了。再往前一步,任何額外的費用都會以收入損失的形式落到交易所身上。透過這個極端案例,我們可以看到,費用落在哪一方的頭上並不重要,重要的是做市商和接受方費用的總和。

最終,就和稅收政策中的拉弗曲線一樣,交易所也面臨收費政策的收入最佳化問題。我們可以看到,極端情況與稅收政策的情形相同。如果交易所不收取任何費用,他們就不會有收入。如果交易所收取 100% 的費用,就不會有交易,所以他們也沒有收入。如果增加另一些理論,很明顯,交易所的收入與總費用水平的座標圖是一個具有唯一最大值的凸函式。

專有資料

每個 OTC (場外交易)機構都有其交易對手地址的半唯一標記的圖形資料,以及這些地址和已知的交易所地址之間的貨幣流。這些被標記的資料為許多機器學習演算法提供了一個良好的起點。

每個礦工都有關於挖幣(工作量證明型別的加密幣)的邊際成本的專有資料。如果他們能感知在挖礦效率方面自己在全球礦工界的位置,他們就能獲得一份獨特的洞察力,明瞭短期供應過度或短缺的態勢。

黑箱

每個人都知道黑箱不好。人們很難,雖然不是不可能,辨別發生了什麼,當出現某些故障時,極難診斷原因所在。

然而,許多最好的對沖基金和自營交易公司最終還是會製造出黑箱。有幾個很好的理由可以解釋這一點。

首先,公司中人來人往,那些文件記錄不佳的遺留程式碼,新手接手後很難理解。其次,市場競爭意味著,任何某一個人就能完全理解的戰略最終都會輸給那些由專家和行家在其狹小領域中合作制定的戰略。最後一點,合併的策略通常比單獨執行的策略更好。例如,假設你有一個長期動量策略(S1)以及一個短期均值迴歸策略(S2)。當然,S1 可以從 S2 的短期執行優勢中受益,S2 顯然也可以受益於 S1 的長期趨勢預測。所以很自然地,我們會把它們組合成一種合併策略,該策略比任何一個組成部分都更有效。最終,這個策略變成了黑箱,不是因為我們想要黑箱,而是不用考慮黑箱不受歡迎這種事。

解開混淆因素

假設我們有一個模型,它用地面是否潮溼的二元指標來預測優步的出行率,而且這一模型執行效果非常好。顯然,地面潮溼和優步打車無直接聯絡,但間接地,下雨會使地面潮溼,下雨也會讓人們想要更多地使用優步。即便我們的偽模型表現良好,它也容易受到尾部風險的影響。如果有條水管在城市的某地爆裂導致地面潮溼,或是發生自然洪水,我們都會做出錯誤預測,認為優步在此地的乘車率會提高。

一般來說,當 A 意味著 B (A => B)而且 A 意味著 C (A => C)時,B => C 這個模型可能有效,但只是偶然情況。因此必須認識到,預測關係應符合直覺和常識。盲目挖掘資料並發現強預測訊號,這是不夠的。我們應該在訊號匯成一個黑箱之前把其中的混淆因素剝離,因為一旦形成黑箱,這些因素將越來越難以解開。

舉另外一個例子,假設 A => B 且 B => C。那麼,A => C 這個模型將起作用,但級別低於 B => C 這個模型。首先,A => C 可能會讓你利益受損,因為 A 可能不是導致(在格蘭傑因果關係上) B 的唯一因素;也許 A' 也會導致 B。其次,如果 A => B 的關係不成立了,那麼 A => C 模型也會崩潰,但 B => C 模型仍然有效。

特徵選擇

讓我們轉向多因素模型,理想情況下各特徵應儘可能統計上不相干。舉個例子,假設我們正在研究冰淇淋價格,將它設計為糖價和牛奶價格的一個函式。也許,更好的模型是使用糖價和季節(春季、夏季、秋季、冬季)。前一個模型裡,各特徵和通脹相關連,都是既屬於「食品原料/投入」又屬於「消費品」,而且都來自冰淇淋生產的供給側,而後一個模型則不同,兩個特徵具備統計不相關性(一個來自供給側,另一個來自需求側)。當然,如果使用糖價、牛奶價格和季節這 3 個特徵,可以產生一個更準確的模型。不過,隨著模型維度的增加,調校時間如果不是指數級增長,至少也會超線性延長。當你有 20 個特徵時,執行某些最佳化方法(如梯度下降)會變得非常棘手,因此特徵選擇是關鍵。我們應該放棄相互關連的特徵,而選擇那些更具統計不相干性的特徵。

認識論

在設計量化模型時,實證主義和演繹推理都很有價值。

純實證方法的一個缺陷是,我們無法在市場中進行受控實驗。我們無法在某一時間點同時嘗試兩種不同的操作來檢視哪個表現更好。換句話說,與硬科學不同,軟/社會科學中沒有真正的反事實。尤其在交易中,我們無法精確衡量我們自己的行為對市場的影響。換句話說,在歷史的時間流中,當我們沒有交易時,我們無法知道,如果我們做了交易,訂單簿和訂單流會如何變動;在歷史的時間流裡,當我們作了交易時,我們也無法知道,如果我們不做交易,訂單簿和訂單流會如何變化。

實證主義的另一個缺陷是,對於任何給定的歷史模式,存在無限多的模型,每個模型將符合這一歷史模式,但每個模型可以對未來做出一個完全不同的預測(比如黑天鵝問題的一個版本)。休謨、維特根斯坦、克里普克、奎因、波普爾和塔勒布都有許多關於邏輯實證主義和歸納問題的批判和辯護,以及對這些觀點的進一步闡述。

純演繹推理的一個問題是,作為人類的我們容易出錯。推理鏈條上的任何一個邏輯錯誤都會立即使結果無效。此外,結論的可靠性不僅要求沿途的每個邏輯步驟都是有效的,而且也要求我們假設的前提本身也是真的並符合現實。由於模型必須易於使用,因此它們通常是對世界的簡化,並且其做出的預設不能和現實相違背。

我們來看一個例子。假設你希望針對一項資產的價格軌跡執行一次蒙特卡羅模擬。如果你獲得了該資產回報的歷史資料並從中直接取樣來模擬路徑,那麼你會遇到以下問題:

1. 在表示極端事件的尾部情形中,資料很稀疏;

2. 你在資料中發現一些噪音、遠離某些未知的真實回報的概率分佈。現在,假設你將歷史資料擬合到正態分佈,然後從中為你的模擬路徑取樣。現在你遇到了一個問題,即事實上回報並不是正態分佈的(如尖峰的、肥尾的)。或者乾脆換一條路,你把歷史回報擬合到柯西分佈或列維分佈,更常見地是擬合到列維阿爾法穩定分佈。到這一點時,模型變得越來越複雜,而你又不小心在程式碼中寫了一個 bug。經過幾天的辛勞,你找出問題並解決了它。程式碼被推向生產,你擁有了一個工作模型……花了兩年時間。2 年後,事實證明第 5 矩(moments,是對變數分佈和形態特點的一組度量)才是關鍵,而你的列維阿爾法穩定分佈並沒有捕捉到現實的這一特徵。基本上你參與的遊戲就是這麼一個過程。

最後,我通常使用兩種啟發式方法:1)當有疑問時,預設使用常識。2)如果其他方面都相同,簡單和節制優於複雜和臃腫。

真實世界的摩擦

擁有一個理論上有利可圖的演算法是一回事,但處理現實的摩擦是另一回事。

假設你向交易所傳送一個請求來發布訂單,通常你會收到一個回覆,確認訂單已釋出,或是發生錯誤,訂單未被髮布。假如有一天,你的釋出請求沒有收到任何回覆。你會認為這個薛定諤訂單是釋出了還是失敗了?你容易犯兩種錯誤:型別 1 (假正 [假正:指測試結果呈正的反應,但是事實上卻是負]),型別 2 (假負 [假負:指測試結果呈負的反應,但是事實上卻是正]),都是把訂單做了錯誤分類。一種錯誤型別會比另一種錯誤的損失更低嗎?

假設你在兩個不同的交易所之間執行套利策略。如果在兩個交易所之間做一對交易時,其中一家的 API 出問題了,你會怎麼做?其中一家的交易可能已透過,而另一家的交易可能已失敗。現在你有了不想要的持倉敞口。處理這個問題的最佳方法是什麼?

當交易所被 DDoS 攻擊或匹配引擎在負載下受壓時,你如何處理髮布延遲和取消延遲?

當交易所對其 API 進行未證實、未公佈的更改時,你該怎麼辦?

假設交易所確實對其客戶的餘額進行更新,而其執行交易的匹配引擎也在並行工作,這樣的話,在同一毫秒或微秒為交易成功而查詢出的餘額,可能和向客戶報告的餘額相沖突態,看起來就像一筆交易執行了,但餘額還沒有發生改變。你該如何設計自己的系統,來與這個持續變化的世界狀態同步,而不顧交易所報告的狀態和你自己的發生衝突呢?

假設交易所的費用太高,你無法以模型推論的最優價格下達限價訂單。或者更糟,你的某些競爭對手與交易所在費用方面進行了私下交易 [ 私下交易(sweetheart deal):指雙方以非正式或非法方式私下達成的安排或協議。]。這會如何改變你的行為?

如果你的銀行週末不上班而加密交易是 24/7 執行,你如何處理法幣的再平衡 [ 再平衡:指重新調整資產組合權重的過程。]?

可以說,同一筆資產在不同交易所並不能完全等值可互換。首先,每個交易所的交易對手風險都不同,這意味著這筆資產應該刨掉不同的負利率。其次,由於大多數交易所都有存 / 取限制,因此當達到限額,就意味著在一段時間內你無法在交易所之間物理地重新平衡資產。

在你的會計系統中,你如何處理分叉、空投、粉塵攻擊以及其他你無法控制和避免的情況?

以下是我們通常遵循的一些啟發式方法:

· 任何可能出錯的東西,一定會出錯,甚至是你目前無法想到的東西,所以要把事情構建得失敗時也失敗得優雅。
· 你和你所連線的所有第三方(如交易所)都會犯錯。
· 與面向消費者的技術不同,不要打碎事物後再快速迭代;如果你損失太多錢,你將沒有第二次機會。
· 儘可能到處建立系統和做資料備份,並在操作流程中建立冗餘以防人為錯誤
· 不要使用浮點型別,因為碰到價格非常低的資產類別(如 KINBTC)時,精度損失可能非常嚴重。
· 從 API 速率限制中保留足夠的 API 呼叫,以準備突然取消所有未結訂單。

最後的想法

交易是世界上唯一的直接目標是將資本轉化為更多資本的工作之一。再加上加密業狂野西部的性質,你得到一個快速致富的汙水池。每個人都想要簡單的答案,但沒有人想學習手藝。人們希望電視裡的達人告訴他們價格目標、何時購買以及何時售出。他們希望以 99.99 美元的價格購買線上交易課程,或者以每月 19.99 美元的價格購買基於 TA 的演算法策略。但實際上沒有人會賣給你一個能印錢的魔盒;他們會為自己保留它。沒有什麼關於盈利和損失的神奇公式。市場不斷髮展,遊戲隨著時間的推移變得越來越難。

保持領先優勢的唯一方法是聘請最優秀的人才,他們可以適應生態並不斷超越自我。

市場是一個巨大的撲克牌桌,數百萬玩家坐下來,每個人都相信他/她可以超越他/她的鄰居。坐在這張桌子旁的人,其實已經是一種自我選擇。獲勝意味著你要比牌桌上一半多一點的資本玩得好,這反過來意味著,你需要比 90%的玩家更優秀,因為資本以冪律的方式彙總到贏家手裡。

在文化上,交易遊戲與風險投資不同。在矽谷,成為彼得·泰爾所謂的明確的樂觀主義者是值得的。你需要相信新技術將改變世界,你能夠並且將會制定實現這一目標的方法。

在遍佈自營交易公司的芝加哥,文化差異很大。在芝加哥,成為一個有極高對抗性思維的人是值得的。每個人都像你一樣如此渴望成為贏家,而且每次你進行交易時,你的腦海中都會出現那個嘮叨的想法:也許對面的人知道你不知道的事情。

在面對市場中的任何真正競爭之前,矽谷的創業公司必須首先與世界的冷漠作鬥爭。而交易類公司則不同,儘管沒有需要打交道的顧客,他們從一開始就無法避免競爭。最強的交易公司,把自己包裹在秘密之中。

加密貨幣交易是這兩個世界的交匯點,在這個新生的領域目前還沒有明確的贏家。我們 Galois Capital 渴望實現這一目標。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;