dumengru

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

书籍-MQL5算法交易的神经网络

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
MQL5算法交易的神经网络-007卷积神经网络

书籍-MQL5算法交易的神经网络

MQL5算法交易的神经网络-007卷积神经网络

与全连接的感知器相比,卷积网络有两种新型层:卷积(滤波器)和池化(子采样)。指定的层旨在突出主要组件并过滤掉原始数据中的噪声,同时降低数据的维度(体积),然后将其馈送到全连接的感知器中进行决策。根据要解决的任务,可以一致地使用几组交替的卷积层和子采样层。 卷积层负责识别源数据集中的对象。在这一层中,使用一个过滤器对原始数据进行数学卷积的顺序操作,充当卷积核。 池化层CNeuronProof 初始化,不需要激活函数,权重和优化器等内容。 前向传播,如果采用最大池化,使用 array.Max(1) 计算每行的最大值,并将其保存到 m_cOutputs 中;如果采用平均池化,使用 array.Mean(1) 计算每行的平均值,并将其保存到 m_cOutputs 中。 计算隐藏层梯度,如果采用最大池化,遍历窗口中的每个元素,如果元素值等于输出值 out,则将梯度 gradient 加到 inputs_

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

书籍-MQL5算法交易的神经网络

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

输入参数 指定包含训练数据集的文件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

By dumengru
MQL5算法交易的神经网络-005验证神经网络

书籍-MQL5算法交易的神经网络

MQL5算法交易的神经网络-005验证神经网络

创建神经网络 创建layers指针,是CArrayObj类型。 创建输入层,先创建CLayerDescription指针,然后填充属性,输入层的神经元数量是BarsToLine,其他参数为空或0。 创建输入层,先创建CLayerDescription指针,然后填充属性,输入层的神经元数量是BarsToLine,其他参数为空或0。最后将输入层指针添加到layers中。 创建隐藏层,神经元数量是输入层10倍,然后填充属性,最后将隐藏层指针添加到layers中。 创建输出层,神经元数量是1,然后填充属性,最后将隐藏层指针添加到layers中。 所有网络层创建好之后创建神经网络:net.Create 数据验证 创建CBufferType 对象 pattern,其大小为1 x BarsToLine,然后填充随机数据。 经过前向传播,并获取结果etalon_result。 将etalon_result的第一个元素进行微小变化(+delta),然后进行反向传播。 获取计算结果:梯度,权重和权重梯度。 验证输入数据梯度。 验证权重梯度。 清理内存。 验证:误差值在小于1

By dumengru
20241119 耐心等待机会出现

交易日记

20241119 耐心等待机会出现

只要你经不住手痒做出愚蠢的操作,就总会有一些错误萦绕在你的周围。—《票作手回忆录》 我对黄金一直是看多的,以至于之前一波下跌几乎没有参与。近两日,黄金止住跌势,开始大幅反弹,我的账户也出现了大幅盈利。 错误的操作,自然也是有的。有那么一种行情,当你看到时会忍不住重仓入场。除了仓位有些重,我在黄金上的操作还是比较顺利的。 与此相对,在其他品种上的操作就不那么顺利。 交易USTEC指数 连续两天,我在USTEC指数上都被套住了,这说明白天似乎不是交易美指的一个合适时间点。 交易BTC 今天在BTC上又遇到了假突破,上一次BTC上的假突破导致我爆仓的经历仍旧历历在目。 今天当价格到达阻力位时,一开始我就有防备心里的,然而还是被市场的波动教育了一番。 我非常耐心的等待确认突破失败,然后入场。 接着价格高位横盘,当价格从高位回落我更加确信是假突破,然后加仓了。 然后价格继续高位横盘,慢慢就突破了,我立刻反手,结果不到1分钟的时间价格就回落了。 我再次确认是假突破,然后加仓反手,当账户由亏转盈的时候立刻止盈离场了。 可能是脑子比较清醒,更重要的是市场给机会,没有重蹈覆

By dumengru
20241118 时间和仓位是天敌

交易日记

20241118 时间和仓位是天敌

每个人都有自己的路要走。 阅读过一些交易大师的经典书籍,比如《股票做手回忆录》,《海龟交易法则》,也看过其他一些零碎的交易经验。在止盈这方面有很多前辈告诫:平掉亏损,让利润奔跑。 我也曾告诫自己给盈利多一点耐心,结果往往适得其反。因为在短线交易中,行情经常会有回调。尽管长期趋势非常明显,走势图看起来相当丝滑,但是在短期走势图中可能存在很大的回调,这些回调往往难以承受甚至足以致命。 作为交易领域的小白,自然需要向大师汲取经验,但是每个人的交易市场,交易品种,持仓规模,交易频率,资金杠杆等都不一样。一些基本原则自然不能违背,比如:“因亏损而增加保证金”,但是很多操作手法还是需要自己细细打磨。 我曾无数次因为想过“让利润奔跑”,结果换来的却是“浮盈变浮亏”,一旦出现亏损,便要面临抉择:止损,加仓或等待趋势恢复。 止损就是慢性死亡,一个成熟的交易者必不会轻易设置止损,无数经验表明,止损是造成账户资金缩水最重要的原因。如果你设置了一个止损单,往往发现价格还是那个价格,钱却没了。很多交易者爆仓的原因是重仓而不是止损。 加仓虽然可以帮助自己在短期内快速脱离浮亏,但是也容易爆仓。无数交易前

By dumengru
MQL5算法交易的神经网络-004创建样本

书籍-MQL5算法交易的神经网络

MQL5算法交易的神经网络-004创建样本

创建指标 ZigZag指标:参数48, 1, 47。 RSI指标:参数12。 MACD指标:参数12, 48, 12。 ZigZag指标作为参考值需要多获取500条数据。 数据处理 倒序遍历ZigZag指标,将ZigZag指标极值与Close的差值作为target2表示预测的幅度,将target2符号作为target1,表示预测的方向。将MACD的main和signal差值作为指标macd_delta。 归一化 计算main_norm:macd_main绝对值的最大值 计算sign_norm:macd_signal绝对值的最大值 计算delt_norm:macd_delta绝对值的最大值 遍历数据并将macd数据归一化,RSI指标处理:rsi = (rsi - 50)/50 生成样本 每个样本包含BarsToLine=40根K线数据。 随机生成测试集索引,占比0.2。 将Target,指标等数据分别保存到测试集和训练集文件中,每行包含40根K线数据。

By dumengru
MQL5算法交易的神经网络-003创建全连接层

书籍-MQL5算法交易的神经网络

MQL5算法交易的神经网络-003创建全连接层

创建opencl_program.cl文件保存OpenCL常用操作,创建CMyOpenCL对象处理OpenCL函数。创建SetOpenCL方法设置CMyOpenCL指针。 创建CActivation类处理激活函数。 创建CBufferType类作为动态数据缓冲区的管理接口,支持与OpenCL的交互,并提供各类矩阵操作功能。所有数组都采用CBufferType类型。 创建SetActivation方法设置激活函数。 创建SGDUpdate和AdamUpdate等方法更新权重。 创建FeedForward方法实现前向传播,创建GetOutputs 获取上一层神经元的输出状态。 创建CalcOutputGradient方法计算神经网络的误差梯度。创建GetGradients方法访问上一层的误差梯度。 创建CalcDeltaWeights 方法计算需要迭代的权重变化。 创建UpdateWeights更新权重。 创建Save、Load 和 Type方法保存加载和标识模型。 定义属性 m_cOpenCL:指向用于 OpenCL 技术的类实例的指针 m_cActivation

By dumengru
MQL5算法交易的神经网络-002定义神经网络

书籍-MQL5算法交易的神经网络

MQL5算法交易的神经网络-002定义神经网络

定义神经层描述 1. 考虑我们的网络有多少层神经元:至少包含输入层,输出层和隐藏层。 2. 考虑不同类型神经网络,并确定每层神经元数量。 3. 选择不同类型激活函数,同一层神经元使用相同的激活函数。 4. 选择不同类型优化器。 5. 确定Normalization样本大小和Dropout神经元的概率。 最终一个神经层描述定义如下 class CLayerDescription : public CObject { public: CLayerDescription(void); ~CLayerDescription(void) {}; //--- int type; // Type of neural layer int count; // Number of neurons in a layer int window; // S

By dumengru