01 引言 動量策略是通過利用市場波動從現(xiàn)有趨勢的延續(xù)中獲利。簡單來說,高買高賣,反之亦然(“低買高賣”是均值回歸策略思想,與動量策略相反)。價值投資通?;诰档拈L期回歸,而動量投資基于均值回歸發(fā)生之前的時間間隔。通常而言,基于過去回報(價格動量策略)或收益意外(稱為收益動量策略)的策略是利用市場對不同信息的反應(yīng)不足。換句話說,收益動量策略是基于對短期收益相關(guān)信息的反應(yīng)不足中獲利,而價格動量策略是基于從市場對更廣泛信息(包括長期盈利能力)的緩慢反應(yīng)中獲利。動量策略的構(gòu)建有兩種思路,一種是個股歷史價格動量,即與過去價格相比計算漲跌幅,也叫時間動量;另一種是截面動量,即對當前市場所有個股進行某期間漲跌幅排序,如歐奈爾的RPS指標。下面以簡單的均線為例,構(gòu)建均線多頭排列的時間動量進行歷史回測。數(shù)據(jù)獲取、可視化和回測均用到公眾號開發(fā)的qstock包(免費),關(guān)于qstock的數(shù)據(jù)、可視化、選股等詳細教程請參閱以下推文: 【qstock開源了】數(shù)據(jù)篇之行情交易數(shù)據(jù) 【qstock數(shù)據(jù)篇】行業(yè)概念板塊與資金流 【qstock量化】數(shù)據(jù)篇之股票基本面數(shù)據(jù) 【qstock量化】數(shù)據(jù)篇之宏觀指標和財經(jīng)新聞文本 【qstock量化】動態(tài)交互數(shù)據(jù)可視化 【qstock量化】技術(shù)形態(tài)與概念熱點選股池 【手把手教你】使用qstock實現(xiàn)量化策略選股 02 Python計算均線動量 使用漢明距離(scipy.spatial.distance)度量均線多頭排列的動量趨勢。漢明距離是信息論里的一個概念,它表示兩個(相同長度)字符串對應(yīng)位置的不同字符的數(shù)量。漢明距離對向量按元素進行比較,并對差異的數(shù)量進行平均,如果兩個向量相同,得到的距離是0之間,如果兩個向量完全不同,得到的距離是1。 import numpy as npimport pandas as pdimport scipy.stats as statsfrom datetime import timedeltaimport scipy.spatial.distance as distanceimport matplotlib.pyplot as pltimport qstock as qs 使用qstock獲取回測用數(shù)據(jù),以中國平安為例,基準指數(shù)為滬深300指數(shù),回測期間為2010-2022年。
均線數(shù)據(jù)可視化。 #均線可視化cols=['close']+[str(i)+'日均線' for i in np.linspace(10, 100, 10)]qs.line(df['2020':][cols])
for date in df.index: 個股價格與均線漢明距離得分數(shù)據(jù)可視化。
#描述性統(tǒng)計df[['close','scores']].describe() 03 動量回測 策略思路:當短期均線大于長期均線呈現(xiàn)多條均線的多頭排列時,買入做多,當均線呈現(xiàn)空頭排列時賣出。使用漢明距離可以度量均線的多頭與空頭排列得分,當出現(xiàn)完美的均線多頭時(短期均線依次大于長期均線,如10日MA > 20日MA >… 100日MA),得分為1;當出現(xiàn)完美的空頭時,即短期均線依次小于長期均線,如10日MA < 20日MA <… <100日MA)得為0,其他均線排列得分位于0-1之間??梢愿鶕?jù)得分設(shè)定一個門檻值,如當scores得分大于0.5,給出買入或持有的信號,否則為賣出或做空信號。
#可以通過ma_list自定義設(shè)置ma均線計算周期#如ma_list=[3, 5, 8, 13, 21, 34, 55, 89, 144, 233]#ma_list=None表示默認使用10-100日均線data=ma_momentum('中國平安',ma_list=None,threshold=0.8) 回測結(jié)果。
修改均線參數(shù),同時以貴州茅臺個股為例重新進行回測。 fib=[3, 5, 8, 13, 21, 34, 55, 89, 144, 233]data=ma_momentum('貴州茅臺',ma_list=fib,threshold=0.5)qs.start_backtest(data) 此外,介紹一個非常簡單易上手的回測框架quantstats,下面使用它展示歷史回測結(jié)果。注意quantstats要先使用'pip install QuantStats'進行安裝,注意安裝的時候包含大寫字母,導(dǎo)入使用小寫字母。quantstats與pyfolio類似,一行代碼可以實現(xiàn)豐富的回測圖表,下面只展示部分結(jié)果。如下面輸入qst.reports.html(data.capital_ret),可以生成本地基于web的html回測結(jié)果。關(guān)于pyfolio的回測用法可以參照推文:《Pyfolio一行代碼實現(xiàn)專業(yè)量化回測圖表》
qst.reports.full(data.capital_ret) 04 結(jié)語 本文利用漢明距離計算均線排列的得分來評估股價的動量趨勢,并以此構(gòu)建擇時交易策略,即當呈現(xiàn)多頭均線排列的趨勢時買入,空頭排列時賣出。以中國平安和貴州茅臺個股為例進行了歷史回測,結(jié)果顯示該交易策略優(yōu)于買入持有和基準指數(shù)。 對于歷史上證明有效的任何策略,通常有兩種解釋,該策略已經(jīng)補償了它所承擔的額外風(fēng)險,或者存在溢價行為因素。那為什么動量策略有效?動量策略起作用的邏輯在于,投資者表現(xiàn)出一長串行為偏見和情緒錯誤。然而,這說起來容易做起來難,因為趨勢不會永遠持續(xù)下去,并且在達到頂峰和結(jié)束時可能會迅速逆轉(zhuǎn)。動量交易比大多數(shù)其他策略具有更高程度的波動性,并試圖利用市場波動性。通過使用適當?shù)娘L(fēng)險管理技術(shù)和止損,正確安排買賣時間以避免損失非常重要。 |
|
來自: 追夢文庫 > 《均線交易系統(tǒng)》