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

书籍地址:https://www.mql5.com/zh/neurobook 源码地址:https://www.mql5.com/zh/code/48097

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
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
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
MQL5算法交易的神经网络-001数据处理

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

MQL5算法交易的神经网络-001数据处理

挑选指标数据要考虑两点:1. 指标数据量级不同,不具可比性。2. 指标数据存在相关性。 数据处理 准备ZigZag指标数据作为参考值(5分钟周期,参数设置为48,1,47,即未来4H的ZigZag极值),准备各类指标数据和价格数据。 将2周期后的ZigZag极值与当前Close差值作为Target2(Distance),Target2是否大于等于0作为Target1(Direction)。其他指标都与Close做差值处理数据。 计算相关性 计算所有指标与Target1和Target2的相关性,排除相关性较低的指标(ATR)。 挑选出相关性较高的指标RSI,然后计算与剩余指标间的相关性。挑选出与RSI相关性最低的指标MACD,计算剩余指标与MACD的相关性。 排除同时与RSI和MACD相关性都较高的指标SAR,Bands等。 最终筛选出指标RSI和MACD。 进一步检查指标 统计筛选后的指标非线性值(Pow)与Target间的相关性,选择相关性最高的指标非线性值。 统计筛选后的指标偏移值(Shift)与Target间的相关性,选择相关性最高的指标偏移值。 巧

By dumengru