量化交易30天Day11 | 唐奇安通道

計算這兩條黃色線的方式有很多不同的方式,本篇介紹其中一種叫做唐奇安通道(Donchian Channel),唐奇安通道的上下軌計算方式為,上軌為過去一段時間內的最高 ...第12屆iT邦幫忙鐵人賽DAY110AI&Data量化交易30天系列第11篇量化交易30天Day11-backtrader回測框架實作(二)唐奇安通道策略12th鐵人賽pythondatabacktrader量化交易SeanLiu團隊OutcomeFirst2020-09-2409:11:191660瀏覽量化交易30天本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

上篇寫了常見的均線交叉策略,這篇要來練習一下怎麼使用backtrader寫通道策略,那什麼是通道策略呢?通道策略要講通道策略,直接看圖最快,下面是維基百科裡面的圖:從上圖可以看到,白色的線是股價走勢,上下有兩條黃色的線包覆中間的白色線,包圍的區間看起來就像是一個通道,所以叫做通道策略,上下兩條黃線則是稱為上下軌。

計算這兩條黃色線的方式有很多不同的方式,本篇介紹其中一種叫做唐奇安通道(DonchianChannel),唐奇安通道的上下軌計算方式為,上軌為過去一段時間內的最高價,下軌為過去一段時間內的最低價。

若股價超過上軌,可能表示多頭較強勢,所以產生買進訊號,若股價低於下軌,可能表示空頭較強勢,所以產生賣出訊號。

至於這過去一段時間要採用多長的時間,會跟商品性質或是交易頻率比較有相關。

開始寫策略吧寫唐奇安通道策略大概需要三個步驟:計算通道上下軌撰寫交易策略執行回測計算通道上下軌因為上下軌是用來買進賣出的指標,因此可以使用backtrader的Indicators,官網文件有非常詳細的介紹。

下面程式碼是官網的範例,由於實在蠻複雜的,就一行一行來解釋:fromdatetimeimportdatetimeimportbacktraderasbt#定義一個Indicator物件classDonchianChannels(bt.Indicator):#這個物件的別名,所以後面我們可以用DCH/DonchianChannel來呼叫這個指標alias=('DCH','DonchianChannel',)#三條線分別代表唐奇安通道中的中軌(上軌加下軌再除以2)、上軌、下軌lines=('dcm','dch','dcl',)#dcmiddle,dchigh,dclow#軌道的計算方式:用過去20天的資料來計算,所以period是20,lookback的意思是要不要將今天的資料納入計算,由於唐奇安通道是取過去20天的最高或最低,所以一定不能涵蓋今天,不然永遠不會有訊號出現,所以要填-1(從前一天開始算20天)params=dict(period=20,lookback=-1,#considercurrentbarornot)#是否要將Indicators另外畫一張圖,然而通道線通常都是跟股價圖畫在同一張,才能看得出相對關係,所以這裡就填subplot=Falseplotinfo=dict(subplot=False)#plotalongwithdata#繪圖設定,ls是linestyle,'--'代表虛線plotlines=dict(dcm=dict(ls='--'),#dashedlinedch=dict(_samecolor=True),#usesamecolorasprevline(dcm)dcl=dict(_samecolor=True),#usesamecolorasprevline(dch))def__init__(self):#hi與lo是指每日股價的最高與最低價格hi,lo=self.data.high,self.data.low#視需求決定是否要從前一天開始讀資料,上面已經定義lookback存在,所以這邊會直接從前一天的資料開始跑ifself.p.lookback:#movebackwardsasneededhi,lo=hi(self.p.lookback),lo(self.p.lookback)#定義三條線的計算方式self.l.dch=bt.ind.Highest(hi,period=self.p.period)self.l.dcl=bt.ind.Lowest(lo,period=self.p.period)self.l.dcm=(self.l.dch+self.l.dcl)/2.0#avgoftheabov


常見投資理財問答


延伸文章資訊