市场礼仪或雷区中的良好风度 - 页 84

 

中子 谢谢你寄来的论文


也感谢你提出的话题和建设性的意见。

到目前为止,我已经设法用SSAS实现了类似的东西(不幸的是,今天才看到这个主题和论文)。

也许K.N.会从中学到一些有用的东西。

1.根据H1蜡烛图的平均值将日内区间聚类为几个群组,并将一天分为时间间隔(TI)

(2个群组和2个VV,但一个日元对变成了4个群组和7个VV)

2.为每个仪器和VI创建模型。

- 通过两个输入参数:价格和时间,分别对以前的上升和下降趋势进行聚类。

- 通过两个输入参数:价格和时间
,分别对未来向上和向下的走势进行聚类(这个模型当然只是用来为训练阶段准备数据)。

- 预测模型:
-- 天真贝叶斯

-- 经验法则

--关系规则

-- NS

-- 决策树

3.基于对极值的最小偏离,我们构建了一个之字形--我们得到了一个片状单调的F结构,并相应地得到了 N的模式

我们训练适当的聚类模型,并对片段进行聚类。

5.我们将图案的预测范围计算为图案长度或固定长度的一小部分,或计算为图案长度较大部分的最接近的倍数。

6.计算和分类 "预测"

7.教授预言模型

在操作过程中,专家顾问将数据加载到MS SQL中,并定期生成人字形的点和预测。在收到这些文件后,它分析了其支持的价值和规则的有效性。它在比较的基础上做出决定。


优势。

- 有可能使用和比较几个DM模型的结果

- 模型本身可以从各种方法中选择

劣势。

- 设置模型的参数更少

- MSSQL的资源密集型操作

- 缺乏科学依据(让我们纠正一下,包括上述论文的结论)。


在不以任何方式侵犯上述工作中的科学和证明的伟大阴影的情况下。

我非常想问每一个阅读这个主题的人

关于在聚类中使用单调的额外输入,如成交量、市场波动等的便利性。

也许 ,他们可以发挥额外的,例如过滤的作用。


S.Privalov:从本质上讲,这项工作(论文)定义了一种为预测创建模式的方法。

我认为,这就是我们所谈论的--例如,当你通过ass.rule获得预测时,你可以指定模式片的数量N,并要求不同数量的预测步骤提前,并以不同的支持和确定性获得它们--即我们得到一个可以作为预测基础的模型。

你认为这有可能吗/你如何将你的使用卡尔曼法的想法应用于他们?

拥有一个模型/,在他们手下训练会很有趣。


这就是SSAS中的模型的样子,对于这个工具,已经确定了3个vi

这里http://www.fxexpert.ru/forum/index.php?showtopic=656,有一些网格库,包括mql和其他有用的东西。

 

我开始深入挖掘网络,试图确定隐藏神经元的最佳数量。我得出了一个相当有趣的结论,我想其他人也早就得出了这个结论。我将尝试直观地解释它。想象一下,一个隐藏层的神经元有20个输入。有了这些输入,就像触角一样,它对输入进行摸索,在摸索的过程中,输入的权重被优化,以获得网络的预期输出。我们现在添加另一个隐藏神经元,有20个输入与第一个神经元的20个输入相连,但权重不同。由于第二个神经元探测的是相同的输入,它基本上没有提供新的信息。如果这是真的,那么训练网络将导致两个神经元的输入权重相同。由于两个神经元的输出都乘以输出神经元的相应权重并相加,两个隐藏神经元的输入权重在振幅上可能相差一个等于输出神经元权重比率的系数。

总之,在训练完这样一个20-2-1网络后,我得到了两个隐藏神经元的这些输入权重。

请注意,除了常数乘数之外,两组权重的表现都是一样的,取决于输入数字。也就是说,两个神经元给输出神经元的信息是一样的。也许这就是为什么我的网络在添加第二个隐藏神经元后,学习误差几乎没有改善。这里是另一张隐藏神经元权重的图片。这里它们有一个符号的不同,但输出神经元权重的符号也不同


一般来说,这样的两层网络的行为类似于简单的单层网络(AR模型)。有了这个结论,我就陷入了死胡同。事实证明,神经网络 只适用于分类,即当输出只有两个值:是或不是。试图将网络用于价格预测会导致与AR模型相同的结果,因为神经元的输出并不饱和,即使我们将输入数据归一化为-1...+1,其非线性激活函数也发挥了很小的作用。我去喝杯啤酒--也许会出现新的想法(例如,将+1和-1输入到网络输入?)

 
M1kha1l писал(а)>>

到目前为止,我已经设法用SSAS实现了类似的东西(不幸的是,我今天才看到这个主题和论文)。

这里http://www.fxexpert.ru/forum/index.php?showtopic=656,有一些网格库,包括mql和其他有用的东西。

谢谢你,M1kha1l,谢谢你的好意和分享你的知识。

你的帖子需要一些时间来理解。我现在正在读它。

gpwr 写道>>

我开始深入挖掘网络,试图确定隐藏神经元的最佳数量。得出了一个相当有趣的结论,其他人可能很早就得出了这个结论。我试着直观地解释一下。想象一下,一个隐藏层的神经元有20个输入。有了这些输入,就像触角一样,它对输入进行摸索,在摸索的过程中,输入的权重被优化,以获得网络的预期输出。我们现在添加另一个隐藏神经元,有20个输入与第一个神经元的20个输入相连,但权重不同。由于第二个神经元探测的是相同的输入,它基本上没有提供新的信息。如果这是真的,那么训练网络将导致两个神经元的输入权重相同。由于两个神经元的输出都乘以输出神经元的相应权重并相加,两个隐藏神经元的输入权重在振幅上可以相差一个等于输出神经元权重比率的系数。

伟大的工作,gpwr,我甚至没有想到要看一下平行神经元的重量!"。

我们来看看多层NS在学习过程中的学习误差减少(红色)和概括误差减少(蓝色)的过程。

我们可以看到,泛化误差的最小值(在决策中给我们带来的统计优势)与泛化误差的最小值并不相同。这是可以理解的,因为历史并不总是完全重复,而是大约重复。而且,虽然只有一个全局最小值用于学习,但有许多局部最小值用于概括,而且没有办法选择最好的一个。你只能猜测。而这正是隐蔽层中多个神经元形式的统计学发挥作用的地方。所有的人都有点训练不足,"沉湎于 "局部最小值,有些人处于最佳状态(就概括错误而言),有些人处于最差状态。明白吗?一般来说,他们的解决方案是由输出线性神经元平均的,这样的估计是最好的。此外,估计误差随着隐藏层中神经元数量的平方根下降。这就是为什么NS的预测能力随着隐藏层中神经元数量的增加而增加。

你所引用的这些数据说的是网状结构的再训练,结果是隐蔽层中所有神经元的同步运行。多层NS已经退化成一个线性的pseptron!

 
Neutron >> :

谢谢你,M1kha1l,谢谢你的好意,谢谢你选择分享你的知识。

需要一些时间来理解你的帖子。我读了。

伟大的工作,gpwr,我甚至没有想到要看一下平行神经元的重量

来吧,让我们看看学习过程中多层NS的学习误差减少过程(红色)和概括误差(蓝色)。

我们可以看到,泛化误差的最小值(在决策中给我们带来的统计优势)与泛化误差的最小值并不相同。这是可以理解的,因为历史并不总是完全重复,而是大约重复。而且,虽然只有一个全局最小值用于学习,但有许多局部最小值用于概括,而且没有办法选择最好的一个。你只能猜测。而这正是隐蔽层中多个神经元形式的统计学发挥作用的地方。所有的人都有点训练不足,"沉湎于 "局部最小值,有些人处于最佳状态(就概括错误而言),有些人处于最差状态。明白吗?一般来说,他们的解决方案是由输出线性神经元平均的,这样的估计是最好的。此外,估计误差随着隐藏层中神经元数量的平方根下降。这就是为什么NS的预测能力随着隐藏层中神经元数量的增加而增加。

你所引用的这些数据说的是网状结构的再训练,结果是隐蔽层中所有神经元的同步运行。多层NS已经退化成一个线性perseptron!

我的网络得到了300个训练实例,权重数为45。在文献中,有一种观点认为,如果有5倍于权重的训练实例,网络有95%的概率会被泛化。也就是说,根据理论,我的网络必须具有良好的概括性,但事实上并非如此。这就是为什么我举了一些例子来证实它。我认为这里的重点不是要采取更多的培训实例。这是关于我强迫网络解决的问题的性质。如果你试图让网络预测价格的下一步的大小,那么在训练中,它将倾向于这样的权重,神经元在激活函数的线性区域操作,以保持预测的步骤和输入的过去步骤之间的比例。也就是说,任务本身是线性的。鉴于这种状况,增加隐藏神经元不会有任何改善。而隐藏层本身也变得没有必要。通过对我的网络进行实验,我得出结论,单层和双层一样好用。我想,看了你之前在这个主题的帖子,你对欧元兑美元也得出了同样的结论。

我认为,该网络应该用于高度非线性问题(如XOR或分类问题),对于这些问题的神经元激活函数可以选择交错使用。


 

我想指出的是,检测到的效果的本质可能是由于训练次数过多导致的NS过度训练,训练次数Nopt (见上图)必须有一个最佳值 这取决于学习率的系数。我并没有说我们应该"...更多的训练实例。",这就是最佳训练样本长度Rorth=w*w/d 问题的实质。这是理论上的说法,而不是说"......训练实例的数量是权重数量的5倍......" 。

我们谈论的是网络过度训练效应的不同原因。

我同意你的观点,预测下一个条形图的符号和振幅的任务主要是线性的,不可能有其他东西。市场就像撬棍一样简单,也像天气预报一样不可预测。虽然,稍后我将公布单层、隐藏层有两个神经元的双层和隐藏层有4个神经元的双层的小时条预测质量的比较结果。所有这些都将作为NS的输入数d 的函数来呈现。数据将是50个独立数字实验的平均值。

 

是否没有办法...把一匹马和一只母鹿放在同一辆车上?我是指MT4和MathCad。在MathCad中直接接收当前报价,并在那里进行整个分析,然后将生成的信号传输到MT4。首先想到的是使用文件,但这两个程序必须一直检查两个不同文件的内容。这不是很方便。也许有别的东西?很遗憾,MQL中没有中断处理。一切都做得多么不方便啊МТ4,这他妈的...我可以直接坐下来研究C++。


P.S. 我正在为网格的数据捣乱。

 

不,在MQL中实现整个分析算法,是不是很无聊?或者说,这些困难在某种程度上是过高的?

P.S. 而我正在得到统计数字...

 

是的,MQL处处都有困难。例如,这里是最简单的代码(指标),用于将一个商分割成若干交易。

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1 Red
#property indicator_color2 MediumBlue

extern int step = 5;
extern int sp = 3;

double Trans[], Kagi[];
int mn, mx, H, Cotir, Up, Dn;
bool set_new=false, SetMax=false, SetMin=false;

//******************************************************************************
int init() 
{ 
SetIndexBuffer(0, Trans);
SetIndexBuffer(1, Kagi);

SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,119);
SetIndexArrow(1,162);

IndicatorShortName ("Kagi++");
return(0); 
} 
//*******************************************************************************

int start() 
{ 
int reset, MaxBar, MaxBarJ, counted_bars=IndicatorCounted(), mx_j, mn_j;

if ( counted_bars<0)return(-1);
if ( counted_bars>0) counted_bars--;
int limit=Bars- counted_bars-1; MaxBar=Bars-2; MaxBarJ= MaxBar-30; 
if ( limit==Bars-1) limit=Bars-2;

//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for(int i= limit; i>=0; i--)
   {
     Cotir = Open[ i]*MathPow(10.0,Digits);
          
     if(! set_new)
      {
        mx = Cotir;
        mn = Cotir;
        H = step* sp;
        set_new = true;
      }               
     if( Cotir - mx > 0)
      {
        mx = Cotir;
        mx_j = i;
      }  

     if( Cotir - mn < 0)
      {
        mn = Cotir;
        mn_j = i;
      }  

     if(! SetMax && Cotir <= mx - H) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mn = Cotir;           
         mn_j = i;
         SetMax = true;
         SetMin = false;
         Kagi[ mx_j] = mx/MathPow(10.0,Digits);
      } 
     if(! SetMin && mn + H <= Cotir) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mx = Cotir;       
         mx_j = i;
         SetMax = false;
         SetMin = true;
         Kagi[ mn_j] = mn/MathPow(10.0,Digits);
      } 

   }
return(0);  
}


它可以工作,但我们不能在图表窗口中用线条绘制其结果。此外,(这超出了我的理解范围)如果价差被小于6个价差所除,它根本不输出任何东西,尽管事实上数组的形成是正确的。在MQL中,以及在任何自制的技术中,有许多完全意想不到的困难(从双重比较开始等等......)和 "特殊性",当然是没有记录的。我在骂人,一般来说...

我也明白如何在MathCad中检查网格,但如何在MQL中进行检查--你想不出吗?如果我在某处有一个错误怎么办?

 
paralocus писал(а)>>

是的,MQL处处都有困难。下面是最简单的代码,例如,将一个商分成若干个交易。

见附件 - 绘画 - 欣赏

paralocus 写道>>

我也知道如何在MathCad中检查网格,但在MQL中如何做--我不知道。>> 如果我在某个地方有一个错误怎么办?

为什么不考虑使用NeuroShell或统计学?在那里,你可以创建网格并将它们放入库中,然后从MT中训练它们并监控它们的参数。
附加的文件:
 

看来我不能再等着收集我的MS的统计数据了......

我想我将不得不放弃以NS输入的数量为1的增量来呈现预测准确率数据的想法。例如,我们可以通过将输入的数量作为2的倍数来简化任务...