变点理论CUSUM在择时交易中的应用
之前看到一篇文章,變點理論CUSUM在量化交易中;列了一堆數據和公式,說結果不錯。鏈接如下:
https://max.book118.com/html/2017/0726/124391946.shtm
或者這個,就是整理版,有很詳細的公式推導,不過代碼寫的不清不楚的,應該沒寫完。
https://wizardforcel.gitbooks.io/python-quant-uqer/134.html
花了些時間研究下:
原理描述:CUSUM控制圖的設計思想是對信息加以累積,將過程的小偏移累加起來,達到放大的結果,從而提高檢驗小偏移的靈敏度。CUSUM作為一個統計量,其由來具有嚴格的數學推理,總的來說,是一個變點假設檢驗通過極大似然法推導得到的統計量。
具體推導不研究了,直接看具體引用
其實就是我之前文章說到那個那個對數收益率,形成一個對數收益率的近似正太分布。如上圖,這里有一個上下允偏量k,這里設為k = 0.02, 先說上閾值, 那么時序隊列里面,下一個時段的對數收益率大于0.02,yi則差值為正;如果差值累計yi的和Ci大于h,比如h為0.5。則觸發向上趨勢。
其實就是如果多次超過 允偏量收益率發生,或者一次非常大的收益率情況發生,使得c值大于h 就會觸發向上趨勢判斷。如果只是偶爾一次大于 允偏量,那么下一次小于k (0.02)時候,差值為負值,和值Ci就變小了,這里Max的作用就是保證C為正,不會因為多次低于k值為負值。向下趨勢判斷也是同理。
代碼如下,這里調用ta-lib庫來計算均值和標準差,速度比起用numpy還快一些。用標準差做為 允偏量k;5倍標準差為h 閾值。
#?encoding:?UTF-8 import?numpy?as?np import?pandas?as?pd import?matplotlib.pyplot?as?plt import?talib def?detect_via_cusum_lg(ts,?istart=30,?threshold_times=5):"""detect?a?time?series?using??cusum?algorithm:param?ts:?the?time?series?to?be?detected:param?istart:?the?data?from?index?0?to?index?istart?will?be?used?as?cold?startup?data?to?train:param?threshold_times:?the?times?for?setting?threshold:return:"""S_h?=?0S_l?=?0S_list?=?np.zeros(istart)meanArray?=?talib.SMA(ts,timeperiod?=?istart)stdArray?=?talib.STDDEV(np.log(ts/meanArray),timeperiod?=?istart)for?i?in?range(istart+1,?len(ts)-1):tslog?=?np.log(ts[i]?/?meanArray[i?-?1])S_h_?=?max(0,?S_h?+?tslog?-?stdArray[i-1])S_l_?=?min(0,?S_l?+?tslog?+?stdArray[i-1])if?S_h_>?threshold_times?*?stdArray[i-1]:S_list?=?np.append(S_list,1)S_h_?=?0elif?abs(S_l_)>?threshold_times?*??stdArray[i-1]:S_list?=?np.append(S_list,?-1)S_l_?=?0else:S_list?=?np.append(S_list,?0)S_h?=?S_h_S_l?=?S_l_return?S_list #數據導入 df5min?=??pd.read_csv("bar5rb8888.csv") dt0?=?np.array(df5min["close"]) listup,listdown?=?[],[] s_list?=?detect_via_cusum_lg(dt0,istart=30,?threshold_times=5) for?i?in?range(0,len(s_list)):if?s_list[i]?==?1:listup.append(i)elif?s_list[i]?==?-1?:listdown.append(i) plt.subplot(2,1,1) plt.plot(dt0,?color='y',?lw=2.) plt.plot(dt0,?'^',?markersize=5,?color='r',?label='UP?signal',?markevery=listup) plt.plot(dt0,?'v',?markersize=5,?color='g',?label='DOWN?signal',?markevery=listdown) plt.legend() plt.subplot(2,1,2) plt.title('s_list') plt.plot(s_list,'r-') plt.show()
用5分鐘螺紋鋼數據跑出來,部分如下,好像有搞頭。代碼在我Github里面可以找到
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/22259926/viewspace-2654170/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/22259926/viewspace-2654170/
總結
以上是生活随笔為你收集整理的变点理论CUSUM在择时交易中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球及中国EOG放大器行业运营前景与发展
- 下一篇: RRU3606学习