小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【手把手教你】基于均線排列的價格動量策略回測

 追夢文庫 2022-12-31 發(fā)布于天津

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ù)#data_feed是qstock回測模塊獲取數(shù)據(jù)函數(shù),默認基準指數(shù)為滬深300#fqt=2表示后復(fù)權(quán)數(shù)據(jù),等于1表示前復(fù)權(quán)df=qs.data_feed('中國平安',index='hs300',start='20100101',end='202201216',fqt=2)#計算10個均線序列for i in np.linspace(10, 100, 10):    df[str(i)+'日均線']=df['close'].rolling(window=int(i),center=False).mean()df.dropna(inplace=True)

均線數(shù)據(jù)可視化。

#均線可視化cols=['close']+[str(i)+'日均線' for i in np.linspace(10, 100, 10)]qs.line(df['2020':][cols])
文章圖片1


cols=[str(i)+'日均線' for i in np.linspace(10, 100, 10)]

for date in df.index:
#圍繞每一日的均線大小進行排序
ranking = stats.rankdata(df.loc[date,cols].values)
#計算每一日均線之間的漢明距離(scipy.spatial.distance)
df.loc[date,'scores']= distance.hamming(ranking, range(1,11))

個股價格與均線漢明距離得分數(shù)據(jù)可視化。

#價格走勢與均線排列的漢明距離得分可視化df[['close','scores']].plot(figsize=(15,7),secondary_y='scores', alpha=0.6)plt.show()
文章圖片2
#描述性統(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,給出買入或持有的信號,否則為賣出或做空信號。

#封裝成函數(shù)方便后面進行回測分析def ma_momentum(code,benchmark='hs300',start='20100101',end='202201219',ma_list=None,threshold=0.8):    df=qs.data_feed(code,index=benchmark,start=start,end=end,fqt=2)    ss=np.linspace(10, 100, 10) if ma_list is None else ma_list    for i in ss:        df[str(i)+'日均線']=df['close'].rolling(window=int(i),center=False).mean()    df.dropna(inplace=True)    cols=[str(i)+'日均線' for i in ss]    for date in df.index:        ranking = stats.rankdata(df.loc[date,cols].values)        df.loc[date,'scores']= distance.hamming(ranking, range(1,len(ss)+1))    #當日均線多頭排列scores=1發(fā)出買入信號設(shè)置為1    df.loc[df['scores']>threshold, 'signal'] = 1    #當日均線空頭排列scores=0發(fā)出買入信號設(shè)置為0    df.loc[df['scores']<=threshold, 'signal'] = 0    df['position']=df['signal'].shift(1)    df['position'].fillna(method='ffill',inplace=True)    d=df[df['position']==1].index[0]-timedelta(days=1)    df1=df.loc[d:].copy()    df1['position'][0]=0    #當倉位為1時,買入持倉,當倉位為0時,空倉,計算資金凈值    df1['capital_ret']=df1.rets.values*df1['position'].values    #計算策略累計收益率    df1['capital_line']=(df1.capital_ret+1.0).cumprod()    return df1
#可以通過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é)果。

qs.start_backtest(data)
文章圖片3
文章圖片4

修改均線參數(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)
文章圖片5
文章圖片6

此外,介紹一個非常簡單易上手的回測框架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è)量化回測圖表》

import quantstats as qst
qst.reports.full(data.capital_ret)
文章圖片7
文章圖片8
文章圖片9
文章圖片10
文章圖片11

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ù)和止損,正確安排買賣時間以避免損失非常重要。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多