股票

確定數據趨勢(方向檢測或轉折點檢測)

  • July 28, 2017

我正在研究一個模型來確定趨勢(方向檢測或轉折點檢測)。假設我們有一個股票趨勢,如下圖所示。藍線是股票收盤價的真實趨勢,紅線是趨勢線的假想近似。

在此處輸入圖像描述

我實現了不同的模型,例如Piecewise Linear Representation (PLR)Wavelet找到紅線,但到目前為止我還沒有得到精確的結果。你對這個問題有什麼建議?

您附上的圖表表明您試圖找到主要高點和低點之間的波動。這可以通過簡單地在價格序列中找到局部極值來完成。這個概念是:

  1. 找到局部極值:低價中的最小值,高價中的最大值;
  2. 如果波動太短,請在結果中找到局部極值;
  3. 重複#2,直到對結果滿意為止。

這是使用 Pandas 數據框和 Numpy 的 argrel* 函式在系列中定位相對極值的 Python 程式碼:

import pandas as pd
import numpy as np
from scipy.signal import argrelmin, argrelmax

N = 3 # number of iterations
df = pd.read_csv('prices.csv') # load your stock prices in OHLC format
h = df['High'].dropna().copy() # make a series of Highs
l = df['Low'].dropna().copy()  # make a series of Lows
for i in range(N):
       h = h.iloc[argrelmax(h.values)[0]] # locate maxima in Highs
       l = l.iloc[argrelmin(l.values)[0]] # locate minima in Lows
       h = h[~h.index.isin(l.index)] # drop index that appear in both
       l = l[~l.index.isin(h.index)] # drop index that appear in both

然後由您決定如何處理結果系列,即。您可以使用索引將您的價格數據分割成擺動段,或者從 h 和 l 值創建一個新系列,如果您只需要數字,則在兩者之間進行插值。

這是此程式碼如何在某些未公開股票的價格日期上工作的範例。OHLC 燭台以藍色繪製,擺動系列以綠色繪製。頂部子圖上的擺動系列在 1 次迭代後產生,底部子圖上的擺動系列在 5 次迭代後產生:

在此處輸入圖像描述

第一次迭代的結果非常接近燭台,但第五次迭代似乎捕捉到了更大的波動。準確性當然值得商榷,但在我看來,這種方法可以作為趨勢分析的一個很好的起點。有很多方法可以改進它,即:

  • 為輸入的高/低價系列添加平滑;
  • 確保結果從最小值到最大值再到最小值交替出現,因此該系列中沒有最小值或最大值群,就像在上面範例的底部圖表中出現兩次一樣;
  • 找到自動調整迭代次數以達到所需結果的方法,等等……

你沒有說你要對結果做什麼,所以有兩個答案。

首先,如果你不關心未來,唯一關心的是精確匹配發生的數據,那麼你總是可以通過構造一個次數等於數據點數量的多項式來擬合任何曲線。它會完美契合。除了對先前點的描述之外,它沒有任何用處,但它看起來恰到好處。這將是過度擬合的情況。在https://stats.stackexchange.com/questions/128616/whats-a-real-world-example-of-overfitting有一個很好的總統選舉過度擬合的例子。

出於任何預測目的,您的模型顯然過度擬合了數據,但如果您從歷史上看,它非常接近確切的解決方案。您可以說它過度擬合的原因是它正在擷取小波。已知小波是純隨機的並且沒有信號。關於這方面的原始文章可以在以下位置找到:

斯魯茨基,歐根。隨機原因的總和作為循環過程的來源。計量經濟學。5(2)。1937 年 4 月。第 105-146 頁

如果您試圖預測結果並打算使用它,那麼您需要採用 Bruno de Finetti 的連貫性原則來實現您的基礎數學。這將限制您使用貝氏統計。非貝氏方法永遠不會連貫。

要理解為什麼有一個簡單的 250 年曆史的例子來自牧師 Thomas Bayes 本人。在這個例子中,貝氏牧師想像了一個台球桌,一個球被彈跳到一個隨機點。球將桌子隨機分成區域 A 和區域 B。球滾入一個區域的機率等於該區域的面積除以總面積的比例。

球在其位置被記錄後被移除。然後兩名台球運動員投球。如果球落在他們的區域,他們就贏了,如果沒有,他們就輸了。問題是沒有人告訴他們他們所在的地區在哪裡,或者他們是否得到了分數,直到結束之後。他們不知道在哪裡射擊。先到六分者為勝。

需要解決的問題是球員 B 獲勝的機率,因為已經進行了 8 次射門,比分是 5-3,A 獲勝。A 需要 1 分才能獲勝,B 需要 3 分。

頻率論者的答案是 $ (3/8)^3. $ 這對應於大約 18:1 的賭博賠率。因此,如果您要使用頻率方法,那麼如果您是博彩玩家,您應該提供 B 獲勝的 18:1 賠率。

貝氏的答案非常不同。貝氏解決方案提出了兩個不同的問題。第一個問題是在我們看到球出手之前,我們對獲勝機率的了解是多少。其次,可以觸發所看到的確切結果的一組機率是多少?這些機率中的每一個都是一個真實機率的機率是多少?

首先,貝氏方法的使用者將創建一個參數 $ \theta $ 並分配機率 $ \theta=k,\forall{k}\in[0,1] $ . 由於所有可能的值都是等機率的,因此關於信念的先驗分佈 $ \theta $ 應該是這樣 $ \Pr(\theta=k)\propto{1},\forall\theta\in{[0,1]} $ . 有一個二項概似,所以它的機率是 $ \theta^3(1-\theta)^5 $ .

後驗密度函式為 $ 504\theta^3(1-\theta)^5 $ . 這是可能觸發 5-3 位置的所有可能參數的摘要,以及這是真實參數的機率。然而,我們需要一個預測。為此,我們對整個密度進行預測,即預測三分之三的獲勝機率。解決這個問題的方法是

$$ 504\int_0^1\theta^3\theta^3(1-\theta)^5\mathrm{d}\theta. $$ 答案是 $ \frac{1}{11} $ . 貝氏解決方案將創造 10:1 的賠率。貝氏將是正確的,並且總是會創建正確的解決方案。貝氏解是 $ E(p^3) $ , 而頻率論者是 $ [E(p)]^3 $ . 這適用於任何貝氏與頻率論的過程,包括回歸。

您將使用貝氏模型選擇。您將創建一個模型,該模型表示只有一組參數,例如

$$ \frac{x_{t+1}-\beta{x_t}-\alpha-\varepsilon_{t+1}}{\sigma}. $$ 然後你會假設有一個休息,你會聯合建模兩個系列,一個接一個。你會再做三、四、五次等等,直到你覺得你不想繼續了。 隨著您增加可能的中斷次數,貝氏定理將開始懲罰您添加的結構。同時,由於它更適合,貝氏定理將獎勵您改進的擬合優度。懲罰小而獎勵高的模型最終將成為最適合的模型。如果您想進行預測,那麼您將使用貝氏後驗預測分佈來電腦率。

因為沒有為此預先建構的工具,所以您必須自己建構。如果您尚未使用貝氏方法,請從 William Bolstad 的貝氏統計簡介,第 3 版開始。肯定會獲得第三版,因為它是一個巨大的改進。

引用自:https://quant.stackexchange.com/questions/33948