<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 5.13 變點理論 · 變點策略初步 > 來源:https://uqer.io/community/share/5667d533f9f06c6c8a91b61c 尋找變點 ## 1.變點理論 變點理論是統計學中的一個經典分支,其基本定義是在一個序列或過程中,當某個統計特性(分布類型、分布參數)在某時間點受系統性因素而非偶然性因素影響發生變化,我們就稱該時間點為變點。變點識別即利用統計量或統計方法將該變點位置估計出來。 CUSUM圖作為工業應用檢驗變點的三大控制圖之一,其利用假設檢驗和極大似然估計的相關統計原理,構建累積和統計量,不斷累積觀察值與基線水平的差值,將微小偏差累積,放大觀察數據出現的波動,從而更加迅速敏感地探測到微小的異常情況,檢驗出變點位置。其最大的特點是對系統性變化的敏感性,不需要積累太多的樣本,因而能較好的控制風險。 基于變點CUSUM圖的基本原理,以股價對數收益率符合局部正態分布為基本原理,構建CUSUM的上下統計量,一旦統計量突破閾值即判斷出現變點。以股價上升時對數收益率出現上升變點作為買入時機,以股價下降時對數收益率出現下降變點作為賣出時機。統計量中的兩個參數,允偏量k設置為動態變化自適應的形式,閾值h則需要根據直觀進行設定。 ## 2.CUSUM原理 CUSUM控制圖的設計思想是對信息加以累積,將過程的小偏移累加起來,達到放大的結果,從而提高檢驗小偏移的靈敏度。CUSUM作為一個統計量,其由來具有嚴格的數學推理,總的來說,是一個變點假設檢驗通過極大似然法推導得到的統計量。 令`xi`(it)為獨立的`N(δ,1)`同分布,其中`t`為未知變點,對于給定的觀察序列`xn`,假設`t=v`,如此構成一個假設檢驗問題: ![](https://box.kancloud.cn/2016-07-30_579cbdae3cbd4.jpg) 則似然比統計量為(以`Φ(`表示標準正態分布`N(0,1)`的分布密度函數): ![](https://box.kancloud.cn/2016-07-30_579cbdae4f6b7.jpg) 對數化為: ![](https://box.kancloud.cn/2016-07-30_579cbdae60cc8.jpg) 假設變量有偏移,則其對數似然統計量為: ![](https://box.kancloud.cn/2016-07-30_579cbdae739ce.jpg) 若我們檢驗的為向上偏移,即`δ>0`,上述的對數似然統計量等價于下面統計量 ![](https://box.kancloud.cn/2016-07-30_579cbdae85008.jpg) 設`n-1` 個觀測值沒有均值偏移,即 ![](https://box.kancloud.cn/2016-07-30_579cbdae97921.jpg) `h`為門限。如果在時刻`n`,滿足: ![](https://box.kancloud.cn/2016-07-30_579cbdaeaa422.jpg) 則這個過程發生了均值偏移。以下記號推導有: ![](https://box.kancloud.cn/2016-07-30_579cbdaebe5a2.jpg) 用不定參數`k`代替`δ/2`,就得到了`Zn`的遞推公式: ![](https://box.kancloud.cn/2016-07-30_579cbdaed2891.jpg) 若設定報警門限為`h>0`,如果在第`n`個觀察點滿足: ![](https://box.kancloud.cn/2016-07-30_579cbdaee68ce.jpg) 則報警,確定在`n`以前的統計量發生了均值向上偏移,判斷有系統性因素而非偶然性因素存在。 向下偏移也可通過類似的推導得到。 ## 3.具體應用 由CUSUM的推導分析,我們得到CUSUM統計量,即: ![](https://box.kancloud.cn/2016-07-30_579cbdaf051fc.jpg) 其中`X`為金融序列,令`yi=Xi?k`,其中k為允偏量。上下預警指標分別為 ![](https://box.kancloud.cn/2016-07-30_579cbdaf1a803.jpg) 若預警指標分別達到上下閾值`h`,則對應地產生上變點和下變點。 ``` Ci≥h,C′i≤?h ``` ## 4.參數設定 (1)允偏量k值 經過正態分布標準化后的假設檢驗,即變點前的數據服從`N(0,1)`分布,變點后的數據服從`N(δ,1)`分布。累積和控制圖的算法設計是基于既定的觀測值偏移量,即控制圖參數`k`,理論上`k=δ/2`時控制圖的效果最好,其中,`δ`即為觀測值`X`的偏移量。但是實際情形下,`δ`是未知量,也是我們需要檢測的值,同時`δ`會隨采樣時間`t`變化,其大小決定了累積和控制圖參數`k`的取值,并通過`k`的變化影響控制圖的統計性能,所以有必要對`δ`進行動態預測和更新。 這里基于已檢測的歷史數據和待檢測的點作一個動態設定。運用已知歷史序列擬合參數`mu`和`sigma`,再將歷史數據和待檢測點進行標準正態化,則歷史數據的均值為0,而待測點的值為`x`。在某種程度上,可將標準化后的歷史數據看作`N(0,1)`分布,而將待檢測點看作`N(x,1)`分布,按照CUSUM的推導,設置`k=x/2` 2)閾值`h` 在參數檢驗中,為使得觀測數據盡量復合假設,需要將觀測到的數據正態標準化,所以閾值h的設置在一定程度上相當于標準正態分布參數的選定,參考布林帶的做法,我們將`h`定為2(布林帶標準差的倍數一般為2)。 ## 5.算法步驟 a) 選取數據段`x0`,計算對數收益率`r`; b) 從數據段`x0`的第一個數據開始,以第一第二個數據為初始數據段`startdata`,進行正態分布擬合,得到均值`mu`和標準差`sigma`,選擇數據段外的第一個數據(整體樣本的第三個數據),合成實驗數據段data,并利用`mu`和`sigma`值進行歸一化,得到標準正態分布序列(近似)`x`; c) 允偏量`k`采取動態變化,為歸一化后序列`x`的最后一個數值的一半,計算上下CUSUM統計量,判斷`x`序列最后一個數是否超出CUSUM閾值,若超出,對`x`序列最后一個點進行變點標記;若不超出,往后迭代,直至出現變點標記為止; d) 從`x0`第二個點開始,重現選擇數據段,依照a)、b)步驟標記變點,直至標記完所有的起點為止; e) 若該點存在標記數,則判斷該點為變點; f) 在變點中選擇處于股價上升路徑的上升變點以及股價處于下降路徑中的下降變點,以此確定拐點和拐點方向。 流程圖如下: ![](https://box.kancloud.cn/2016-07-31_579d7a01ae3b4.webp) ## 6.初步程序 原理部分來源于長江金工(作者:劉勝利),更加全面的可見( http://mp.weixin.qq.com/s?__biz=MzA3ODIyNjMzNA==&mid=210838858&idx=1&sn=e850063b81844cac4ff96177354a9535&scene=1&srcid=1110LMZHGjtVUAIzMhUYGvKG#rd ) 根據上述原理初步編了一個尋找變點的程序(好幾周之前了=_=,之前把所有的變點都成功得到過,只不過忘了加對于價格的判斷),但是不會把它變成策略。不知道為什么,原來可以成功print出變點的程序現在運行不完,一直處于運行中。原來不加價格的判斷運行一會兒interrupt后有部分結果,,加了價格判斷一直只有一個結果。。。看到社區有關于變點策略的討論,就把自己之前寫的Po出來(關于元素的引用我自己繞了好久+1.-1...),希望社區的老師們批評指正~ ```py import numpy as np import pandas as pd import scipy.stats as stats from pandas import Series, DataFrame data1=DataAPI.MktEqudGet(ticker="600837",beginDate='20140101',endDate='20151120',field='ticker,secShortName,tradeDate,openPrice',pandas="1") price = data1['openPrice'].values #取出價格 lnp = np.log(price) #取對數 h = 2 #設定參數h R = [] #建立一個空列表用于存放對數收益率 i = 1 while i < len(lnp): r = lnp[i]-lnp[i-1] i = i+1 R.append(r) #得到對數收益率序列 start = 1 t = 1 while start+t <= len(R)-1: d = R[(start-1):(start-1+t+1)] mu,sigma = stats.norm.fit(d) #用前面的數據進行正態分布擬合 OR = (R[start-1:start-1+t+1+1]-mu)/sigma #對該數據段進行標準化 k = OR[-1]/2 #允偏量設定為歸一化后序列的最后一個數值的一半 j = 1 s = 0 while j < t+2: #(start-1+t+1+1)-(start-1)=t+2 s = s + OR[j-1]-k #計算CUSUM j = j+1 if s>0: #判斷正負 c1 = max(s,0) if price[start+t] > price[start+t-1] and c1 > h: #判斷是否價格上升并沖破閾值,大于h則買入 print 'c1 = ',c1,start+t #start+t即為第(start+t)個變點 start = start+1 elif c1 < h: t = t+1 #繼續向后迭代直至出現變點為止 elif s<0: c2 = min(s,0) if price[start+t] < price[start+t-1] and c2 < -h: #判斷是否價格下降并沖破閾值,小于-h則賣出 print 'c2 = ',c2,start+t start = start+1 elif c2 > -h: t = t+1 c2 = -2.66368724271 3 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看