基于艾略特波浪理论的交易策略 - 页 287

 
olyakish


大家晚上好。
能否请你告诉这个算法的孩子?

预先谢谢你


我告诉你。

我们对价格曲线应用多重中值过滤器。它是什么?我们采取一个奇数大小(>=3)的窗口,并通过原始曲线的所有值来运行它。在每一个当前点,按价值对窗口中包含的点进行排序。当前点被分配了一个来自排序数组的平均值(在这个意义上,它位于数组的中间)。我们再一次对得到的结果应用同样的过滤器。我们重复多次(通常20-30次就够了)。
为了得到阻力位,我们把价格曲线倒过来,做同样的事情。然后我们将得到的结果向后翻转。
这就是全部!
...



一个简单的问题。
假设我们有1000份报告的历史记录(条)。
窗口3
我们不计算1000,999个窗口的结果,当我们到达第998个报告时,进行第一次计算(我们有998,999和1000个报告的数据)。
我们的第一道程序给了我们998个结果
对于第二遍,我们使用上一次运行中形成的数组得到996份报告
在第三次运行中,我们得到994 ...
等等......。
也就是说,如果我们运行30次,我们得到一个960个值的数组

也许我没能正确理解你的意思?
 
toolyakish

<br/ translate="no"> 一个简单的问题
假设我们取了1000份报告的历史记录(条形)
窗口3
原来对于1000,999我们不计算,因为它比窗口小,第一次计算我们只做到998份报告(我们有998,999和1000份报告的数据)
我们得到第一遍998的结果
第二遍我们得到996份报告已经由前面的运行阵列生成
第三遍我们得到994 ...
等等......。
也就是说,如果你跑了30次,你得到一个960个值的数组

也许我误解了你的意思?



并非如此。技术上,它的做法有点不同。在你应用一个过滤器之前,你要在两个方向上将原始阵列扩大到过滤器窗口宽度的一半。你在新数组的空白处填入一个常数,即原数组边缘的最后一个值,或者对称地填入原数组的极端值。在这种情况下,在对原来的1000个点的数组应用过滤器后,你将再次得到1000个点。下次再过滤时,一切都会重复。当然,在这种情况下,边缘可能会出现失真。但这是无法避免的,因为任何窗式滤波器(以及所有的滤波器)都有一个相位延迟,包括中值滤波器。一般来说--这就是自然界的运作方式。我们可以按照你描述的方式来做,但这样我们就无法到达原始数组的边缘;或者我们可以使用扩展,但这样我们就无法到达结果的边缘。这是个坏消息。 好消息是,中值滤波器对边缘效应不像



线性滤波器 那样敏感。我有时间看的几个例子表明,边缘变形很小,或者在某些情况下完全没有。PS。是的...刚才我想到了一个想法。该过滤器可以被递归地应用。我不知道它能做什么,我没有试过,但它会算得更快。
 
Andre69,我实现了你建议的中值过滤器算法。事实证明,在第三次运行后,平滑曲线的形状并没有改变。在广泛的窗口大小(多达10000个样本)中测试了这种效果。
就交易中的应用而言,当当前点从位于当前值左边的FULL窗口的中心分配一个值时,使用 "左窗口 "是正确的。当然,这引入了一个相位延迟(滞后),但这就是世界的方式:-)
 
中子

Andre69,我实现了你建议的中值过滤器算法。事实证明,在第三次运行后,平滑曲线的形状并没有改变。我在很大的窗口尺寸范围内检查了这种效果(最多10000个样本)。<br/ translate="no"> 至于交易中的应用,当当前点从窗口中心被分配到一个完全在当前值左边的值时,使用 "左窗口 "是正确的。当然,这引入了一个相位延迟(滞后),但这就是世界的方式:-)


是的...这并不符合事实。开始检查。最后研究了我的代码,我用它来做中值过滤。我在N年前(N>5)为一个小的图形输出程序写了它。现在我已经开始把这个程序作为各种研究的多边形 来使用。这很方便,我甚至还没有研究过代码的旧部分。这一切都在运作,而且很好...现在我在看...并突然发现,我认为是中位数过滤的函数--它并不完全是这样做的!对非自愿的错误信息感到非常抱歉!我低下了有罪的头。 当时我为什么要这样做--上帝保佑,我不记得了。经典的中位数是指在一个排序的数组中取中心值。在这种特殊情况下,我取了中心值和之前的值之间的平均值。也许我在很久以前就因为某种原因需要它了。我还得到了一个非线性滤波器,当然,它不是严格意义上的中位数。当我回到经典版本时,它变成了你描述的样子。在我的变体中,每次应用过滤器时,曲线都会发生变化,最终趋向于一条直线(经过几百次过滤)。过滤窗口越大,发生得越快。为了避免进一步的歧义,我提供一段C语言的代码。这很简单,我希望任何人都能想出办法。




//---------------------------------------------------------------------------
void __fastcall TPlotForm2D_WL::FilterCurveMedian(int Flen)
{
 //количество точек кривой
 int NN=Chart1->Series[IndexUpDown->Position-1]->Count();
 
 //объявляем временные массивы и выделяем память под них
 double* TempArray=new double[NN+(Flen/2)*2];
 double* ResultArray= new double[NN];
 double* XArray=new double[NN];
 double* MedArray=new double[Flen];

 //заполняем массив значений Х точками текущей кривой
 for(int i=0;i<NN;++i)
  XArray[i]=Chart1->Series[IndexUpDown->Position-1]->
                           XValues->Value[i];

 double Start=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[0];
 double End=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[NN-1];

 int k=0;

 //заполняем временный массив значениями Y точками текущей кривой
 for(int i=Flen/2;i>0;--i) //симметричное расширение влево
  TempArray[k++]=Start-Chart1->Series[IndexUpDown->Position-1]->
                                      YValues->Value[i];
 for(int i=0;i<NN;++i)
  TempArray[k++]=Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];
 for(int i=NN-1;i>=NN-Flen/2;--i)//симметричное расширение вправо
  TempArray[k++]=End-Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];

 //собственно фильтрация
 for(int i=Flen/2;i<NN+Flen/2;++i)
  {
   for(int j=-Flen/2;j<=Flen/2;++j)
    MedArray[j+Flen/2]=TempArray[i+j];
   ::sort(MedArray,MedArray+Flen);
   //Это то, что я написал когда-то. Уже не помню, почему так.
   //Но это работает!!!!!!!!!!
   ResultArray[i-Flen/2]=(MedArray[Flen/2]+MedArray[Flen/2-1])/2;
   //А эта строчка - классический медианный фильтр.
   //И это не работает, так как хотелось бы. ???? Sorry
   //ResultArray[i-Flen/2]=MedArray[Flen/2];
  }


 //дальше вывод и удаление временных массивов
 AddFastLine();

 for(int i=0;i<NN;++i)
  Chart1->Series[Chart1->SeriesCount()-1]->
          AddXY(XArray[i],ResultArray[i],"",clBlue);

 SwitchOnCurve(PlotForm2D_WL->Chart1->SeriesCount()-1);

 delete [] TempArray;
 delete [] ResultArray;
 delete [] XArray;
 delete [] MedArray;

 if(PlotForm2D_WL->Visible)
  PlotForm2D_WL->Visible = false;
 PlotForm2D_WL->Show();

}
//---------------------------------------------------------------------------



关于 "左窗"--都是事实,我同意。但就目前而言,我认为是细节的问题。

我再次表示歉意。

 
北风
...但如果你真的有兴趣获得这份研究论文,请写信给我们(info@disserr.ru),如果可能的话,我们会从档案馆交付所要求的作品...


也许有一些关于这项工作的消息?
 
Северный Ветер
...但如果你真的有兴趣获得这份研究论文,请写信给我们(info@disserr.ru),如果可能的话,我们会从档案馆交付所要求的作品...


关于这项工作是否有任何消息?

在他们的答复公布后,我没有采取任何进一步措施。
我只是向你展示了一种尝试寻找论文材料的方法。
我警告你,这些材料可能需要付费。
 
2安德烈69

用MatLab做一些沉重的定位战。
首先,我决定只看一系列价格和一系列指标值的小波分解。对于DWT,我没有发现任何惊喜,一切或多或少都是可以理解的。
对于CWT来说,指标分解也是相当清楚的。然而,价格系列产生了以下情况。


这张图片的结构一般来说与例如Andre69 在28.06.07 20:43页的帖子中的图片有很大不同。141.我想了解一下原因。
另一方面,它的结构过于规则。为什么?
这一分析是针对一系列1024个样品进行的。
刻度设置:最小=1,步骤=1,最大=512。DMeyer小波

PS 顺便说一下,上面的帖子是关于小波的无尽系列中的最后一篇。:-)
我想了解一下延续性。应该吗?
 
Yurixx
这张图片的结构总体上与例如第141页Andre69 28.06.07 20:43的图片有很大不同。141.我想了解一下原因。
另一方面,它的结构过于规则。为什么?


尤拉,这样的规则结构是在被研究的BP两端不可避免地出现的边缘效应的性质中固有的。 要避免这种影响是不可能的。但是如果要解决的问题的条件允许,你可以从VR的两端留下一些系列的条款(条款的数量等于样本窗口的宽度),这些条款将参与计算,但不会被用于可视化。在这个过程中,图片将是充分的和各向异性的。
 
<br / translate="no">但是如果要解决的问题的条件允许,你可以在BP的两端留下一些行成员,它们将参与计算,但不会被用于可视化。在这个过程中,图片将是充分的和各向异性的。


谢谢你,谢尔盖,谢谢你的澄清。剩下的就是弄清楚如何做你所写的事情。
解析小波工具箱 我发现那里没有这种功能。也许我忽略了什么,或者只能手动完成?
 
这种影响可以通过满足以下条件来最小化:n/N<<1,其中n 是窗口大小(在你的案例中,据我所知, n=Max),N 是BP成员的数量(1024)。假设0.01<<1,我们有马赫<10 的可用系列。
在这种情况下,呈现的结果看起来是正确的。
原因: