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

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

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

2023-07-27 16:05 作者:大牛啊呢  | 我要投稿

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

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


該指標(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ù)的使用即可。


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

分享到微博請遵守國家法律
岢岚县| 淮阳县| 巨鹿县| 平乡县| 富宁县| 广宗县| 乌审旗| 兖州市| 东丽区| 麦盖提县| 阿瓦提县| 安顺市| 弥勒县| 南开区| 营山县| 澄江县| 西畴县| 石景山区| 黑河市| 木兰县| 长兴县| 本溪市| 思南县| 西乡县| 太白县| 南部县| 巧家县| 博罗县| 高唐县| 孙吴县| 阜平县| 宜阳县| 金山区| 西吉县| 宁波市| 邯郸市| 尤溪县| 应用必备| 温州市| 札达县| 惠安县|