變點理論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 = 0 S_l = 0 S_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_ = 0 elif abs(S_l_)> threshold_times * stdArray[i-1]: S_list = np.append(S_list, -1) S_l_ = 0 else: 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OPF理論在回合RPG中的分析和應用
- TRIZ理論在洗碗機設計中應用探討
- TRIZ理論在數字化轉型中的應用體現
- TRIZ理論在電極材料應用中的可行性分析
- Calendar類在Java中的應用與日期時間處理Java
- TRIZ理論在提高AGV導航系統可靠性中的應用
- MongoDB在vivo評論中臺的應用案例MongoDB
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- [論文閱讀] RNN 在阿里DIEN中的應用RNN阿里
- 5G在工業中應用的討論
- SQL解析在美團點評中的應用SQL
- 數字影像處理學習筆記(1)——傅立葉變換在影像處理中的應用筆記
- 時間輪原理及其在框架中的應用框架
- flume面試理論和應用面試
- 【分散式】CAP理論及其應用分散式
- TiDB 在連鎖快餐企業丨海量交易與實時分析的應用探索TiDB
- SQL解析在美團點評中是如何應用的?SQL
- nodejs在自然語言處理中的一些小應用NodeJS自然語言處理
- 在單頁應用中,如何優雅的監聽url的變化
- 【數學】向量點乘、叉乘的理論、應用及程式碼實現(C++)點乘C++
- redis在nodejs中的應用RedisNodeJS
- redis在python中的應用RedisPython
- Refs 在React中的應用React
- HMM在NLP中的應用HMM
- MQTT 在 Elixir 中的應用MQQT
- 開源軟體在地圖資料處理中的應用地圖
- 驗證碼處理在自動化測試中的應用
- Handler的一點理論分析
- Docker在公有云的應用處理能力Docker
- 結構struct(值型別)在實際應用中應該注意的點Struct型別
- 是否應該在未選中行時禁用刪除按鈕,還是應該在點選按鈕時提示選擇資料?
- 後疫情時代 Wi-Fi 6在高校中的應用
- 馬斯洛“需求層次理論” 在《植物大戰殭屍》中的運用
- 【帶權並查集】理論和應用並查集
- 「人工智慧」人工智慧時代的道路選擇 | 焦點評論人工智慧
- BurpSuite在非Web應用測試中的應用UIWeb
- 高效壓縮點陣圖在推薦系統中的應用
- 淺析機器視覺在醫療影像處理中的應用視覺