海龜交易策略也叫唐奇安通道策略类垦,是一個(gè)非常經(jīng)典的策略狈邑,本質(zhì)上就是通道突破策略城须。海龜策略起源于上世紀(jì)八十年代兩個(gè)投資大師理查德丹尼斯和比爾的打賭,兩人的分歧在于米苹,優(yōu)秀的交易者是否是可以訓(xùn)練出來的糕伐,理查德選了一些候選者,并教他們交易方法驱入,稱之為“海龜”赤炒,后來“海龜”們都取得了不俗的業(yè)績氯析,這套交易系統(tǒng)就是海龜交易系統(tǒng)亏较。
原理:
海龜交易策略的建倉和加倉規(guī)模都與平均真實(shí)波幅有關(guān)(ATR)。實(shí)際上就是判斷股價(jià)應(yīng)該運(yùn)行在一個(gè)通道內(nèi)掩缓,如果突破一段時(shí)期內(nèi)的最高價(jià)雪情,則發(fā)出買入信號(hào);如果跌破一段時(shí)期內(nèi)的通道的最低價(jià)你辣,則發(fā)出賣出信號(hào)巡通,其實(shí)就一種突破策略。
額外考慮:
加入止損和倉位管理舍哄,添加一個(gè)加倉位置宴凉,并加入選股功能,測(cè)試時(shí)間覆蓋整輪牛熊轉(zhuǎn)換周期表悬,由于原始策略是應(yīng)用在期貨交易上的弥锄,因此突破通道上軌可以做多,跌破通道下軌可以做空蟆沫,而我這里是針對(duì)股票進(jìn)行交易的籽暇,因此只能做多。
具體算法:
1.設(shè)置中期(20日)或長期(55日)突破通道饭庞,假設(shè)20日戒悠;
2.每天收盤后從股票池中判斷該股票有沒有突破近20個(gè)交易日的最高價(jià)的最大值,若突破了舟山,則存入待買入股票列表绸狐,并根據(jù)20日ATR計(jì)算出止損位,并根據(jù)風(fēng)險(xiǎn)倉位累盗,計(jì)算出可交易的股數(shù)寒矿;若股價(jià)跌破止損位,則列入賣出列表幅骄;若已有持股劫窒,且股價(jià)收盤價(jià)突破加倉點(diǎn),則加倉拆座,止損位提高1/2 ATR主巍,根據(jù)當(dāng)前收盤價(jià)和新的止損位冠息,計(jì)算出可以加倉的數(shù)量。
3.開盤后孕索,若買入列表中有待買入股票信息逛艰,則買入;若待賣出列表中有待賣出股票搞旭,則進(jìn)行賣出
4.股票池從滬深300指數(shù)成分股中選擇散怖。
回測(cè):
我用寧波銀行和今世緣進(jìn)行回測(cè),可以看到收益是負(fù)的肄渗,我查了一下原因镇眷,發(fā)現(xiàn)是因?yàn)橛捎谥箵p位和突破價(jià)格過于接近,原始策略中翎嫡,止損位是由突破價(jià)格減去1/2的ATR欠动,而可交易的數(shù)量是由可交易資金/(收盤價(jià)-止損位),計(jì)算出來的惑申,因此這樣會(huì)造成具伍,一次性交易過多,而在下跌的時(shí)候放大了損失圈驼。
df = get_price(stockCode, count=6, end_date=current_dt)
attr = getATR(stockCode, g.N)
close_data = attribute_history(stockCode, g.N+1, '1d', ['close','open','high','low'])
don_stop = don_open - 1/2*attr
don_addpoint = don_open + 1/2*attr
if (df['close'][-1] > don_open) and (not isHoldStock(stockCode)):
## 存入待買入列表
buyMoney = context.portfolio.available_cash/len(g.stockList)
log.info('don_stop---------->',don_stop)
log.info('close----------->',df['close'][-1])
log.info('r----------->',df['close'][-1]-don_stop)
amount = (g.riskpercent*buyMoney/(df['close'][-1]-don_stop))
log.info('amount------------>',amount)
log.info('預(yù)估花費(fèi)----------->',amount*df['close'][-1])
buy_object = {'stockCode':stockCode,'stopPrice':don_stop,'amount':amount}
g.buyStock.append(buy_object)
因此人芽,我去掉了加倉的功能,僅僅采用了買入和賣出兩個(gè)功能绩脆,并且把止損位的計(jì)算修改成了收盤價(jià)-ATR萤厅,并增加了止盈位的計(jì)算,也就是動(dòng)態(tài)止損價(jià)衙伶,動(dòng)態(tài)止損價(jià)=前一個(gè)交易日的最低價(jià)-5日ATR祈坠,也就是說如果今日收盤價(jià)比前一個(gè)交易日的最低點(diǎn)再減去5日平均波幅還低的話,認(rèn)為這一段行情已經(jīng)結(jié)束矢劲,止盈賣出赦拘。判斷代碼如下:
for stockCode in g.stockList:
df = get_price(stockCode, count=6, end_date=current_dt)
attr = getATR(stockCode, g.N)
close_data = attribute_history(stockCode, g.N+1, '1d', ['close','open','high','low'])
don_open = np.max(close_data['high'])
#don_stop = don_open - 1/2*attr
don_stop = df['close'][-1] - attr
don_addpoint = don_open + 1/2*attr
if (df['close'][-1] > don_open) and (not isHoldStock(stockCode)):
## 存入待買入列表
buyMoney = context.portfolio.available_cash/len(g.stockList)
log.info('don_stop---------->',don_stop)
log.info('close----------->',df['close'][-1])
log.info('r----------->',df['close'][-1]-don_stop)
amount = (g.riskpercent*buyMoney/(df['close'][-1]-don_stop))
log.info('amount------------>',amount)
log.info('預(yù)估花費(fèi)----------->',amount*df['close'][-1])
buy_object = {'stockCode':stockCode,'stopPrice':don_stop,'amount':amount}
g.buyStock.append(buy_object)
## 持倉股跌破止損價(jià)或止盈價(jià)
for stock in g.currentStock:
df = get_price(stock['stockCode'], count=6, end_date=current_dt)
attr = getATR(stockCode, 5)
don_stop = df['low'][-2] - attr ## 動(dòng)態(tài)止損價(jià)位,每日變化芬沉,前一日的最低價(jià)減去平均波幅
if (df['close'][-1] < stock['stopPrice'] or df['close'][-1] < don_stop):
log.info('--------------跌破動(dòng)態(tài)止損價(jià)---------------')
g.sellStock.append(stock['stockCode'])
第二次回測(cè)躺同,效果就比較好了,采用了2010-8-1到2021-2-1的區(qū)間進(jìn)行回測(cè)丸逸,10年多時(shí)間收益為162.88%蹋艺,平均年化9.92%,雖然不是暴漲黄刚,但是還算是比較穩(wěn)定了捎谨,不過這也是針對(duì)寧波銀行和今世緣的回測(cè)結(jié)果。
接下來,添加選股模塊涛救,從滬深300指數(shù)中選擇業(yè)績比較優(yōu)秀的個(gè)股采用海龜策略進(jìn)行交易畏邢,并把倉位擴(kuò)大到3萬,回測(cè)結(jié)果如下:
可見检吆,策略可以在選股同時(shí)進(jìn)行擇時(shí)舒萎,2010-8-1至2021-2-1區(qū)間內(nèi),收益達(dá)到167.47%蹭沛,平均年化10.11%臂寝,效果還是可以的。
總結(jié):由于我做的是股票交易策略摊灭,因此在A股沒有做空的選項(xiàng)咆贬,否則還可以在跌破20日最低價(jià)的時(shí)候開空單進(jìn)行交易。由于原始策略應(yīng)用在股票上效果一般斟或,因此我進(jìn)行了改造素征,把加倉步驟給省略了集嵌,僅僅進(jìn)行買入和賣出操作萝挤,并把止盈變成了動(dòng)態(tài)止損,并加入選股模型根欧。