MQL5算法交易的神经网络-006感知机模型

MQL5算法交易的神经网络-006感知机模型
Photo by Alina Grubnyak / Unsplash

输入参数

指定包含训练数据集的文件StudyFileName。

指定用于保存训练误差的文件OutputFileName。

每个样本包含多少根K线BarsToLine。

每根K线对应的神经元/特征数量NeuronsToBar。

是否启用OpenCL加速计算UseOpenCL。

指定每次更新权重矩阵时使用的批量大小BatchSize。

指定学习率LearningRate。

指定隐藏层数量HiddenLayers。

指定每个隐藏层的神经元数量HiddenLayer。

指定权重矩阵更新的迭代次数Epochs。

创建神经网络

创建输入层,先创建CLayerDescription指针,然后初始化参数。由于每根K线有NeuronsToBar个特征,每个样本包含BarsToLine根K线,因此输入层神经元数量是NeuronsToBar * BarsToLine,其他参数为空或0。

创建隐藏层,隐藏层神经元数量HiddenLayer根据经验定义,并定义激活函数和优化器。

创建输出层,输出层神经元数量为2。

加载训练数据

创建CBufferType类型指针pattern保存特征值。

创建CBufferType类型指针target保存目标值。

循环读取训练集文件数据,pattern初始化维度(1,NeuronsToBar * BarsToLine),target初始化维度(1,2)。

每行数据读取完毕后将特征和目标值数据分别保存到传入的data和targets中。

训练模型(SGD)

嵌套遍历Epochs和BatchSize。

在每个BatchSize中随机选择一个样本,然后输入特征值进行前向传播,输入目标值进行反向传播。

每个BatchSize结束后更新权重,并保存误差值。

保存模型

保存训练误差值历史数据到对应文件。

保存模型到“Study.net”文件中。

实际操作结果

使用XAU5分钟数据,时间长度为1年的数据无法收敛,时间长度3年的数据出现梯度爆炸无法训练。

由于原始数据没有对target2进行归一化,导致目标值和特征值差异较大,尝试对target2归一化之后重新训练数据。

使用1年的数据误差逐渐收敛,但是3年的数据仍然存在梯度爆炸问题。

Read more

MQL5算法交易的神经网络-007长短期记忆网络

MQL5算法交易的神经网络-007长短期记忆网络

定义属性 构建LSTM的四个门控单元:m_cForgetGate、m_cInputGate、m_cNewContent、m_cOutputGate,分别负责遗忘门、输入门、新内容和输出门的计算。 m_cMemorys和m_cHiddenStates,存储LSTM单元的记忆状态和隐藏状态。 m_cInputs,输入数据的缓冲区。 m_cForgetGateOuts、m_cInputGateOuts、m_cNewContentOuts、m_cOutputGateOuts,保存各个门控单元的输出结果。 m_cInputGradient,存储输入梯度,用于反向传播。 m_iDepth,网络的深度,表示层数。 初始化 创建CLayerDescription 指针temp 利用temp初始化 ForgetGate 利用temp初始化 InputGate 利用temp初始化 OutputGate 利用temp初始化 NewContent 初始化 InputGradient

By dumengru
20241122 所有盈利都是市场的馈赠

20241122 所有盈利都是市场的馈赠

说来也奇怪,我不断做空BTC和XAU,二者又不断创出新高,然而我的账户资金却不减反增。 经过总结,我认为盈利的原因有以下几个: 1. 能够感受到市场的最小阻力线方向。我能够明显感受到价格的最小阻力线方向是向上的,这样促使我在做空时非常谨慎,也能够很好的踩住回调的节奏。 2. 能够感受到压力和支撑位。趋势的特征之一就是压力和支撑位都比较明显,有了明显的点位,进出场时也能够得心应手。 3. 交易方向明确。这可能是最重要的一点,因为方向明确,所以我有更多的时间和精力去观察市场最小阻力线方向。 4. 仓位控制的较稳。这是慢慢培养的一种交易习惯。 5. 市场给机会。交易员的所有盈利都是市场的馈赠。

By dumengru
20241121 如果犯错不可避免

20241121 如果犯错不可避免

一个有趣的现象,交易员有时会在明知是错的情况下去犯错。 原因很简单,当你数次陷入假突破陷阱之后,你还会相信真的突破来临嘛?如果恰好你通过抄底摸顶获得了大幅盈利,当真的突破来临时,你就会不假思索地再次抄底摸顶,从而使自己身处险境。 有人会说,如果不确定是否真突破,那我不去做不就可以了么?你或许可以抵挡住一次两次诱惑,但是当你多次“准确”预测行情,而又没有参与的时候,你就会后悔,懊恼,甚至是痛恨自己“胆小如鼠”。 这就是交易中的诱惑与陷阱,也就是人们常说的贪婪与恐惧。 成功的主观交易员与其说是战胜了市场,不如说是战胜了自己。人性的弱点无法克服,如果犯错不可避免,那该怎么办呢? BTC交易 今天BTC终于突破了,在持续横盘震荡了数个交易日之后,在价格跌跌宕宕突破93000和94000之后,今天一举突破95000点并直接突破到97000点。 今天的交易就是非常典型的明知故犯错。 之前提到过BTC一直横盘,经常出现价格突破后立刻回调,也就是非常典型的假突破。我注意到BTC价格的低点和高点一次比一次高,因此理性观点是偏向多头的。但是自特朗普当选以来,BTC价格在不到15个交易日内

By dumengru
20241120 价格波动会影响交易者情绪

20241120 价格波动会影响交易者情绪

挣钱并不会让交易者感到更舒心,因为不管是盈利还是亏损,他都会犯错,而只要犯错,就不会感到舒心。——《股票作手回忆录》 我发现自己每隔一段时间就会出现一段低潮期,低潮期的感觉就是:内心十分抗拒交易,又忍不住查看行情,一旦看到行情波动又忍不住交易。 主要原因我认为是自己看不清楚市场方向。XAU从底部已经大幅反弹超过80美金,BTC不断冲击新高,USTEC也从底部有所反弹。没有明确的大方向导致在交易时总是惴惴不安。 与此同时,我的账户资金却大幅增长,为什么呢? 在账户本金只有500美元的情况下,我给自己定的目标是每天盈利20美元。由于我看不清楚大方向,因此当我达到这个目标之后总跟自己强调不要继续交易。尽管我内心十分抗拒,但是行情总是会走出一些极端价格,一些让我无法抗拒入场的价格。 由于黄金短期大幅反弹,所以我比较看空。 BTC低点不断抬升,不断创出新高后回落。我看多但从来不做多,并且总是在前高附近做空。 USTEC的趋势性比较强,V型反转也很多。 所以最近几笔交易比较有意思:当我看到XAU和BTC同时出现在前高附近时,我就会同时做空二者;当我看到XAU在前高附近而USTEC大

By dumengru