最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

量化交易軟件策略:使用指數(shù)平滑法進(jìn)行時間序列預(yù)測(續(xù))

2023-07-31 15:14 作者:bili_45793681098  | 我要投稿

簡介

《使用指數(shù)平滑法進(jìn)行時間序列預(yù)測》 [1] 一文對指數(shù)平滑模型進(jìn)行了簡要總結(jié),舉例闡明了一種用于優(yōu)化模型參數(shù)的可能方案,并最終提出了基于呈線性衰減的增長模型開發(fā)的預(yù)測指標(biāo)。本文體現(xiàn)了在一定程度上提升該預(yù)測指標(biāo)準(zhǔn)確性的一次嘗試。

預(yù)測貨幣報價甚至提前三四步進(jìn)行極為可靠的預(yù)測,實(shí)施起來都比較復(fù)雜。然而,在本系列的前一篇文章中,赫茲量化 會提前 12 步進(jìn)行預(yù)測,并清楚認(rèn)識到無法在如此長的范圍內(nèi)獲得滿意結(jié)果。因此,置信區(qū)間最窄的前幾步預(yù)測應(yīng)給予最大關(guān)注。

提前 10 到 12 步進(jìn)行預(yù)測主要是為了說明不同模型與預(yù)測方法的行為特征。在任何情況下,針對任何范圍獲得的預(yù)測準(zhǔn)確度都可以利用置信區(qū)間限制進(jìn)行評估。本文的首要目的就是說明一些有助于升級文章 [1] 中所述指標(biāo)的方法。

由于前文已經(jīng)介紹了查找若干變量函數(shù)最小值(該值用于生成指標(biāo)之用)的相應(yīng)算法,這里就不再贅述。為了簡便起見,我們盡量減少理論方面的內(nèi)容。

1. 初始指標(biāo)

IndicatorES.mq5 指標(biāo)(參見文章 [1])會被用作一個起始點(diǎn)。

為了編譯指標(biāo),赫茲量化需要用到同一目錄下的 IndicatorES.mq5、CIndicatorES.mqh 和 PowellsMethod.mqh。這些文件都可以在本文末尾的 files2.zip 檔案中找到。

赫茲量化來刷新定義了該指標(biāo)制定過程中所用指數(shù)平滑模型的方程,即呈線性衰減的增長模型。







其中:


- 序列級別的平滑參數(shù),[0,1];


- 趨勢的平滑參數(shù),[0,1];


– 衰減參數(shù),[0,1];


– 觀測到

后,于時間 t 處計算得出的平滑序列級別;


– 于時間 t 處計算得出的平滑加法趨勢;


– 時間 t 處的序列值;


– 所做預(yù)測的提前步數(shù);


– 于時間 t 處所做的提前 m 步預(yù)測;


– 于時間 t 處所做的提前一步預(yù)測誤差,

。

該指標(biāo)唯一的輸入?yún)?shù)就是用于確定區(qū)間長度的值,將根據(jù)該值來優(yōu)化模型參數(shù)以及選擇初始值(研究區(qū)間)。確定某給定區(qū)間模型參數(shù)的最優(yōu)值及所需的計算后,就會生成預(yù)測、置信區(qū)間以及與提前一步預(yù)測相對應(yīng)的線條。每個新柱處的參數(shù)都會被優(yōu)化,并會做出相應(yīng)預(yù)測。

由于要更新所述指標(biāo),所以我們會利用本文末尾處 Files2.zip 檔案中的測試序列來評估變化結(jié)果。檔案目錄 \Dataset2 中的文件包含已保存的 EURUSD、USDCHF、USDJPY 報價及美元指數(shù) DXY。其中每一個都針對 M1、H1 與 D1 三種時間框架予以提供。在文件中保存 "open" 值時,應(yīng)讓最新值位于文件末尾。每個文件都包含 1200 個元素。

預(yù)測誤差將通過計算“平均絕對百分比誤差” (MAPE) 系數(shù)進(jìn)行評估



赫茲量化將 12 個測試序列中的每個序列都劃分為 50 個重疊區(qū)間,每個區(qū)間都包含 80 個元素,并計算其中每個元素的 MAPE 值。通過這種方式獲取的評估平均值,將會被用作與對比指標(biāo)相關(guān)的一個預(yù)測誤差指數(shù)。提前兩步和三步預(yù)測誤差的 MAPE 值,也以同樣的方式進(jìn)行計算。此類平均估算值還會進(jìn)一步表示如下:

  • MAPE1 – 提前一步預(yù)測誤差的平均估算值;

  • MAPE2 – 提前兩步預(yù)測誤差的平均估算值;

  • MAPE3 – 提前三步預(yù)測誤差的平均估算值;

  • MAPE1-3 – 平均值 (MAPE1+MAPE2+MAPE3)/3。

計算 MAPE 值時,每一步都會用絕對預(yù)測誤差值除以序列的當(dāng)前值。為在此過程中避免被零除或得到負(fù)值,要求輸入序列僅取非零正值,就像在本例中一樣。

初始指標(biāo)的估算值如表 1 所示。

MAPE1 MAPE2 MAPE3 MAPE1-3 IndicatorES 0.2099 0.2925 0.3564 0.2863

表 1. 初始指標(biāo)預(yù)測誤差估算值

表 1 中所示數(shù)據(jù)是利用 Errors_IndicatorES.mq5 腳本(來自本文末尾的 files2.zip 檔案)獲取的。要編譯并運(yùn)行此腳本,則 CIndicatorES.mqh 和 PowellsMethod.mqh 必須與 Errors_IndicatorES.mq5 同處一個目錄下,且輸入序列位于 Files\Dataset2\ 目錄下。

獲取預(yù)測誤差的初始估算值后,現(xiàn)在就可以繼續(xù)升級研究中的指標(biāo)了。


2. 優(yōu)化準(zhǔn)則

《使用指數(shù)平滑法進(jìn)行時間序列預(yù)測》文中所述的初始指標(biāo)中的模型參數(shù),均通過提前一步對預(yù)測誤差平方和進(jìn)行最小化的方法進(jìn)行確定。針對提前一步預(yù)測進(jìn)行優(yōu)化的模型參數(shù)可能不會產(chǎn)生提前多步預(yù)測的最小誤差,這似乎比較符合邏輯。當(dāng)然,最好能夠?qū)⑻崆?10 到 12 步預(yù)測的誤差降至最低,但要在給定的研究序列范圍內(nèi)獲得滿意的預(yù)測結(jié)果,卻是不可能完成的任務(wù)。

從現(xiàn)實(shí)來看,在優(yōu)化模型參數(shù)時,赫茲量化會使用提前一、二、三步預(yù)測誤差的平方和,將其用于指標(biāo)的第一次升級。誤差的平均數(shù)量可能有望在預(yù)測前三步的范圍內(nèi)實(shí)現(xiàn)某種程度上的降低。

顯而易見,初始指標(biāo)的此類升級并不涉及其主體結(jié)構(gòu)原理,而只是更改參數(shù)優(yōu)化準(zhǔn)則而已。因此,赫茲量化不能指望預(yù)測精確度能提高數(shù)倍,盡管提前兩步和三步預(yù)測誤差的數(shù)量應(yīng)當(dāng)下降一點(diǎn)。

為了對比預(yù)測結(jié)果,赫茲量化創(chuàng)建了 CMod1 類,其類似于前文提到的帶有修改目標(biāo)函數(shù) func 的 CIndicatorES 類。

初始 CIndicatorES 類的 func 函數(shù):

double CIndicatorES::func(const double &p[]) ?{ ?int i; ?double s,t,alp,gam,phi,k1,k2,k3,e,sse,ae,pt; ? ?s=p[0]; t=p[1]; alp=p[2]; gam=p[3]; phi=p[4]; k1=1; k2=1; k3=1; ?if ? ? (alp>0.95){k1+=(alp-0.95)*200; alp=0.95;} ? ? ? // Alpha ?> 0.95 ?else if(alp<0.05){k1+=(0.05-alp)*200; alp=0.05;} ? ? ? // Alpha ?< 0.05 ?if ? ? (gam>0.95){k2+=(gam-0.95)*200; gam=0.95;} ? ? ?// Gamma ?> 0.95 ?else if(gam<0.05){k2+=(0.05-gam)*200; gam=0.05;} ? ? ? // Gamma ?< 0.05 ?if ? ? (phi>1.0 ){k3+=(phi-1.0 )*200; phi=1.0; } ? ? ?// Phi ? ?> 1.0 ?else if(phi<0.05){k3+=(0.05-phi)*200; phi=0.05;} ? ? ? // Phi ? ?< 0.05 ?sse=0; ?for(i=0;i<Dlen;i++) ? ?{ ? ?e=Dat[i]-(s+phi*t); sse+=e*e; ? ?ae=alp*e; pt=phi*t; s=s+pt+ae; t=pt+gam*ae; ? ?} ?return(Dlen*MathLog(k1*k2*k3*sse)); ?}

經(jīng)過一些修改之后,func 函數(shù)的現(xiàn)狀如下:

double CMod1::func(const double &p[]) ?{ ?int i; ?double s,t,alp,gam,phi,k1,k2,k3,e,err,ae,pt,phi2,phi3,a; ? ?s=p[0]; t=p[1]; alp=p[2]; gam=p[3]; phi=p[4]; k1=1; k2=1; k3=1; ?if ? ? (alp>0.95){k1+=(alp-0.95)*200; alp=0.95; ? ? ? ?// Alpha ? > 0.95 ?else if(alp<0.05){k1+=(0.05-alp)*200; alp=0.05;} ? ? ? // Alpha ? < 0.05 ?if ? ? (gam>0.95){k2+=(gam-0.95)*200; gam=0.95;} ? ? ?// Gamma ? > 0.95 ?else if(gam<0.05){k2+=(0.05-gam)*200; gam=0.05;} ? ? ? // Gamma ? < 0.05 ?if ? ? (phi>1.0 ){k3+=(phi-1.0 )*200; phi=1.0; } ? ? ?// Phi ? ? > 1.0 ?else if(phi<0.05){k3+=(0.05-phi)*200; phi=0.05;} ? ? ? // Phi ? ? < 0.05 ?phi2=phi+phi*phi; phi3=phi2+phi*phi*phi; ?err=0; ?for(i=0;i<Dlen-2;i++) ? ?{ ? ?e=Dat[i]-(s+phi*t); err+=e*e; ? ?a=Dat[i+1]-(s+phi2*t); err+=a*a; ? ?a=Dat[i+2]-(s+phi3*t); err+=a*a; ? ?ae=alp*e; pt=phi*t; s=s+pt+ae; t=pt+gam*ae; ? ?} ?e=Dat[Dlen-2]-(s+phi*t); err+=e*e; ?a=Dat[Dlen-1]-(s+phi2*t); err+=a*a; ?ae=alp*e; pt=phi*t; s=s+pt+ae; t=pt+gam*ae; ?a=Dat[Dlen-1]-(s+phi*t); err+=a*a; ?return(k1*k2*k3*err); ?}

現(xiàn)在,計算該對象函數(shù)時就會用到提前一、二、三步預(yù)測誤差的平方和。

而且,基于此類開發(fā)的 Errors_Mod1.mq5 腳本允許估算預(yù)測誤差,這類似于曾經(jīng)提到過的 Errors_IndicatorES.mq5 腳本功能。CMod1.mqh 與 Errors_Mod1.mq5 均位于本文末尾的 files2.zip 檔案中。

表 2 顯示了初始及升級版的預(yù)測誤差估算值。

MAPE1 MAPE2 MAPE3 MAPE1-3 IndicatorES 0.2099 0.2925 0.3564 0.2863 Mod1 0.2144 0.2898 0.3486 0.2842

表 2. 預(yù)測誤差估算值的對比

可以看出,誤差系數(shù) MAPE2 和 MAPE3 以及平均值 MAPE1-3 確實(shí)要比研究中的序列略低一些。所以,我們保存了這一版本,并繼續(xù)進(jìn)一步修改我們的指標(biāo)。


3. 平滑過程中的參數(shù)調(diào)整

根據(jù)輸入序列的當(dāng)前值更改平滑參數(shù),這一想法并不新穎,也并非原創(chuàng),其目的是希望能調(diào)整平滑系數(shù),以便其在給定的輸入序列性質(zhì)發(fā)生變化時仍保持最佳狀態(tài)。調(diào)整平滑系數(shù)的一些方式會在參考文獻(xiàn) [2]、[3] 中進(jìn)行說明。

為了進(jìn)一步升級該指標(biāo),赫茲量化會使用平滑系數(shù)呈動態(tài)變化的模型,希望使用自適應(yīng)指數(shù)平滑模型來實(shí)現(xiàn)指標(biāo)預(yù)測精確度的提升。

遺憾的是,如果在預(yù)測算法中使用該模型,則大多數(shù)自適應(yīng)方法都無法始終獲得理想結(jié)果。選取適當(dāng)?shù)淖赃m應(yīng)方法可能過于繁瑣且耗時,因此在本例中我們會利用參考文獻(xiàn) [4] 中提供的研究結(jié)果,并采用文章 [5] 中講到的“平滑轉(zhuǎn)換的指數(shù)平滑” (STES)。

由于指定文章中已明確說明該方法的實(shí)質(zhì)內(nèi)容,所以我們暫時無需理會,而只需直接轉(zhuǎn)到模型的方程(請參閱指定文章的開頭),同時考慮到自適應(yīng)平滑系數(shù)的使用即可。








現(xiàn)在可以看出,平滑系數(shù) alpha 的值會在算法中的每一步計算得出,具體取決于平方預(yù)測誤差。b 與 g 系數(shù)的值會確定預(yù)測誤差對 alpha 值所造成的影響。而在所有其他方面,所用模型的方程仍保留未變。與 STES 法使用相關(guān)的更多詳情請參見文章 [6]。

在之前的版本中,赫茲量化必須確定整個給定序列 alpha 系數(shù)的最優(yōu)值,而現(xiàn)在則有 b 和 g 兩個自適應(yīng)系數(shù)可待優(yōu)化,且 alpha 值會在平滑輸入序列的過程中被動態(tài)確定。

該升級以 CMod2 類的形式進(jìn)行。重大變化(像上次一樣)主要與 func 函數(shù)相關(guān),其現(xiàn)狀如下所示。

double CMod2::func(const double &p[]) ?{ ?int i; ?double s,t,alp,gam,phi,sb,sg,k1,k2,e,err,ae,pt,phi2,phi3,a; ? ?s=p[0]; t=p[1]; gam=p[2]; phi=p[3]; sb=p[4]; sg=p[5]; k1=1; k2=1; ?if ? ? (gam>0.95){k1+=(gam-0.95)*200; gam=0.95;} ? ? ? ?// Gamma ? > 0.95 ?else if(gam<0.05){k1+=(0.05-gam)*200; gam=0.05;} ? ? ? ?// Gamma ? < 0.05 ?if ? ? (phi>1.0 ){k2+=(phi-1.0 )*200; phi=1.0; } ? ? ? // Phi ? ? > 1.0 ?else if(phi<0.05){k2+=(0.05-phi)*200; phi=0.05;} ? ? ? ?// Phi ? ? < 0.05 ?phi2=phi+phi*phi; phi3=phi2+phi*phi*phi; ?err=0; ?for(i=0;i<Dlen-2;i++) ? ?{ ? ?e=Dat[i]-(s+phi*t); err+=e*e; ? ?a=Dat[i+1]-(s+phi2*t); err+=a*a; ? ?a=Dat[i+2]-(s+phi3*t); err+=a*a; ? ?alp=0.05+0.9/(1+MathExp(sb+sg*e*e)); ? ? ? ? ? ? ? ? ?// 0.05 < Alpha < 0.95 ? ?ae=alp*e; pt=phi*t; s=s+pt+ae; t=pt+gam*ae; ? ?} ?e=Dat[Dlen-2]-(s+phi*t); err+=e*e; ?a=Dat[Dlen-1]-(s+phi2*t); err+=a*a; ?alp=0.05+0.9/(1+MathExp(sb+sg*e*e)); ? ? ? ? ? ? ? ? ? ?// 0.05 < Alpha < 0.95 ?ae=alp*e; pt=phi*t; s=s+pt+ae; t=pt+gam*ae; ?a=Dat[Dlen-1]-(s+phi*t); err+=a*a; ?return(k1*k2*err); ?}

開發(fā)此函數(shù)時,定義 alpha 系數(shù)值的方程也會稍做修改。這樣做是為了分別在 0.05 與 0.95 處對最大與最小允許值進(jìn)行限制。

為了像之前一樣評估預(yù)測錯誤,要基于 CMod2 類來編寫 Errors_Mod2.mq5 腳本。CMod2.mqh 與 Errors_Mod2.mq5 均位于本文末尾的 files2.zip 檔案中。

腳本結(jié)果如表 3 所示。

MAPE1 MAPE2 MAPE3 MAPE1-3 IndicatorES 0.2099 0.2925 0.3564 0.2863 Mod1 0.2144 0.2898 0.3486 0.2842 Mod2 0.2145 0.2832 0.3413 0.2797

表 3. 預(yù)測誤差估算值的對比

如表 3 所示,使用自適應(yīng)平滑系數(shù)后一般都允許進(jìn)一步略微減少測試序列的預(yù)測誤差。因此,在兩次升級之后,我們便設(shè)法將誤差系數(shù) MAPE1-3 降低了約兩個百分點(diǎn)。

盡管升級結(jié)果不太明顯,但我們?nèi)詧?jiān)持將其作為最終版本,并將進(jìn)一步的升級留到本文之外再行討論。在下一步中嘗試使用博克斯-卡克斯轉(zhuǎn)換會很不錯。該轉(zhuǎn)換方法主要用于讓初始序列分布接近正態(tài)分布。

在本例中可以使用該轉(zhuǎn)換方法來轉(zhuǎn)換初始序列、計算預(yù)測并反向轉(zhuǎn)換預(yù)測。這種方法用到了轉(zhuǎn)換系數(shù),其選擇應(yīng)以結(jié)果預(yù)測誤差最小為原則。在預(yù)測序列中使用博克斯-卡克斯轉(zhuǎn)換的示例請參見文章 [7]。


4. 預(yù)測置信區(qū)間

初始 IndicatorES.mq5 指標(biāo)(前文提到過)中的預(yù)測置信區(qū)間,是根據(jù)選定指數(shù)平滑模型 [8] 的解析式計算得出的。本例所做的變更已導(dǎo)致研究中模型發(fā)生了變化。由于存在變量平滑系數(shù),便不適合再使用上述分析表達(dá)式來估算置信區(qū)間了。

之前使用的分析表達(dá)式均基于預(yù)測誤差為對稱正態(tài)分布這一假設(shè)推算得出,而這是更改置信區(qū)間評估法的又一原因。由于我們的序列類未能滿足這些要求,所以預(yù)測誤差分布可能并非正態(tài)或?qū)ΨQ的。

估算初始指標(biāo)中的置信區(qū)間時,提前一步預(yù)測誤差方差應(yīng)從輸入序列的開頭開始計算,接下來再利用解析式并根據(jù)獲得的提前一步預(yù)測誤差方差值來計算提前兩步、三步及更多步預(yù)測的方差。

為避免使用解析式,還可采用一種簡單方法,即直接通過輸入序列和提前一步預(yù)測方差來計算提前兩步、三步及更多步預(yù)測的方差。但該方法存在一個明顯缺陷:在短輸入序列中,置信區(qū)間估算值會相當(dāng)分散,而且在計算方差和均方誤差時還不允許解除對于預(yù)期誤差正態(tài)性的限制。

在使用非參數(shù)自助法(重新采樣) [9] 的過程中可以發(fā)現(xiàn)針對這種情況的解決方案。這一想法的核心內(nèi)容非常簡單:如果以隨機(jī)方式(均勻分布)替換通過初始序列進(jìn)行采樣的做法,則如此生成的偽序列的分布情況會與初始序列的分布情況相同。

假設(shè)我們有一個 N 成員的輸入序列;通過在 [0,N-1] 的范圍內(nèi)生成一個均勻分布的偽隨機(jī)序列,并在由初始數(shù)組采樣時將這些值作為索引,就可以生成一個明顯長于初始序列的偽序列。也就是說,生成序列的分布情況會與初始序列的分布情況相同(幾乎相同)。

估算置信區(qū)間的自助法流程如下所示:

  1. 通過指數(shù)平滑模型中的輸入序列來確定該模型的參數(shù)、系數(shù)和自適應(yīng)系數(shù)的最優(yōu)初始值,而該模型是在修改后得出的。最優(yōu)參數(shù)還是像以前一樣,通過采用使用鮑威爾搜索法的算法進(jìn)行確定;

  2. 利用確定的最優(yōu)模型參數(shù)從頭到尾過一遍初始序列,并創(chuàng)建一個由提前一步預(yù)測誤差組成的數(shù)組。數(shù)組元素的數(shù)量將等于輸入序列長度 N;

  3. 從誤差數(shù)組的每個元素中減去其中的平均值以調(diào)整誤差;

  4. 利用偽隨機(jī)序列生成器生成 [0,N-1] 范圍內(nèi)的索引,并用它們構(gòu)建一個 9999 個元素長度(重新采樣后)的偽誤差序列;

  5. 將來自人工生成誤差數(shù)組的值插入到定義當(dāng)前使用模型的方程中,從而創(chuàng)建一個包含 9999 個偽輸入序列值的數(shù)組。換言之,之前我們必須將輸入序列值插入到模型方程中,并據(jù)此計算預(yù)測誤差,但現(xiàn)在卻在進(jìn)行逆運(yùn)算。對于數(shù)組中的每個元素而言,都要插入其誤差值才能計算出輸入值。結(jié)果我們得到一個 9999 個元素的數(shù)組,其包含序列的分布情況與輸入序列的分布情況相同,而通過其長度足以直接估算預(yù)測置信區(qū)間。

接下來再利用所生成的足夠長度的序列來估算置信區(qū)間。為此,我們會利用以下情況:如果生成的預(yù)測誤差數(shù)組按升序排列,則索引為 249 與 9749 的單元格中的值就會對應(yīng) 95% 置信區(qū)間 [10] 的限制值,這些單元格位于包含 9999 個值的數(shù)組中。

要對預(yù)測區(qū)間進(jìn)行更為精確的估算,則數(shù)組長度應(yīng)為奇數(shù)。在本例中,預(yù)測置信區(qū)間的限制值通過以下方式進(jìn)行估算:

  1. 利用前文確定的最優(yōu)模型參數(shù)從頭到尾過一遍所生成的序列,并創(chuàng)建一個由 9999 個提前一步預(yù)測誤差組成的數(shù)組。

  2. 對所創(chuàng)建的數(shù)組進(jìn)行排序;

  3. 從排序的誤差數(shù)組中選擇索引為 249 和 9749 (代表 95% 置信區(qū)間的限制值)的值;

  4. 針對提前兩步、三步及更多步預(yù)測誤差重復(fù)步驟 1、步驟 2 和步驟 3。

使用這種方法來估算置信區(qū)間有利也有弊。


量化交易軟件策略:使用指數(shù)平滑法進(jìn)行時間序列預(yù)測(續(xù))的評論 (共 條)

分享到微博請遵守國家法律
清水县| 全椒县| 德江县| 江油市| 杂多县| 元谋县| 尉氏县| 崇阳县| 息烽县| 朝阳县| 葫芦岛市| 高雄县| 潞西市| 晋江市| 西吉县| 彭州市| 枣庄市| 桂平市| 连江县| 桃园县| 天门市| 阳高县| 广南县| 林州市| 红桥区| 中牟县| 乌鲁木齐市| 彭泽县| 泰和县| 平邑县| 秦安县| 汶上县| 保山市| 昔阳县| 海丰县| 基隆市| 嫩江县| 芜湖县| 鄂伦春自治旗| 开阳县| 五原县|