烏龜交易系統(tǒng)是一個有趣的想法,探索趨勢追隨者和突破交易者。“烏龜”的基本目標是在早期階段輸入趨勢-它使用范圍突破來計算這些條目的時間。
海龜?shù)碾p系統(tǒng)突破+趨勢追隨者
海龜交易策略使用雙突破系統(tǒng)進入市場。這背后的想法是從新發(fā)展趨勢中識別并從中獲利。這兩個系統(tǒng)協(xié)同工作,相互補充。
某種突破后,新趨勢經(jīng)常開始。突破只是價格開始向新方向強勁移動的位置,超出既定范圍,突破新高或新低的地方。
這是一個突破交易者想要進入市場的時間。然而事實是,大多數(shù)突破并沒有發(fā)展成足以賺取利潤的趨勢。
烏龜?shù)目焖偻黄浦荚诒M早進入趨勢。它的目標是在最初的階段建立這個位置,因為一種新的趨勢正在形成。
另一方面,烏龜?shù)木徛黄葡到y(tǒng)在更長的時間范圍內(nèi)工作,需要更強烈地指示趨勢的存在。這樣做的目的是輸入比較短時間范圍內(nèi)的趨勢更為確定的趨勢。
慢速突破信號還允許比快速突破系統(tǒng)更大的回撤趨勢。這使它能夠保持強勁的趨勢,持續(xù)時間更長。
快速突破-為期20天的系統(tǒng)
以20天突破的示例。烏龜系統(tǒng)觸發(fā)買入條目,觸發(fā)發(fā)生的原因是價格突破了20天的區(qū)間并創(chuàng)出新高。這發(fā)生在標有藍色箭頭的蠟燭上。
隨后趨勢進一步上升并且在綠色箭頭處觸發(fā)第一累積信號。
隨著價格以距離1/2 N的步長向上移動,原始龜系統(tǒng)累積(添加單位),其中N是市場的平均每日移動(參見此處的解釋)。這意味著按照1/2?,1個?,1.5倍?等等。
第一綠色箭頭的條目的價格和當前價格之間的移動大于8.5×更多?。這會觸發(fā)另一個買單。
另一個累積信號以1x N觸發(fā),因為價格繼續(xù)在利潤方向上升。此時,頭寸總數(shù)為3個單位,平均入場價為1.0773。添加第三個單元后,趨勢再次開始下降。請注意,不會添加其他單位,因此位置大小不會更改。
3個單位的平均價格為1.0773。在標有紅色關閉箭頭的蠟燭上,價格下降到1.0703。
此時N的值為65點,因此觸發(fā)止損,因為價格現(xiàn)在比最后入場價格1.0838低2x N(130點)。
使用追蹤止損:只要向某個位置添加單位,海龜就會使用追蹤止損。這有兩個影響。第一個是鎖定早期交易的利潤,第二個是限制后期交易的下行風險。
所有單位的止損通常位于訂單填寫的最后入場價格的2x N處。因此,例如,如果最后一個倉位以1.0838和N=65點的價格被填充,這意味著之前添加的單位的止損將全部上調(diào)至1.0838-2x N或1.0708。
根據(jù)海龜?shù)囊?guī)定,只有在上一次突破失敗時才會進行為期20天的突破。因此,由于這個以止損結束,下一個突破將被交易而不是跳過。
慢速突破-55天系統(tǒng)
緩慢突破類似于快速突破,但是當更長和更大幅度的趨勢可能開始時觸發(fā)。
價格必須突破其55天的范圍,并觸發(fā)買單或賣單具體取決于是分別達到高點還是低點。
與快速突破不同,55天突破在每個信號上交易。另一方面,20天的突破只會在上一次失敗時觸發(fā),如上所述。
把它們放在一起
烏龜不是一個快速的戰(zhàn)略。至少在看到好處之前必須遵循幾個月。那是因為它產(chǎn)生了大量的小損失并帶來了一些巨大的收益。為了獲利,那些巨大的勝利必須足以彌補損失。
這種高失敗率意味著海龜交易者必須依靠一些技巧來增加在正確的時間進入的機會。烏龜還依賴強大的風險管理,這是整個戰(zhàn)略的一個組成部分。
海龜交易法則代碼
海龜交易系統(tǒng)是由理查德丹尼斯創(chuàng)造的,并且在1980年代為交易員提供了出色的工作。但事實證明,該系統(tǒng)需要進行一些調(diào)整,以反映新的市場條件并立即生效。也就是說,趨勢仍然存在,這意味著存在大量的交易機會。
海龜交易策略的核心是在55天的突破中對期貨持倉。55天的突破是價格超過過去55天價格的高點或低點。完整的策略更復雜,但是在本文中,我已經(jīng)用Python編寫了戰(zhàn)略的關鍵,并在Apple Inc.,Kinder Morgan Inc.和Ford Motor Company等股票上交易。
第1步:導入必要的庫
#獲取收盤價數(shù)據(jù)
從pandas_datareader導入數(shù)據(jù)為pdr
將fix_yahoo_finance導入為yf
YF。pdr_override()
#繪制圖表
導入matplotlib。作為plt的pyplot
進口seaborn
#數(shù)據(jù)操作
導入numpy為np
將pandas導入為pd
第2步:定義一個函數(shù)來計算股票的策略性能
我們將Apple,Kinder Morgan和Ford Motor的股票代碼傳遞給此功能。
def strategy_performance(stock_ticker):
#從yahoo finance獲取stock_ticker的數(shù)據(jù)。
stock=pdr。get_data_yahoo(stock_ticker,start=“2009-01-01”,end=“2017-10-01”)
計算5天的突破和意味著
過去5天的高,低和平均值被計算并存儲在數(shù)據(jù)框庫存中。圖5是在回測中要優(yōu)化的自由參數(shù)。大熊貓滾動功能用于計算突破和平均值。
#5天高
股票['高']=股票。關閉。轉移(1)。滾動(窗口=5)。max()
#5天低
股票['低']=股票。關閉。轉移(1)。滾動(窗口=5)。min()
#5天意味著
股票['avg']=股票。關閉。轉移(1)。滾動(窗口=5)。意思是()
入境規(guī)則
當股票的收盤價高于過去55天的高點時,我們會對股票做多,當股票的收盤價低于過去55天的低點時,我們會對股票做空。
stock['long_entry']=股票。關閉>股票。高
stock['short_entry']=股票。關閉<股票。低
退出規(guī)則
如果股票價格超過過去55天的平均值,我們將退出頭寸。
stock['long_exit']=股票。關閉<股票。平均
stock['short_exit']=股票。關閉>股票。平均
位置
我們現(xiàn)在將進入和退出信號存儲在一列中。長倉由1表示,短倉由-1表示,或者沒有倉位由0表示。如果使用fillna方法在一段時間內(nèi)沒有倉位,我們將繼續(xù)前一個倉位。
stock['positions_long']=np。楠
股票。loc[股票。long_entry,'positions_long']=1
股票。loc[股票。long_exit,'positions_long']=0
stock['positions_short']=np。楠
股票。loc[股票。short_entry,'positions_short']=-1
股票。loc[股票。short_exit,'positions_short']=0
股票['信號']=股票。positions_long+股票。positions_short
股票=股票。fillna(method='ffill')
戰(zhàn)略回報
我們計算了股票的日志收益并乘以信號(1,-1或0)來獲得策略回報。
daily_log_returns=np。log(stock。關閉/庫存。關閉。班次(1))
daily_log_returns=daily_log_returns*stock。信號。轉移(1)
#繪制'daily_log_returns'的分布
print stock_ticker
daily_log_returns。hist(箱子=50)
plt。show()
return daily_log_returns。cumsum()
第3步:創(chuàng)建股票組合并計算每只股票的策略表現(xiàn)。
portfolio=['AAPL','KMI','F']
cum_daily_return=pd。DataFrame()
對于股票的投資組合:
cum_daily_return[stock]=strategy_performance(stock)
#繪制累計每日回報
打印“累積每日報酬”
cum_daily_return。情節(jié)()
#顯示情節(jié)
plt。show()
如果你想修改策略,那么你可以復制這個代碼,它應該很簡單。您可以在投資組合中添加更多股票,并評估這些股票的策略表現(xiàn)。
結果的一個限制是它不包括交易成本。了解上述策略涉及大量風險也很重要。您根據(jù)最近其他市場參與者的買入或賣出買入或賣出股票。