变点理论CUSUM在择时交易中的应用
之前看到一篇文章,變點(diǎn)理論CUSUM在量化交易中;列了一堆數(shù)據(jù)和公式,說(shuō)結(jié)果不錯(cuò)。鏈接如下:
https://max.book118.com/html/2017/0726/124391946.shtm
或者這個(gè),就是整理版,有很詳細(xì)的公式推導(dǎo),不過(guò)代碼寫(xiě)的不清不楚的,應(yīng)該沒(méi)寫(xiě)完。
https://wizardforcel.gitbooks.io/python-quant-uqer/134.html
花了些時(shí)間研究下:
原理描述:CUSUM控制圖的設(shè)計(jì)思想是對(duì)信息加以累積,將過(guò)程的小偏移累加起來(lái),達(dá)到放大的結(jié)果,從而提高檢驗(yàn)小偏移的靈敏度。CUSUM作為一個(gè)統(tǒng)計(jì)量,其由來(lái)具有嚴(yán)格的數(shù)學(xué)推理,總的來(lái)說(shuō),是一個(gè)變點(diǎn)假設(shè)檢驗(yàn)通過(guò)極大似然法推導(dǎo)得到的統(tǒng)計(jì)量。
具體推導(dǎo)不研究了,直接看具體引用
其實(shí)就是我之前文章說(shuō)到那個(gè)那個(gè)對(duì)數(shù)收益率,形成一個(gè)對(duì)數(shù)收益率的近似正太分布。如上圖,這里有一個(gè)上下允偏量k,這里設(shè)為k = 0.02, 先說(shuō)上閾值, 那么時(shí)序隊(duì)列里面,下一個(gè)時(shí)段的對(duì)數(shù)收益率大于0.02,yi則差值為正;如果差值累計(jì)yi的和Ci大于h,比如h為0.5。則觸發(fā)向上趨勢(shì)。
其實(shí)就是如果多次超過(guò) 允偏量收益率發(fā)生,或者一次非常大的收益率情況發(fā)生,使得c值大于h 就會(huì)觸發(fā)向上趨勢(shì)判斷。如果只是偶爾一次大于 允偏量,那么下一次小于k (0.02)時(shí)候,差值為負(fù)值,和值Ci就變小了,這里Max的作用就是保證C為正,不會(huì)因?yàn)槎啻蔚陀趉值為負(fù)值。向下趨勢(shì)判斷也是同理。
代碼如下,這里調(diào)用ta-lib庫(kù)來(lái)計(jì)算均值和標(biāo)準(zhǔn)差,速度比起用numpy還快一些。用標(biāo)準(zhǔn)差做為 允偏量k;5倍標(biāo)準(zhǔn)差為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 #數(shù)據(jù)導(dǎo)入 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分鐘螺紋鋼數(shù)據(jù)跑出來(lái),部分如下,好像有搞頭。代碼在我Github里面可以找到
來(lái)自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/22259926/viewspace-2654170/,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任。
轉(zhuǎn)載于:http://blog.itpub.net/22259926/viewspace-2654170/
總結(jié)
以上是生活随笔為你收集整理的变点理论CUSUM在择时交易中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全球及中国EOG放大器行业运营前景与发展
- 下一篇: RRU3606学习