標籤:

【邢不行|量化小講堂系列33-實戰篇】邢不行親歷:一行代碼虧損5萬美金,量化投資的風險

引言:

邢不行的系列帖子「量化小講堂」,通過實際案例教初學者使用python進行量化投資,了解行業研究方向,希望能對大家有幫助。

【歷史文章匯總】請點擊此處

【必讀文章】:

【邢不行|量化小講堂系列27-Python量化入門】EOS期現套利,一周時間,15%無風險收益

【邢不行|量化小講堂系列20-Python量化入門】10年400倍策略分享(附視頻逐行代碼講解)

個人微信:xingbuxing0807,有問題歡迎交流。


邢不行親歷:一行代碼虧損5萬美金,量化投資的風險

本文純屬真事


10月15日,周一,早晨07:30

在我還睡著的時候,阿里雲香港伺服器上跑著的自動交易程序,在bitfinex交易所陸續對我交易的幾個數字貨幣,開了空單。並且策略判定此次交易盈利的概率較大,所以加了3倍槓桿。

開空單:指的是做空,例如價格跌10%,我就賺10%,相應的價格漲10%,我就虧10%。

3倍槓桿:放大盈虧比例。例如價格跌10%,我就賺30%,相應的價格漲10%,我就虧30%。

下圖展示的當時比特幣(btc/usdt)的15分鐘K線圖,開空點位是6348左右。


10月15日,周一,上午

因為一些私人事情需要處理,這天上午沒有到辦公室。

在出門之前,通過每天早晨8點半釘釘發給我的持倉監控,了解到策略已經開空了。內心:趕緊他媽的給我暴跌吧。

因為辦的事情比較麻煩,一個上午都沒有時間看手機,微信群也沒有查看。


10月15日,周一,下午13:15

如下圖所示比特幣的價格上漲到6423,相比我們的做空點位已經上漲了1.18%,空頭倉位已經虧損了約3.6%。

交易的其它幣種的空頭倉位,也產生了一定的虧損。此時按照策略,應該馬上平倉止損。

做交易就是要這樣,該止損的時候絕不手軟,哪怕之後被打臉。因為活下來是最重要的。

這也是量化交易的好處,幫你按照策略自動止損,避免交易者情緒的影響。

並且根據我策略的判斷,此時不僅應該止損,還要反過來開多,並且仍然是3倍槓桿。


10月15日,周一,下午13:20

事情終於順利辦好了,我也在外面吃好了午飯,坐上去辦公室的車,拿出手機。

這個時候不知道為什麼,我打開手機上的teamviewer,遠程了一下阿里雲伺服器。沒啥特殊目的,就是順手隨便看看。

因為程序一直比較穩定,我一般是不怎麼看伺服器的。天知道這次怎麼就想著打開手機順便看看呢,可能是我的錢正在向我呼救吧。之後才知道,這順手一看,救了一命。

登陸伺服器之後,就看到了下面這張行情圖,發現幣價正在急速上漲:

內心:媽蛋,虧錢了,幸好策略應該幫我提前止損了。

之後看下我程序的實時輸出,想看下當前持倉。然後發現我的程序已經暫停2個小時了,並且之前的空頭倉位還在,並沒有止損!

此時瞬間人就變得緊張,從椅子上坐了起來,之前辦事的疲憊已經忘記。

趕緊點擊重新運行按鈕,讓程序重新跑起來。

但我不在電腦面前,沒辦法手工操作平之前的倉位,眼睜睜的看著價格還在繼續急速上漲,只能等著程序跑。

因為我跑策略看的是15分鐘K線,所以每隔15分鐘才會操作一次。所以只能等到13:30的時候,程序才進行了操作。

具體如下圖所示,直到漲到6500的時候,才平空倉,並且3倍槓桿開多:


10月15日,周一,下午

等到程序幫我止損並且再開多之後,繃緊的神經才稍稍放鬆下來。坐在車上望著窗外的上海中心,算算到底虧了多少。

因為程序故障慢了的這15分鐘,導致之前的空倉多虧了錢,新開的多倉又少賺了錢。

恩,一來一去,大約5萬美金沒了,媽蛋。

但是呢,隨著行情的進一步發展,我深深的感到,我是多麼多麼多麼多麼多麼的幸運。

因為之後的行情走勢是下圖這樣的:

繼續暴漲!

受到usdt不能承兌的影響,bitfinex交易所上面的btc/usdt交易對開始猛漲。最高一直漲到了7800美金。

如果我不是在13:20左右,隨手看了下伺服器,然後讓停止的程序重啟,那麼我早晨在6348開的空倉就會一直持有。

當漲到最高點7800的時候,總共虧損:

( 7800 - 6348 ) / 6348 * 3 = 69%

按照bitfinex交易所虧損50%就強平的交易規則,早就已經爆倉了!


10月16日,周二,上午

到了第二天,還是很後怕。

想想當時真的是命大啊,怎麼就突然看了眼伺服器呢。要是當時不看,最終爆倉,那就是半年白乾,說出去也被人笑死。

計劃著周末去龍華寺燒香。


10月16日,周二,下午

下午,寫代碼的小哥很小心的跟我說,問題查出來了。

我仔細看了一遍之後,真的是哭笑不得。

因為這個問題,我之前在課程裡面就給大家講過,當時還重點提了一下。

下面是當時課程中的代碼截圖:

這兩行代碼很簡單,大家都看的懂。作用是從okex交易所獲取到最新的行情數據。

雖然這代碼和案發現場的bitfinex交易所實盤代碼不一樣,但講的問題是一樣的。

圖中第10行代碼中的那串地址。是okex交易所的行情介面地址,大家可以在瀏覽器中輸入這個地址,就能看到萊特幣LTC最新的價格。

okex.com/api/v1/ticker.

第13行代碼的作用是獲取行情介面返回的數據。其中有一個關鍵的參數叫做timeout。

當時在上課的時候我特意提到了這個timeout參數一定要加。

當我們向交易所伺服器發送請求獲取數據時,理論上對方應該很快返回信息。但由於網路情況複雜、交易所伺服器故障等原因,有可能對方不會馬上回復。

此時我們的程序就會等待。加上這個參數timeout=15就表明,我們最多等待15秒。15秒之後還沒有返回,程序就會報錯終止。

如果不加這個參數,程序默認會一直等下去。若消息一直不返回,就會一直等到地老天荒。此時整個程序也就和停止了沒有差別。

而最終的問題就是,寫代碼小哥獲取bitfinex持倉數據的那行代碼,居然沒有加上timeout參數。

恰好這次又碰上bitfinex伺服器不穩定,一直沒有返回數據,而我的程序就在那裡一直等著。

哎,我學生都知道的東西,我自己招的寫代碼小哥居然不知道。


事後措施

出了問題就要解決,以後不能再犯。

原先程序每15分鐘就會通過釘釘發送一次持倉簡報到我手機,如果不發就說明程序停止了。後來因為長時間穩定,我嫌煩,就停了。

現在我已經乖乖的打開了,再煩我也不會關閉。

bitfinex交易所我開始交易的比較早,和交易所對接的代碼都是自己寫的,並沒有使用課程裡面推薦的ccxt。那些覺得ccxt不好,想著自己對接交易所的同學,還是省省吧。

你的代碼是不可能比這些開源框架還穩健的。ccxt裡面默認就寫好了,所有情況下timeout為10秒。

最後,寫這行代碼的小哥,首先年底獎金就不要想了,其次可以考慮換個工作了。


對本文研究有自己的想法的朋友,可以在評論區留言。關於文中的代碼、數據,以及下期《量化小講堂》想了解的內容,也可以加我個人微信xingbuxing0807交流,歡迎瀏覽我的朋友圈內容。

如果你想入門量化,但是始終找不到方向,可以加入我的知識星球。我會在裡面解答你的問題,分享我的感悟,不論是投資、技術,還是職業選擇、思維方式。

-- 學習和成長從來都不是一個人的事 --

t.zsxq.com/VbMrjYb (二維碼自動識別)


推薦閱讀:

TAG:量化 | Python |