十大量化經(jīng)典策略——海龜交易策略

海龜交易策略也叫唐奇安通道策略类垦,是一個(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è):

回測(cè)1

我用寧波銀行和今世緣進(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è)2

第二次回測(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é)果如下:


回測(cè)3

可見检吆,策略可以在選股同時(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)止損,并加入選股模型根欧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怜珍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凤粗,更是在濱河造成了極大的恐慌酥泛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌拣,死亡現(xiàn)場離奇詭異遥皂,居然都是意外死亡貌嫡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陈症,“玉大人,你說我怎么就攤上這事猿诸「甚耍” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵酝润,是天一觀的道長燎竖。 經(jīng)常有香客問我,道長要销,這世上最難降的妖魔是什么构回? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上纤掸,老公的妹妹穿的比我還像新娘拨扶。我一直安慰自己,他們只是感情好茁肠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布患民。 她就那樣靜靜地躺著,像睡著了一般垦梆。 火紅的嫁衣襯著肌膚如雪匹颤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天托猩,我揣著相機(jī)與錄音印蓖,去河邊找鬼。 笑死京腥,一個(gè)胖子當(dāng)著我的面吹牛赦肃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播公浪,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼他宛,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了欠气?” 一聲冷哼從身側(cè)響起厅各,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎预柒,沒想到半個(gè)月后队塘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宜鸯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年憔古,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淋袖。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸿市,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出适贸,到底是詐尸還是另有隱情灸芳,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布拜姿,位于F島的核電站烙样,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蕊肥。R本人自食惡果不足惜谒获,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一蛤肌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧批狱,春花似錦裸准、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爪膊,卻和暖如春权悟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背推盛。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工峦阁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耘成。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓榔昔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘪菌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撒会,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容