如何实施?
感谢您对我的库感兴趣。使用它非常简单,主要是对一维数组进行操作。
例如,您可以使用 detrend函数 轻松去除时间序列中的线性趋势:
detrend(timeSerie, detrendResultArray);
timeSerie 是一个包含价格的数组,detrendResultArray 应该是一个空数组,您的结果将存储在其中。因此,调用函数后,您将得到一个包含去趋势时间序列的数组,您可以对其进行进一步分析(例如检查序列是否静止)。
例如,假设数组中包含 Currency1(可能是后向),则可以用它预测下一个值:
double detrendedSerie[]; double forecastedValue; //使 Currency1 向后存储(数组中的最后一个值为最新价格) detrend(Currency1, detrendedSerie); if(dickeyFuller(detrendedSerie)){ forecastedValue = AR1(detrendedSerie); } if(forecastedValue > detrendedSerie[ArraySize(detrendedSerie)-1]){ //购买 }else{ //出售 }
另一个有趣的函数是带符号积分。在当前形式下使用它非常简单,只需调用函数定义极限和多项式度(可以很小),
,即可获得给定积分的良好近似值。您还可以编辑 "foo "函数,对 f(x) = x 以外的函数进行积分。
如何实施?
如何实施?
很高兴听到您喜欢它!如果您使用该库创建了一些 EA/指示器,请在此处粘贴链接。
你好,Herajika、
我正在尝试用其他统计/数学软件复制您分享的代码中的 Dickey-Fuller 检验统计。特别是,我正在使用 Wolfram Mathematica。
请考虑您使用的原始文章(来自 Scribd)中的数据:
double data[] = {6109.58, 6157.84, 5850.22, 5976.63, 6382.12, 6437.74, 6877.68, 6611.79, 7040.23, 6842.36, 6512.78, 6699.44, 6700.20, 7092.49, 7558.50, 7664.99, 7589.78, 7366.89, 6931.43, 5530.71, 5611.90, 6208.28, 6343.87, 6485.84};
为了使用您的代码获得测试统计数据,我删除了 Print 函数前的注释,如下代码所示:
bool dickeyFuller(double &arr[]) { // n=25 50 100 250 500 >500 // {-2.62, -2.60, -2.58, -2.57, -2.57, -2.57}; double cVal; bool result; int n=ArraySize(arr); double tValue; double corrCoeff; double copyArr[]; double difference[]; ArrayResize(difference,n-1); //--- for(int i=0; i<n-1; i++) { difference[i]=arr[i+1]-arr[i]; } //--- ArrayCopy(copyArr,arr,0,0,n-1); corrCoeff=correlation(copyArr,difference); tValue=corrCoeff*MathSqrt((n-2)/1-MathPow(corrCoeff,2)); //--- if(n<25) { cVal=-2.62; }else{ if(n>=25 && n<50) { cVal=-2.60; }else{ if(n>=50 && n<100) { cVal=-2.58; }else{ cVal=-2.57; } } } Print(tValue); //--- 测试统计? result=tValue>cVal; return(result); }
如前所述,我更感兴趣的是测试统计本身,而不是测试结论。从这个意义上说,使用您分享的代码,我得到的是:
void OnStart() { //--- 来源:http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel# double data[] = {6109.58, 6157.84, 5850.22, 5976.63, 6382.12, 6437.74, 6877.68, 6611.79, 7040.23, 6842.36, 6512.78, 6699.44, 6700.20, 7092.49, 7558.50, 7664.99, 7589.78, 7366.89, 6931.43, 5530.71, 5611.90, 6208.28, 6343.87, 6485.84}; //--- dickeyFuller(data); }
因为我现在打印的是包含测试统计数据的行,所以我得到的是......:
-1.719791886975595
然而,原文指出 t 统计量为 1.8125。
然而,当我使用 Wolfram Mathematica 处理相同的数据集时,我得到的结果却是: 1.8125:
您知道是什么原因导致 3 次测试得到 3 个不同的测试结果吗?
Malacarne
你好!关于文章(http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel#) 中的结果与我的实现之间的差异,
,请注意,在上述网站上,符号(+、-)的显示存在一些问题。因此,文章中的结果实际上是-1.8125。
至于与 Wolfram Mathematica 的差异,可能是不同的实现使用不同的临界值,计算 tValues 的方法也不同。在 Matlab 中做同样的操作,我得到了
另一个结果(0.6518)。
不过,如果在 excel 中做同样的尝试,应该会显示出接近 -1.8125 的结果。
Herajika
你好!关于文章(http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel#) 中的结果与我的实现之间的差异,
,请注意,在上述网站上,符号(+、-)的显示存在一些问题。因此,文章中的结果实际上是-1.8125。
至于与 Wolfram Mathematica 的差异,可能是不同的实现使用不同的临界值,计算 tValues 的方法也不同。在 Matlab 中做同样的操作,我得到了
另一个结果(0.6518)。
不过,如果在 excel 中做同样的尝试,应该会显示出接近 -1.8125 的结果。
Herajika
你好,Herajika、
感谢您的回复。那么,在这种情况下,什么统计数据才是正确的?
原文显示的测试统计量值是否有误?
Malacarne
附注:在 Mathematica 中,如果我不使用 "TestStatistic "选项,得到的结果与 MatLab 中的相似。
统计功能:
作者: Haruna Nakamura