暑假在家發(fā)現(xiàn)了Ricequant這個挖金礦的地方
,狠狠泡了些日子
,津
(hun
)津
(hun
)有
(yu
)味
(shui
)地閱讀API文檔
,一步步把海龜?shù)妮喞獦?gòu)建起來
。選擇實現(xiàn)海龜策略也是有原因的
,海龜交易法則不是僅僅停留在指標(biāo)系統(tǒng)的階段
,準(zhǔn)確說
,它已經(jīng)正真意義上的形成了交易系統(tǒng)的雛形
,它涵蓋了交易的各個方面
,沒有給交易員留下主觀想象決策的余地
,這正好使得程序化操作該系統(tǒng)的優(yōu)勢得到發(fā)揮
。這一步步敲擊代碼的過程中收獲還是不少
,今天我也來放上自己的思考和代碼與大家伙分享
。首先,我們從趨勢策略說起......在國內(nèi)A股濃厚的追漲殺跌氣氛中
,第一感覺趨勢追隨策略簡單粗暴有效
,不過我覺得
,看待一個策略就像看待一個人一段歷史一樣
,時間拉長
,作出評價才更加客觀
。我們先來看看API中自帶的基于趨勢指標(biāo)MACD的策略
,關(guān)于MACD的介紹可以戳Technical Analysis from A to Z
,A Primer On The MACD
,MACD Histogram Helps Determine Trend Changes(
http://www.investopedia.com/articles/technical/082701.asp)
,以及計算公式
。為消除選股因素影響
,交易標(biāo)的使用日指數(shù)數(shù)據(jù)CSI300.INDX
。為和后續(xù)策略對比
,回測時間統(tǒng)一設(shè)定為20050104-20160310這十年時間
。(源碼
:https://www.ricequant.com/community/topic/62)十一年回測只用不到6秒
(時光時光慢些吧
。。)回測收益 209.829% 回測年化收益 11.067% 基準(zhǔn)收益 205.066%
Alpha 0.0305 Beta 0.441 Sharpe 0.3638 Sortino 0.3448
Information Ratio -0.1163 Volatility 0.2007
最大回撤 50.77% Tracking Error 0.2255 Downside Risk 0.2117
嗯...好像并沒有想象那么好
,平時看交易軟件上的MACD覺得靠譜得不要不要的
,不過這樣看也沒有那么神吶
,最大回撤快五十了額
,我是不敢把銀子交給它...睡不著覺啊
,不過夏普0.80
,十年時間
,也不容易......也算差強(qiáng)人意了
。好了
,下面切換到我們的正題
:海龜交易法則
。聽我一本正經(jīng)地娓娓道來
:海龜交易法則背景
說到海龜交易
,不得不提他的創(chuàng)始人--Richard Dennis
Riachard Dennis是七八十年代著名的期貨投機(jī)商
,是一位具有傳奇色彩的人物
,在多年的投機(jī)生涯中
,Dennis出盡風(fēng)頭
,給人的感覺是常常可以在最低點買進(jìn)
,然后在最高峰反手賣空
。他相信優(yōu)秀的交易員是后天培養(yǎng)而非天生的
。他在1983年12月招聘了23名新人
,昵稱為海龜
,并對這些交易員進(jìn)行了一個趨勢跟蹤交易策略培訓(xùn)
。隨后給予每個新人100萬美元的初始資金
。經(jīng)5年的運作
,大部分
“海龜
”的業(yè)績非常驚人
,其中最好的業(yè)績達(dá)到1.72億美元
。N年后海龜交易法則公布于世
,我們才有幸看到曾名噪一時的海龜交易法則全貌
。(畫外音
:能夠開發(fā)出領(lǐng)先時代的交易模型
,收益是多么誘人
!)
海龜交易法則內(nèi)容海龜交易法則的原版書籍可以猛戳
(http://bigpicture.typepad.com/comments/files/turtlerules.pdf)這里先畫個簡單的思維導(dǎo)圖表示下海龜交易法則的基本框架
:下面一個個具體來說
:市場:海龜們都是期貨交易者
,海龜們只選擇有一定交易量流動性高的市場
。這里我選擇日指數(shù)數(shù)據(jù)CSI300.INDX
,一方面是為了更好與基準(zhǔn)比較
,另一方面也是因為該標(biāo)的可以不用擔(dān)心流動性的問題
。頭寸規(guī)模:頭寸規(guī)模是海龜交易系統(tǒng)最重要的部分之一
。頭寸規(guī)模是海龜交易系統(tǒng)最重要的部分之一
。頭寸規(guī)模是海龜交易系統(tǒng)最重要的部分之一
。海龜交易法則根據(jù)一個市場的絕對波動幅度來調(diào)整頭寸規(guī)模
,也就是將頭寸的絕對波動幅度進(jìn)行了標(biāo)準(zhǔn)化
。比如
,投資標(biāo)的的價值波動性較強(qiáng)時
,可以減少持有量
,相反
,當(dāng)它的價值波動性較弱時候
,可以增加持有量
。總而言之
,市場的波動性與頭寸規(guī)模可以相互抵消
。海龜用一個被稱為N的概念來表示某個市場根本的波動性
,它表示單個交易日某個特定市場所造成的價格波動的平均范圍
,它同時也涵蓋了開盤價的缺口
。其實這個所謂的N
,就是我們平常所熟悉的ATR
,關(guān)于ATR的介紹
,可以戳AVERAGE TRUE RANGE(
http://www.metastock.com/Customer/Resources/TAAZ/Default.aspx?p=35)
以下為計算公式:TR=Max(H-L,H-PDC,PDC-L)其中
: TR=真實波幅
H=當(dāng)日最高價
L=當(dāng)日最低價
PDC=前一日收盤價
N(即ATR)的計算公式如下(其實就是前面計算所得TR的20日移動平均)
:N=(19*PDN+TR)/20其中
: PDN=前一日N值
TR=當(dāng)日的真實波動幅度
有了N之后
,下一步可以計算絕對波動幅度
,也就是用根本的市場價格波動性
(用N值定義
)表示的價值量波動性
。絕對波動幅度=N*合約每一點所代表的價值最后
,海龜按照我們所稱的單位
(Units
)建立頭寸
。使1N代表帳戶凈值的1%
。波幅調(diào)整后的頭寸單位為
:頭寸規(guī)模單位=賬戶的1%/市場的絕對波動幅度
可以看出
,使用N作為市場波動標(biāo)準(zhǔn)化的度量并以此作為開倉量及持倉量的依據(jù)
,其背后的資金管理含義是
,即便當(dāng)日投資標(biāo)的跌幅達(dá)到N(ATR)的水平,當(dāng)日的損失都能控制在1%的總資產(chǎn)水平內(nèi)。即便當(dāng)日投資標(biāo)的跌幅達(dá)到N(ATR)的水平,當(dāng)日的損失都能控制在1%的總資產(chǎn)水平內(nèi)。 即便當(dāng)日投資標(biāo)的跌幅達(dá)到N(ATR)的水平,當(dāng)日的損失都能控制在1%的總資產(chǎn)水平內(nèi)。以書中給的參考為例
:2003年3月份民用燃料油合約
日期 | 最高價 | 最低價| 收盤價| 真實波幅| N值
-------- | ---
2002/12/2| 0.7375| 0.7227| 0.7359| 0.0148| 0.0134
2002/12/3|0.7447| 0.7310| 0.7389| 0.0137| 0.0134
2002/12/4 |0.7420|0.7140| 0.7162| 0.0280| 0.0141
-------- | ---
根據(jù)12月4日的N值0.0141計算頭寸規(guī)模如下
:N=0.0141
賬戶規(guī)模=1000000美元
每一點的價值=42000美元
頭寸單位規(guī)模=0.011000000/0.014142000=16.88
舍去小數(shù)
,得16份合約
。另外
,海龜被限制在任何時間持倉的單位(Units)數(shù)目
,在證券市場這種單一市場中
,最多持倉的單位數(shù)設(shè)為4個單位
,且海龜一般每周一計算一次N用于更新單位(Units)大小
。入市:海龜?shù)娜胧幸?guī)則有兩個系統(tǒng)
,我們可以根據(jù)自己的意愿決定將凈值配置在何種系統(tǒng)上
。系統(tǒng)一
:以20日突破為基礎(chǔ)的偏短線系統(tǒng)
突破定義為超過前20日的最高價或者最低價
海龜總是在日間突破發(fā)生時進(jìn)行交易
,而不會等到收盤或次日開盤
系統(tǒng)二
:以55日突破為基礎(chǔ)的較簡單的長線系統(tǒng)
只要有一個信號顯示價格超過了前55日的最高價和最低價就建立頭寸
。由于我的回測周期較長
,我選擇了系統(tǒng)二
,即以55日突破為基礎(chǔ)的較簡單的長線系統(tǒng)
。追蹤:海龜交易系統(tǒng)不是一有突破信號就全倉介入
,而是根據(jù)最新市場價格變化進(jìn)行逐步建倉
。海龜在價格突破時只建立一個單位的頭寸
,在建立頭寸后根據(jù)前面指令的實際成交價為基礎(chǔ)以每突破0.5N的間隔進(jìn)行加倉
。例如
: 黃金
:N=2.5
55日突破=310
增加的第一個單位310.00
第二個單位310.00+1/2個2.5即311.25
第三個單位311.25+1/2個2.5即312.50
第四個單位312.50+1/2個2.5即313.75
海龜被告知在接受入市信號時要非常連續(xù)
,因為一年中的大部分利潤可能僅僅來自兩三次大贏利
。止損:對大多數(shù)人來說
,始終抱著虧損的交易終究會反轉(zhuǎn)的愿望比干脆退出虧損頭寸并承認(rèn)交易失敗要容易得多
。長期看
,不會止損的交易是不會成功的
。在你建立頭寸之前
,你需要預(yù)先確定退出的點位
。如果市場波動觸及你的價位
,你就必須每一次毫無例外的退出
。在這一立場上搖擺不定最終會導(dǎo)致災(zāi)難
。(畫外音
:前段時間大家應(yīng)該體會比較深刻吧
。)
止損標(biāo)準(zhǔn)
海龜以頭寸風(fēng)險為基礎(chǔ)設(shè)置止損
,任何一筆交易不能出現(xiàn)2%以上的風(fēng)險
,因為價格波動1N表示1%的賬戶凈值
,容許風(fēng)險為2%的最大止損就是價格波動2N
,為了保證全部頭寸的風(fēng)險最小
,如果另外增加了單位
,前面單位的止損需提高0.5N
。例如
: 原油
:N=1.255 日突破=28.30
第一單位 28.30 25.90
離市:艱難的離市
對于大多數(shù)交易員
,海龜離市規(guī)則是系統(tǒng)法則中唯一最難的部分
。等待10或20新低出現(xiàn)通常意味著眼睜睜瞅著20%
,40%甚至100%的利潤化為泡影
。海龜交易法則對于系統(tǒng)一系統(tǒng)二有著不同的離市標(biāo)準(zhǔn)
:系統(tǒng)一
:離市對于多頭頭寸為10日最低價
,對于空頭頭寸為10日最高價
。如果價格波動于頭寸背離至10日突破頭寸中所有單位都會退出
系統(tǒng)二
:離市對于多頭頭寸為20日最低價
,對于空頭頭寸為20日最高價
,如果價格波動與頭寸背離至20日突破頭寸中所有單位都會退出
海龜入市時一般不會設(shè)置離市止損價
,但會在日間盯著價格
,一旦價格穿過離市突破價
,就開始打電話下離市指令
。規(guī)則告一段落
以上就是海龜交易系統(tǒng)的全套法則內(nèi)容
,法則的每一部分及各部分的關(guān)聯(lián)構(gòu)成了一個交易系統(tǒng)
,下面
,我們一步步實現(xiàn)......
不考慮N僅根據(jù)突破信號構(gòu)建的策略- 源碼
:https://www.ricequant.com/community/topic/62回測結(jié)果
:恩
,夏普比率0.346
,比之前的MACD結(jié)果差些
,回撤表現(xiàn)也不好
。這個策略中
,只是粗暴地將每次買入賣出的量控制在初始資金的1/10
,當(dāng)突破55日高點買入一份
,最新價跌破20日最低價賣出一份
。反正都是追漲殺跌
,大同小異
。接下來,我把上面策略其他部分保持不變,僅引入頭寸規(guī)模中N的概念來計算每次交易的單位(而不是僅簡單以本金1/10來控制),看看會有什么效果。
引入N根據(jù)突破信號構(gòu)建的策略- 源碼同上link
。。回測結(jié)果
:回測收益 453.756%
回測年化17.218%
收益基準(zhǔn)收益 205.066%
Sharpe 0.7499
最大回撤 32.33%
額
,夏普比率總算有大點兒提升了
,與之前沒有引入N的策略相比
,表現(xiàn)有了很大提高
,最大回撤也由48降低到32
,這說明
,海龜體系中引入的N
,即根據(jù)過去價格波動幅度而調(diào)節(jié)開平倉的單位
,是經(jīng)受得住數(shù)據(jù)考驗的
。海龜策略完全體系構(gòu)建最后的最后
,放上海龜體系的完全版
,Code里面包含了上一節(jié)中提到的所有環(huán)節(jié)
,注意本海龜策略是基于體系二的
,感興趣的朋友可以嘗試構(gòu)建體系一
源碼放送
:https://www.ricequant.com/community/topic/180 這個完全版是用Python寫的
,以上的都是用Java寫的
。沒用到python的一些黑法術(shù)的情況下java代碼190行,python代碼120行。回測結(jié)果
:回測收益287.019%
回測年化收益 13.384%
基準(zhǔn)收益 205.066%
Sharpe 0.6562
最大回撤 23.54%
opps吐血
,雖然代碼蠻長運行還是挺快噠
,終于搞定
,完整版的策略包括了按照海龜中的進(jìn)場
、追蹤
、止損
、離場所有細(xì)節(jié)
,然而并沒有什么卵用
,結(jié)果沒有想象那么漂亮
,不過繼續(xù)在之前的基礎(chǔ)上把最大回撤降低到22
,我想這還是因為止損大法好的原因
,寬慰一點點
。多少自己還是體會到一個交易系統(tǒng)雛形構(gòu)建的方方面面
,我這么對自己說
,成功完成了一次心理按摩
。最后,歡迎小伙伴就代碼進(jìn)行深度交流
引伸
: 本身海龜策略是基于期貨的
,與證券市場有一定的差異
。另外本來海龜應(yīng)用于期貨
,做空成本低
。而A股做空
(融券
)成本較高
(Cry
。。這時刻還能融到券嗎
?),所以上面的都沒有涉及到做空
。另外
,畢竟是上世紀(jì)的老策略
,效果也只能聽天由命了
。不過新手學(xué)習(xí)瞻仰體會實現(xiàn)下收獲還是很有
,我們嘗試?yán)斫馄鋬?nèi)在邏輯
、結(jié)構(gòu)框架以及體系各部分的相互制約是價值所在
。海龜策略基于ATR的止損規(guī)則是有一定借鑒意義的
,感覺比僵硬設(shè)置止損線
“科學(xué)
”一些
,有興趣可以專門控制變量進(jìn)行下對比
,是騾子是馬就清楚了馓
。https://www.ricequant.com/community/topic/62https://www.ricequant.com/community/topic/180 Python完全版