欢迎光临散文网 会员登陆 & 注册

期货股票量化交易软件:神经网络诀窍

2023-08-14 11:07 作者:bili_45793681098  | 我要投稿

简介

曾几何时,技术分析尚在襁褓之中,那时并不是所有交易者都拥有计算机 - 人们开始试着用他们发明的公式和规律来预测未来的价格。 他们通常都被人蔑称为江湖骗子。 时间流逝,各种信息处理方法变得愈加复杂,现在几乎没有对技术分析漠不关心的交易者了。 任何新手交易者都可轻松利用图表、各种指标来寻找规律。

外汇交易者与日俱增。 与此同时,他们对市场分析方法的要求也在不断提高。 此类“相对”较新的方法之一是使用理论模糊逻辑和神经网络。 我们看到,各大专题论坛上有关这些问题的主题引发了大量活跃的讨论。 它们确实存在,并将继续存在下去。 进入市场的用户很难离得开它。 而这对个人的智力、大脑和意志力来说是一个挑战。 因此,交易者孜孜不倦地学习新东西,在实践中使用各种方法。

本文中赫兹量化将分析神经网络创建的基础实施,了解 Kohonen 神经网络的概念,并谈一谈交易优化方法。 本文是第一篇面向神经网络和信息处理原则初学者的文章。


编辑

要用 Kohonen 层构建一个神经网络,需要:

1) 任意货币对的 10 000 个历史条柱; 2) 5 克移动平均线(或任何其他指标 - 全看你的选择); 3) 逆向分布的 2 到 3 层; 4) 以优化方法作为内容; 5) 不断增长的余额量和正确猜出的交易方向的数量。



第 I 节. Kohonen 层的诀窍

为新手考虑,让我们从这一节开始。 赫兹量化将讨论各种练习 Kohonen 层的方法,更确切地说,是其基本版本,因为它有很多版本。 本节中没有什么原创内容,所有说明都取自本主题的经典参考内容。 但是,本节的优点在于针对各节的大量说明性图片。

在本节中,我们将讨论以下问题: - Kohonen 权向量的调整方式; - 输入向量的前期准备工作; - 选择 Kohonen 神经元的初始权值。

因此,根据维基百科,Kohonen 神经网络是一类神经网络,其主要元素为 Kohonen 层。 Kohonen 层包含自适应线性加法器(“线性形式神经元”)。 通常,Kohonen 层的输出信号的处理依据是“赢家通吃”规则:最大的信号变为 1,其他信号统统变为 0。

现在让赫兹量化举个例子来讨论此概念。 为了能够看得见,将对二维输入向量给出所有计算值。 图 1 中,输入向量以彩色显示。 Kohonen 层(像任何其他层一样)的各个神经元只是计算输入内容的总和,将其乘以其权值。 实际上,Kohonen 层的所有权值都是此神经元的向量坐标。

因此,各个 Kohonen 神经元的输出是两个向量的点积。 从几何学中我们了解到,如果向量之间的角度趋于 0(角度余弦趋于 1),点积将达到最大值。因此,最大值将是最接近于输入向量的 Kohonen 层神经元的最大值。


编辑


图 1 赢家是向量最接近输入信号的神经元。

根据定义,现在我们应该找到所有神经元中的最大输出值,向其输出赋值 1,向所有其他神经元赋值 0。 Kohonen 层将在输入向量所在空间区域“回复”我们。

Kohonen 权向量的调整

如上所述,层训练的目的是对输入向量进行精确的空间分类。 这意味着各个神经元必须对其获胜的特定区域负责。 获胜神经元与输入神经元之间的偏差必须小于其他神经元的偏差。 为了达到这一目的,获胜神经元“拐入”了输入向量侧。 图 2 显示两个神经元(黑色神经元)针对两个输入向量(彩色的向量)的划分。


编辑


图 2. 各个神经元都向最近的输入信号靠近。

每次迭代时,获胜神经元都会靠近“其自己的”输入向量。 它的新坐标根据以下公式计算得出:



其中,A(t) 是训练速度参数,取决于时间 t。这是一个非增函数,每次迭代时都会从 1 降至 0。 如果初始值为 A=1,则将在某个阶段执行权值校正。 当每个输入向量都有一个 Kohonen 神经元时(例如,Kohonen 层中有 10 个输入向量和 10 个神经元),就有可能出现这种情况。

但实际上,这种情况几乎不可能出现,因为我们通常需要把大量输入数据划分为多个包含类似数据的组,从而减少了输入数据的多样性。 这就是值 A=1 不可取的原因。 实践表明,最佳初始值应小于 0.3。

此外,A 与输入向量的数量成反比。 即,如果 A 较大,最好进行小规模校正,使获胜神经元不会“穿过”其整个校正空间。 作为 A 的功能,通常会选择任意单调递减函数。 例如,双曲线下降或线性下降,或 Gaussian 函数。 图 3 显示速度 A=0.5 时的神经元权值修正步骤。 神经元越靠近输入向量,误差越小。


编辑


图 3. 神经元权值校正受输入信号的影响。

宽样本时的少量神经元


编辑



编辑


图 4. 两个输入向量之间的神经元波动。

图 4(左)中有两个输入向量(以彩色显示)和仅仅一个 Kohonen 神经元。 在校正期间,神经元将从一个向量转至另一个向量(点线)。 当 A 值减小至 0 时,它在两者之间稳定下来。 神经元坐标随时间的变动可以锯齿形波浪线表示(图 4 右)。


编辑


图 5 分类类型对神经元数量的依赖关系。

图 5 中显示了另一种情况。 在第一种情况中,四个神经元把样本充分地划分为四个超球体区域。 在第二种情况中,神经元数量不足,导致误差增大且样本重新分类。 因此,赫兹量化可以得出以下结论:Kohonen 层必须包含足够数量的可用神经元,这取决于已分类样本的容量。

输入向量情况下的预先准备Philip D. Wasserman 在他的书中写道,在将输入向量放到网上之前,最好(虽然不是必须的)将它们标准化。 方法是将输入向量的各个分量除以向量长度。 此长度是通过从向量分量平方和中提取平方根得出的。 以下是代数表示法:



这可将输入向量转换为同一方向的单位向量,即 n 维空间中单位长度的向量。 此操作的含义很明显 - 投射超球体表面上的所有输入向量,从而简化搜索 Kohonen 层的任务。 换句话说,为了搜索输入向量与向量-Kohonen 神经元之间的角度,赫兹量化应该消除向量长度等因素,使所有神经元的几率等同。

样本向量的元素通常是非负值(例如,移动平均线的值、价格)。 它们都集中于正象限空间。 此类“正”样本标准化的结果是,大量向量累积在仅仅一个正区域内,这种情况对于获取资格来说并不有利。 所以我们才能在标准化之前执行样本平滑处理。 如果样本相当大,赫兹量化可以假设向量基本上聚集于一个区域,没有远离主样本的“局外人”。 因此,可将样本相对于其“极值”坐标居中放置。


编辑切换为居中


图 6 输入向量的标准化。

如上所述,向量标准化是有必要的。 它能够简化 Kohonen 层的校正工作。 但是,赫兹量化应该明确给出一个样本,并确定是否将其映射到球体上。

列表 1. 将输入向量的范围缩小至 [-1, 1]

for (N=0; N<nNeuron[0]; N++) // for all neurons of the input layer {  min=in[N][0]; // finding minimum in the whole sample  for (pat=0; pat<nPattern; pat++) if (in[N][pat]<min) min=in[N][pat];  for (pat=0; pat<nPattern; pat++) in[N][pat]-=min; // shift by the value of the minimal value  max=in[N][0]; // finding maximum in the whole sample  for (pat=0; pat<nPattern; pat++) if (in[N][pat]>max) max=in[N][pat];  for (pat=0; pat<nPattern; pat++) in[N][pat]=2*(in[N][pat]/max)-1; // narrowing till [-1,1] }


如果我们要标准化输入向量,我们应该相应地将所有神经元权值都标准化。选择初始神经元权值这有无数的可能。1) 像平常对神经元所做的那样(随机化),将随机值分配给权值;2) 按示例初始化,将从训练样本中随机选择的示例的值指派为初始值;3) 线性初始化。 在这种情况下,权值是由沿整个线性空间线性排序,并介于初始数据集中的两个向量之间的向量值发出的;4) 所有权值具有相同的值 - 凸组合方法。

让我们分析第一种和最后一种情况。1) 将随机值分配给权值。随机化期间,所有向量神经元都分布在超球体的表面上。 而输入向量有分组的趋势。 在这种情况下,有些权向量可能与输入向量相距太远,它们绝无可能提供较好的关联,因此它们无法学习 - 图 7(右)中的“灰色”数字。 此外,剩余的神经元将不足以最大程度减小误差并划分类似的类 -“红色”类包括在“绿色”神经元中。



编辑


图 7 随机化神经元的训练结果。


如果一个区域内聚集了大量神经元,多个神经元可以进入一个类的区域,并将其划分为多个子类 - 图 7 中的橙色区域。 这并不重要,因为之后对层信号的进一步处理可以修复此问题,但这需要占用训练时间。

解决这些问题的方法之一 是在初始阶段,对一个获胜神经元的向量进行校正,同时也对最接近此神经元的向量组进行校正。 然后组的数量逐渐减小,最终仅校正一个神经元。 可从已排序的神经元输出数组中选择一个组。 将矫正前 K 个最大输出中的神经元。

另一个 权向量的组调整方法是以下方法。

a) 为各个神经元定义校正向量的长度:



. b) 距离最短的神经元成为获胜者 - Wn. 之后,如果找到一组神经元,其关联限制在距离 Wn 的 C*Ln 处。 c) 根据一个简单的规则

来校正这些神经元的权值。 这样就完成了整个样本的校正。 C 参数在训练过程中从某个数字(通常是 1)更改为 0。第三个 有趣的方法表明每个神经元在一次完整的样本流程中仅可校正 N/k 次。 这里,N 是样本的大小,k 是神经元数量。 即,如果任意神经元成为获胜者的次数比其他神经元多,它会“退出游戏”直至完成样本流程。 这样,其他神经元也可学习。2) 凸组合方法此方法意味着权向量和输入向量初始时都放置于同一区域内。 输入向量和初始权向量的当前坐标的计算公式如下:



编辑



,



其中,n 是输入向量的维数,a(t) 是时间的非减函数,各个迭代将其值从 0 增加到 1,结果,所有输入向量与权向量一致,最终取代了它们。 此外,权向量将“达到”其类。

这些就是此神经网络中应用的 Kohonen 层基础版本的所有资料了。



II. 汤匙、长柄勺和脚本

赫兹量化要讨论的第一个脚本将采集有关条柱的数据并创建一个输入向量文件。 让我们以 MA 为练习用例。

列表 2. 创建输入向量文件

// input parameters #define NUM_BAR 10000 // number of bars for training (number of training patterns) #define NUM_MA 5 // number of movings #define DEPTH_MA 3 // number of values of a moving // creating a file hFile = FileOpen(FileName, FILE_WRITE|FILE_CSV); FileSeek(hFile, 0, SEEK_END); // Creating an array of inputs int i, ma, depth; double MaIn; for (i=NUM_BAR; i>0; i--) // going through bars and collecting values of MA fan {  for (depth=0; depth<DEPTH_MA; depth++) //calculating moving values   for (ma=0; ma<NUM_MA; ma++)   {   MaIn=iMA(NULL, 0, 2+MathSqrt(ma*ma*ma)*3, 0, 1, 4,                    i+depth*depth)- ((High[i+depth*depth] + Low[i+depth*depth])/2);   FileWriteDouble(hFile, MaIn);   }  }


创建的数据文件用作应用程序之间的信息传递手段。 如果你正在熟悉训练算法,强烈建议查看其操作的中期结果和一些变量的值,并在必要时更改训练条件。


期货股票量化交易软件:神经网络诀窍的评论 (共 条)

分享到微博请遵守国家法律