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

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

量化交易軟件:統(tǒng)計估計

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

簡介

如今,您經(jīng)常能看到與計量經(jīng)濟(jì)學(xué)、價格序列預(yù)測、選擇和估計模型的適當(dāng)性等主題相關(guān)的文章和出版物。但在大多數(shù)情形下,推理基于以下假設(shè),即讀者精通數(shù)學(xué)統(tǒng)計方法且能夠輕松估計所分析序列的統(tǒng)計參數(shù)。

對某個序列的統(tǒng)計參數(shù)進(jìn)行估計非常重要,因?yàn)榇蠖鄶?shù)數(shù)學(xué)模型和方法均基于不同的假設(shè)。例如,正態(tài)分布規(guī)律或離差值(或其他參數(shù))就是這樣。因此,在分析和預(yù)測時間序列時,赫茲量化需要一個簡單方便的工具,用于快速清晰地估計主要統(tǒng)計參數(shù)。在本文中,赫茲量化將嘗試創(chuàng)建一個這樣的工具。

本文簡要說明了一個隨機(jī)序列的最簡單統(tǒng)計參數(shù),以及其可視分析的幾種方法。本文還說明了如何在 MQL5 中實(shí)現(xiàn)這些方法,以及使用 Gnuplot 應(yīng)用程序?qū)τ嬎憬Y(jié)果進(jìn)行可視化的方法。本文無意作為手冊或參考資料使用,所以可能會包含某些普遍接受的術(shù)語和定義。

編輯切換為居中

樣本參數(shù)分析

假定在時間中存在一個無限存在的靜止過程,該過程可被表示為一個離散樣本序列。讓赫茲量化將這個樣本序列稱為總體。從總體中選出的一部分樣本被稱為從總體得出的采樣或?qū)?N 個樣本進(jìn)行的采樣。此外,假設(shè)我們不知道任何參數(shù)真實(shí)值,因此我們將依據(jù)有限采樣的方法進(jìn)行估計。


避免異常值

在開始參數(shù)的統(tǒng)計估計之前,我們應(yīng)注意,如果采樣包含過大誤差(異常值),則估計的精度可能不夠。如果采樣量太少,則異常值會對估計精度產(chǎn)生較大影響。異常值指異常偏離分布中心的值。此類偏離可能是由于在采集統(tǒng)計數(shù)據(jù)和形成序列時出現(xiàn)的不同罕見事件和錯誤而造成的。

很難決定是否要篩選出異常值,因?yàn)樵诖蠖鄶?shù)情形下無法明確確定某個值是異常值還是屬于所分析的過程。因此,如果檢測到異常值并決定篩選出它們,就會出現(xiàn)一個問題 - 我們該如何處理這些誤差值?最符合邏輯的做法就是將它們從采樣中排除,這樣可以提升統(tǒng)計特征的估計精度;但是在處理時間序列時,您應(yīng)謹(jǐn)慎地從采樣中排除異常值。

為了能夠從采樣中排除異常值,或至少檢測到這些值,讓我們來實(shí)現(xiàn) S.V. Bulashev 所著《 Statistics for Traders》(面向交易者的統(tǒng)計)一書中所介紹的算法吧。

根據(jù)該算法,赫茲量化需要計算分布中心的五個估計值:

  1. 中值;

  2. 50% 四分位中心間距(中四分位距,MQR);

  3. 整個采樣的算術(shù)平均值;

  4. 50% 四分位距的算術(shù)平均值(四分位距平均值,IQM);

  5. 間距的中心(中列數(shù))- 確定為采樣中最大值和最小值的平均值。

接下來按升序排列分布中心的估計結(jié)果;然后選擇平均值(即序列中的第三個值)作為分布中心 Xcen。因此,所選擇的估計值似乎受異常值的影響最小。

此外,使用得出的分布中心估計值 Xcen并根據(jù)以下經(jīng)驗(yàn)公式可計算出標(biāo)準(zhǔn)方差 s、超量系數(shù) K 和刪減系數(shù)的值:


編輯

其中 N 是采樣中樣本的數(shù)量(采樣量)。

接下來超出以下范圍:

編輯


的值將被視為異常值,因此應(yīng)從采樣中排除。

在《Statistics for Traders》(面向交易者的統(tǒng)計)一書中詳細(xì)介紹了這種方法,因此讓我們直接開始算法的實(shí)現(xiàn)。允許檢測和排除異常值的算法是在 erremove() 函數(shù)中實(shí)現(xiàn)的。

您可以在以下部分找到為測試此函數(shù)而編寫的腳本。

//---------------------------------------------------------------------------- // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?erremove.mq5 // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Copyright 2011, MetaQuotes Software Corp. // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? https://www.mql5.com //---------------------------------------------------------------------------- #property copyright "Copyright 2011, MetaQuotes Software Corp." #property link ? ? ?"https://www.mql5.com" #property version ? "1.00" #import "shell32.dll" bool ShellExecuteW(int hwnd,string lpOperation,string lpFile, ? ? ? ? ? ? ? ? ?string lpParameters,string lpDirectory,int nShowCmd); #import //---------------------------------------------------------------------------- // Script program start function //---------------------------------------------------------------------------- void OnStart() ?{ ?int i; ?double dat[100]; ?double y[]; ? ?srand(1); ?for(i=0;i<ArraySize(dat);i++)dat[i]=rand()/16000.0; ? ?dat[25]=3; ? ? ? ? ? // Make Error !!! ? ?erremove(dat,y,1); ? ?} //---------------------------------------------------------------------------- int erremove(const double &x[],double &y[],int visual=1) ?{ ?int i,m,n; ?double a[],b[5]; ?double dcen,kurt,sum2,sum4,gs,v,max,min; ? ?if(!ArrayIsDynamic(y)) ? ? ? ? ? ? ? ? ? ? ? ? ? // Error ? ?{ ? ?Print("Function erremove() error!"); ? ?return(-1); ? ?} ?n=ArraySize(x); ?if(n<4) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Error ? ?{ ? ?Print("Function erremove() error!"); ? ?return(-1); ? ?} ?ArrayResize(a,n); ?ArrayCopy(a,x); ?ArraySort(a); ?b[0]=(a[0]+a[n-1])/2.0; ? ? ? ? ? ? ? ? ? ? ? ? ?// Midrange ?m=(n-1)/2; ?b[1]=a[m]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Median ?if((n&0x01)==0)b[1]=(b[1]+a[m+1])/2.0; ?m=n/4; ?b[2]=(a[m]+a[n-m-1])/2.0; ? ? ? ? ? ? ? ? ? ? ? ?// Midquartile range ?b[3]=0; ?for(i=m;i<n-m;i++)b[3]+=a[i]; ? ? ? ? ? ? ? ? ? ?// Interquartile mean(IQM) ?b[3]=b[3]/(n-2*m); ?b[4]=0; ?for(i=0;i<n;i++)b[4]+=a[i]; ? ? ? ? ? ? ? ? ? ? ?// Mean ?b[4]=b[4]/n; ?ArraySort(b); ?dcen=b[2]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Distribution center ?sum2=0; sum4=0; ? ?for(i=0;i<n;i++) ? ?{ ? ?a[i]=a[i]-dcen; ? ?v=a[i]*a[i]; ? ?sum2+=v; ? ?sum4+=v*v; ? ?} ?if(sum2<1.e-150)kurt=1.0; ?kurt=((n*n-2*n+3)*sum4/sum2/sum2-(6.0*n-9.0)/n)*(n-1.0)/(n-2.0)/(n-3.0); // Kurtosis ?if(kurt<1.0)kurt=1.0; ?gs=(1.55+0.8*MathLog10((double)n/10.0)*MathSqrt(kurt-1))*MathSqrt(sum2/(n-1)); ?max=dcen+gs; ?min=dcen-gs; ?m=0; ?for(i=0;i<n;i++)if(x[i]<=max&&x[i]>=min)a[m++]=x[i]; ?ArrayResize(y,m); ?ArrayCopy(y,a,0,0,m); ?if(visual==1)vis(x,dcen,min,max,n-m); ? ?return(n-m); ? ?} //---------------------------------------------------------------------------- void vis(const double &x[],double dcen,double min,double max,int numerr) ?{ ?int i; ?double d,yma,ymi; ?string str; ? ?yma=x[0];ymi=x[0]; ?for(i=0;i<ArraySize(x);i++) ? ?{ ? ?if(yma<x[i])yma=x[i]; ? ?if(ymi>x[i])ymi=x[i]; ? ?} ?if(yma<max)yma=max; ?if(ymi>min)ymi=min; ?d=(yma-ymi)/20.0; ?yma+=d;ymi-=d; ?str="unset key\n"; ?str+="set title 'Sequence and error levels (number of errors = "+ ? ? ? ?(string)numerr+")' font ',10'\n"; ?str+="set yrange ["+(string)ymi+":"+(string)yma+"]\n"; ?str+="set xrange [0:"+(string)ArraySize(x)+"]\n"; ?str+="plot "+(string)dcen+" lt rgb 'green',"; ?str+=(string)min+ " lt rgb 'red',"; ?str+=(string)max+ " lt rgb 'red',"; ?str+="'-' with line lt rgb 'dark-blue'\n"; ?for(i=0;i<ArraySize(x);i++)str+=(string)x[i]+"\n"; ?str+="e\n"; ?if(!saveScript(str)){Print("Create script file error");return;} ?if(!grPlot())Print("ShellExecuteW() error"); ?} //---------------------------------------------------------------------------- bool grPlot() ?{ ?string pnam,param; ? ?pnam="GNUPlot\\binary\\wgnuplot.exe"; ?param="-p MQL5\\Files\\gplot.txt"; ?return(ShellExecuteW(NULL,"open",pnam,param,NULL,1)); ?} //---------------------------------------------------------------------------- bool saveScript(string scr1="",string scr2="") ?{ ?int fhandle; ? ?fhandle=FileOpen("gplot.txt",FILE_WRITE|FILE_TXT|FILE_ANSI); ?if(fhandle==INVALID_HANDLE)return(false); ?FileWriteString(fhandle,"set terminal windows enhanced size 560,420 font 8\n"); ?FileWriteString(fhandle,scr1); ?if(scr2!="")FileWriteString(fhandle,scr2); ?FileClose(fhandle); ?return(true); ?} //----------------------------------------------------------------------------

讓我們詳細(xì)研究下 erremove() 函數(shù)。作為函數(shù)的第一個參數(shù),赫茲量化傳遞數(shù)組 x[] 的地址,并在該數(shù)組中存儲所分析采樣的值;采樣量不得小于四個元素。假定數(shù)組 x[] 的大小等于采樣大小,這也是不傳遞采樣量中 N 值的原因。執(zhí)行函數(shù)并不會導(dǎo)致數(shù)組 x[] 中存儲的數(shù)據(jù)發(fā)生變化。

下一個參數(shù)是數(shù)組 y[] 的地址。如果成功執(zhí)行了該函數(shù),該數(shù)組將包含排除異常值之后的輸入序列。數(shù)組 y[] 的大小比數(shù)組 x[] 的要小,其差值等于從采樣中排除的值的數(shù)量。數(shù)組 y[] 必須被聲明為動態(tài)數(shù)組,否則無法在函數(shù)主體中更改其大小。

最后一個(可選)參數(shù)是負(fù)責(zé)實(shí)現(xiàn)計算結(jié)果可視化的標(biāo)志。如果其值等于 1(默認(rèn)值),則在函數(shù)執(zhí)行完畢前,在一個單獨(dú)窗口中會顯示含有以下信息的圖表:輸入序列、分布中心線和范圍極限,超過該范圍的值將被視為異常值。

以后將會介紹繪制圖表的方法。如果成功執(zhí)行,則函數(shù)會返回從采樣中排除的值的數(shù)量;如果出現(xiàn)錯誤,則返回 -1。如果找不到偏差較大的值(異常值),則函數(shù)將返回 0,并且數(shù)組 y[] 中的序列將與 x[] 中的序列相同。

在函數(shù)的開頭,信息會從數(shù)組 x[] 復(fù)制到數(shù)組 a[],然后按升序排序,接下來再計算分布中心的五個估計值。

區(qū)間的中心(中列數(shù))等于排序后的數(shù)組 a[] 的極值之和再除以 2。

中值的計算分為兩種,對于奇數(shù)采樣量 N,采用以下等式:


對于偶數(shù)采樣量,采用以下等式:


考慮到排序后數(shù)組 a[] 的索引從 0 開始,我們得到:

m=(n-1)/2; median=a[m]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if((n&0x01)==0)b[1]=(median+a[m+1])/2.0;

50% 四分位中心間距(中四分位矩,MQR):


其中 M=N/4(整除)。

對于排序后的數(shù)組 a[],我們得到:

m=n/4; MQR=(a[m]+a[n-m-1])/2.0; ? ? ? ? ? ? ? // Midquartile range

50% 四分位距的算術(shù)平均值(四分位距平均值,IQM)。從采樣的兩個極端值中去除了 25% 的樣本,剩余的 50% 用于計算算術(shù)平均值:


其中 M=N/4(整除)。

m=n/4; IQM=0; for(i=m;i<n-m;i++)IQM+=a[i]; IQM=IQM/(n-2*m); ? ? ? ? ? ? ? ? ? ? ? // Interquartile mean(IQM)

算術(shù)平均值(平均值)通過整個采樣來確定。

每一個確定的值都被寫入 b[] 數(shù)組,然后按升序排列該數(shù)組。數(shù)組中的元素 b[2] 的值被選為分布中心。此外,赫茲量化還將使用該值來計算算術(shù)平均值和多余量系數(shù)的無偏估計值,并將在以后說明算法。

接下來使用得出的估計值來計算異常值的刪減系數(shù)和范圍限制(表達(dá)式如上所示)。最后,數(shù)組 y[] 中會生成排除了異常值的序列,并會調(diào)用 vis() 函數(shù)來繪制圖形。讓我們簡單看下本文所用的可視化方法。


可視化

為了顯示計算結(jié)果,我使用了免費(fèi)應(yīng)用程序 Gnuplot,該程序用于繪制各種 2D 和 3D 圖形。Gnuplot 能夠在屏幕上顯示圖表(在單獨(dú)的窗口中)或以不同的圖形格式將圖表寫入一個文件??梢詮念A(yù)備的文本文件中執(zhí)行繪圖命令。Gnuplot 項(xiàng)目的官方網(wǎng)頁為 gnuplot.sourceforge.net。應(yīng)用程序支持多個平臺,并且作為源代碼文件以及專為某個平臺編譯的二進(jìn)制文件予以發(fā)布。

在 Windows XP SP3 中使用 4.2.2 版 Gnuplot 測試了專為本文編寫的示例。可以在 http://sourceforge.net/projects/gnuplot/files/gnuplot/4.4.2/ 下載 gp442win32.zip 文件。我沒有用其他版本 的 Gnuplot 測試這些示例。

下載 gp442win32.zip 檔案之后,請將其解壓縮。這樣就創(chuàng)建了 \gnuplot 文件夾,該文件夾包含應(yīng)用程序、幫助文件、說明文檔和示例。要與應(yīng)用程序互動,請將整個 \gnuplot 文件夾放到赫茲量化客戶端的根文件夾中。


編輯

圖 1. 文件夾 \gnuplot 的放置

移動完文件夾之后,您可以更改 Gnuplot 應(yīng)用程序的可操作性。為此,執(zhí)行文件 \gnuplot\binary\wgnuplot.exe,然后在 "gnuplot>" 命令提示符出現(xiàn)時鍵入 "plot sin(x)" 命令。結(jié)果,會出現(xiàn)一個在其中繪制有 sin(x) 函數(shù)的窗口。您還可以嘗試包含在應(yīng)用程序交付包中的示例;為此,請選擇 File\Demos 菜單項(xiàng),然后選擇文件 \gnuplot\demo\all.dem。

現(xiàn)在,在您啟動 erremove.mq5 腳本時,將會在一個單獨(dú)的窗口中繪制圖 2 所示的圖形:


編輯


量化交易軟件:統(tǒng)計估計的評論 (共 條)

分享到微博請遵守國家法律
易门县| 沙河市| 怀来县| 出国| 旌德县| 河东区| 湛江市| 长顺县| 张家港市| 连山| 专栏| 本溪市| 扶绥县| 斗六市| 双城市| 莱阳市| 云南省| 隆林| 太和县| 河池市| 霍城县| 响水县| 高唐县| 盐亭县| 鸡东县| 苍溪县| 隆德县| 阳新县| 临桂县| 南丰县| 当阳市| 涪陵区| 霞浦县| 广安市| 昌平区| 贵南县| 中卫市| 宁津县| 叙永县| 景泰县| 永宁县|