比特幣實盤開源策略之海龜交易策略

WeQuant量化交流QQ群 519538535,不定時發放交易策略實盤源碼,群主帶你裝逼帶你飛。

-----以下是正文,歡迎轉載-----

今天有朋友問我,現在的比特幣市場行情咋樣?有沒有適合於這個行情的策略?下結論之前,我們先來看看火幣的最近比特幣行情(注意,我畫了三根白色的趨勢線作為大趨勢的一個描繪):

前一段時間幣值沖高到5150的高點之後急劇下滑,跌至4532,然後又彷彿開始了一段綿綿無絕期的震蕩行情。這個大約12%(5150->4532)的急劇跌幅,竟然是在17個小時內完成的。這種大漲大跌的架勢,著實會嚇壞我們這些從傳統金融行業過來的人啊~~

那麼,不想做韭菜的我們,該如何應對這種大漲大跌的行情呢?答案之一就是本文將介紹的傳奇策略——海龜交易策略。

一、什麼是海龜交易法

海龜交易法是著名的公開交易系統,1983年著名的商品投機家理查德. 丹尼斯在一個交易員培訓班上推廣而聞名於世,它涵蓋了交易系統的各個方面。其法則覆蓋了交易的各個方面,並且不給交易員留下一點主觀想像決策的餘地。它具備一個完整的交易系統的所有成分。 -- MALib

海龜的起名也是來源於理查德.丹尼斯對其招募的13名學員的昵稱。在1983年他招募了13個人,教授給他們期貨交易的基本概念,以及他自己的交易方法和原則。「學員們被稱為『海龜』(丹尼斯先生說這項計劃開始時他剛剛從亞洲回來,他解釋了自己向別人說過的話,『我們正在成長為交易員,就象在新加坡他們正在成長為海龜一樣』)。」----斯坦利.W.安格瑞斯特,《華爾街期刊》,1989年9月5日。 -- MALib

海龜成為交易史上最著名的實驗,因為在隨後的四年中海龜們取得了年均複利80%的收益。丹尼斯證明用一套簡單的系統和法則,可以使僅有很少或根本沒有交易經驗的人成為優秀的交易員。當時,海龜們認為應對理查德·丹尼斯負責,商定甚至在他們議定的10年保密協定於1993年終止後也不泄露這些法則。但是,有個別海龜在網站上出售海龜交易法則而謀取錢財。兩個原版海龜科蒂斯·費思和阿瑟·馬多克,為了阻止個別海龜對知識產權的偷竊和出售海龜交易法則而賺錢的行為,決定在網站上將海龜交易法則免費公之於眾。 -- MALib

海龜交易策略是一套非常完整的趨勢跟隨型的自動化交易策略。這個複雜的策略在入場條件、倉位控制、資金管理、止損止盈等各個環節,都進行了詳細的設計,這基本上可以作為複雜交易策略設計和開發的模板。

二、海龜交易法是如何撲捉趨勢信號的

在趨勢信號的撲捉上,海龜交易法則使用了一個非常重要的技術指標—唐奇安通道(Donchian channel)。這個通道很類似我們熟悉的布林通道(Bollinger Bands),只是在具體計算方式上有些不一樣。

唐奇安通道指標是Richard Donchian發明的,由3條不同顏色的曲線組成,該指標用周期(一般都是20,有的平台系統設置時可以改變的,有的則設置的不可以)內的最高價和最低價來顯示市場價格的波動性,當其通道窄時表示市場波動較小,反之通道寬則表示市場波動比較大。

如圖所示:(圖片來源:fxunion)

當價格衝破該通道的上軌道時,就是可能的買信號;反之,衝破下軌時就是可能的賣信號。

唐奇安通道的各項指標的計算方法為:

上軌=Max(最高低,n), n日最高價的最大值

下軌=Min(最低價,n), n日最低價的最小值

中軌=(上軌+下軌)/2

在金融領域的多因子分析框架內,這個策略對突破後的價格走勢預測就是基於動量因子(momentum)的有效性假設。當然,這個因子的有效性也確實被嚴格地驗證過,並作為Fama-French三因素模型的補充,被廣泛地應用於金融市場。

當然,我們可以進行優化,使用更合理的趨勢突破型指標。

三、交易原理

那麼,既然動量因子是已經公開並普遍使用的因子,那麼海龜交易法則是憑什麼能夠脫穎而出呢?答案很簡單,海龜交易法則定義了一整套非常嚴謹的倉位控制、止盈止損的規則。在文章開頭我們看到比特幣市場的大漲大跌,而海龜交易法則正是應付這種極端行情的利器。下面我們來一一剖析。

1. 倉位的基本單位N

海龜法則的加倉原則是定義好一個小單位(Unit),使得該倉位的預期價值波動與總凈資產的1%對應。也就是說,如果買入了這1個小單位的資產,那當天該倉位的市值變動幅度不會超過總凈資產的1%。

那麼,如何定義這個小單位?又如何預估這個小單位能帶來的價值波動呢?首先,在預估這個小單位帶來的價值波動(該價值波動被稱為N)上,海龜策略使用了對歷史的價格波動進行統計的方法。具體計算公式如下:

TrueRange=Max(High?Low, High?PreClose, PreClose?Low)

N =(前19日的N值之和+當時的TrueRange)/20

其中,High表示當日最高價,Low表示當日最低價,PreClose表示前一日收盤價

我們可以從定義上看出,N值確實能很恰當地表達該資產在價格上的最近波動幅度。

這樣,一個Unit就應該是這樣計算出來的:

Unit = (1%*Total_net)/N, total_net就是總資產凈值

可以看出,一個Unit的資產的價格波動幅度 = 總凈資產的1%

2. 什麼時候建倉

建倉的動作來自於趨勢突破信號的產生。如果當前價格衝破上軌,就產生了一個買的建倉信號,如果當前價格跌破下軌,就產生了一個賣空的建倉信號(如果該市場支持賣空,比特幣市場是支持借幣賣空的!)

初始建倉的大小 = 1個Unit

3. 什麼時候加倉

如果開的底倉是多倉且資產的價格在上一次建倉(或者加倉)的基礎上又上漲了0.5N,就再加一個Unit的多倉;

如果開的底倉是空倉且資產的價格在上一次建倉(或者加倉)的基礎上又下跌了0.5N,就再加一個Unit的空倉。

我們看到,海龜策略其實是一個追漲殺跌的策略的。

4. 怎麼做動態止損

如果開的底倉是多倉且資產的價格在上一次建倉(或者加倉)的基礎上又下跌了2N,就賣出全部頭寸止損;

如果開的底倉是空倉且資產的價格在上一次建倉(或者加倉)的基礎上又上漲了2N,就buy cover全部的頭寸止損。

當然,用戶可以自定義動態止損方案,比如下跌了0.5N就開始部分平倉,而不用等到下跌了2N後才匆忙一次性清倉,畢竟衝擊成本擺在那裡。

5. 怎麼做止盈,可以自定義動態止盈嗎

海龜法則裡面,止盈信號是這樣產生的:

如果開的底倉是多倉且當前資產價格跌破了10日唐奇安通道的下軌,就清空所有頭寸結束策略;

如果開的底倉是空倉且當前資產價格升破了10日唐奇安通道的上軌,就清空所有頭寸結束策略。

當然,用戶可以自定義動態止盈方案,比如總凈資產/初始凈資產>1.5, 就止盈離場。

四、實盤代碼分析

在上一篇文章小白零基礎搭建一個比特幣策略實盤引擎中,我已經講述了一個實盤引擎應該具備的各項功能,並公開了實盤引擎的源代碼。在這次的分享中,我將基於實盤引擎代碼,開發出適配於該實盤引擎的比特幣海龜交易策略源碼。(策略的基本源碼框架來源於優礦,這裡我做了一些比特幣以及實盤引擎的適配工作)

1. 判斷是否產生入場和出場信號

2. 計算ATR值(用來近似計算N值)

3. 計算Unit值

4. 判斷是否加倉或動態止損

5. 可復用的初始化context函數

6. 正式的initialize初始化回調函數

7. 每一個行情數據驅動的數據更新回調函數

8. 修改入口main函數

9. 執行效果:

五、後話

海龜策略存在很多變種,在傳統金融市場中,有些變種的策略還是有效的。比特幣市場是一個非常無效的市場,在這樣的市場中,很多被用爛了的傳統策略竟然也可以跑得非常有效果,這對於傳統量化從業者來講,是一個非常好的知識變現機會。WeQuant君本人就是從傳統金融科技領域出來的,立志於為同行建立一個快速進入數字貨幣量化領域的通道和平台。在這個平台上,大家可以共同學習,共同進步。

WeQuant量化交流QQ群 519538535,不定時發放交易策略實盤源碼,群主帶你裝逼帶你飛。

推薦閱讀:

長線交易中,是否能依靠固定的策略實現持久盈利?
希望大家說一下什麼是交易理念、交易策略、交易系統、技術分析。以及它們之間的區別?
如何在Quantopian中實現中高頻交易策略?

TAG:比特币Bitcoin | 量化 | 交易策略 |