Somkait Somsanitungkul 资金管理
#include <Expert\Money\MoneyFixedMargin.mqh>
您好
您提到的文件是 MQL5 IDE 附带的。这里 和这里 有如何使用向导的指南。
感谢您的阅读。
MQL5 Wizard: Creating Expert Advisors without Programming
- www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
Israel Goncalves Moraes De Souza 超出范围(191,38)
我也遇到了同样的问题。错误源于 _c[] 向量未被复制。就像 _ma[0] 代表移动平均线的最新 K 线价格一样,_c[] 代表最新的收盘价。在几行代码之后它会被更新,看来是某个地方漏了。
double CSignalCNN::GetOutput() { int _index = 5; matrix _inputs; vector _ma, _h, _l, _c; _inputs.Init(m_input_size, m_input_size); for(int g = 0; g < m_epochs; g++) { for(int h = m_train_set - 1; h >= 0; h--) { _inputs.Fill(0.0); _index = 0; for(int i = 0; i < m_input_size; i++) { for(int j = 0; j < m_input_size; j++) { if(_ma.CopyIndicatorBuffer(m_ma[_index].Handle(), 0, h, __KERNEL + 1) && _h.CopyRates(m_symbol.Name(), m_period, 2, h, __KERNEL + 1) && _l.CopyRates(m_symbol.Name(), m_period, 4, h, __KERNEL + 1) && _c.CopyRates(m_symbol.Name(), m_period, 8, h, __KERNEL + 1)) { _inputs[i][j] = _c[0] - _ma[0]; _index++; } } } // //Print(" 输入为:\n", _inputs); CNN.Set(_inputs); CNN.Pad(); //Print(" 填充后的输入为:\n", CNN.inputs); CNN.Convolve(); CNN.Activate(); CNN.Pool(); // 目标价作为最终价格变动,其中每组矩阵分别代表看涨、看跌或震荡行情 // 暗示最终将使用矩阵: // 价格大幅变动 // 低价变动 // 收盘价变动, // 分别 // // 每列中的价格变动分别对应 1 根 K 线、2 根 K 线和 3 根 K 线 // 且每一行中的价格变动,是根据所应用价格与其他应用价格的不同权重计算得出的 // 最高价的计算方式包括:仅最高价(H);(最高价 + 最高价 + 收盘价)/3 (HHC);以及 (最高价 + 收盘价)/3 (HC) // 其中“低点”指:仅低点(L);(低点 + 低点 + 收盘价)/3 (LLC);以及 (低点 + 收盘价)/3 (LC) // 而收盘价为:仅收盘价(C);(最高价 + 最低价 + 收盘价 + 收盘价)/3(HLCC);以及(最高价 + 最低价 + 收盘价)/3(HLC) // // 此处的假设是: // “高点”中的较大数值表明看涨 // 低位的大数值意味着看跌 // 波动幅度小且行情紧凑,意味着市场处于震荡震荡行情 matrix _targets[]; ArrayResize(_targets, __KERNEL_SIZES.Size()); for(int i = 0; i < int(__KERNEL_SIZES.Size()); i++) { _targets[i].Init(__KERNEL_SIZES[i], __KERNEL_SIZES[i]); // for(int j = 0; j < __KERNEL_SIZES[i]; j++) { if(i == 0)// “看涨情绪”的高点 { _targets[i][j][0] = _h[j] - _h[j + 1]; _targets[i][j][1] = ((_h[j] + _h[j] + _c[j]) / 3.0) - ((_h[j + 1] + _h[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_h[j] + _c[j]) / 2.0) - ((_h[j + 1] + _c[j + 1]) / 2.0); } else if(i == 1)// “看跌”情绪的低点 { _targets[i][j][0] = _l[j] - _l[j + 1]; _targets[i][j][1] = ((_l[j] + _l[j] + _c[j]) / 3.0) - ((_l[j + 1] + _l[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_l[j] + _c[j]) / 2.0) - ((_l[j + 1] + _c[j + 1]) / 2.0); } else if(i == 2)// 因“whipsaw”而平仓 { _targets[i][j][0] = _c[j] - _c[j + 1]; _targets[i][j][1] = ((_h[j] + _l[j] + _c[j] + _c[j]) / 3.0) - ((_h[j + 1] + _l[j + 1] + _c[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_h[j] + _l[j] + _c[j]) / 2.0) - ((_h[j + 1] + _l[j + 1] + _c[j + 1]) / 2.0); } } // //Print(" 目标: " + IntegerToString(i) + " 如下:\n", _targets[i]); } CNN.Get(_targets); CNN.Evolve(m_learning_rate); } } // For 循环结束 _index = 0; _h.CopyRates(m_symbol.Name(), m_period, 2, 0, __KERNEL + 1); _l.CopyRates(m_symbol.Name(), m_period, 4, 0, __KERNEL + 1); _c.CopyRates(m_symbol.Name(), m_period, 8, 0, __KERNEL + 1); for(int i = 0; i < m_input_size; i++) { for(int j = 0; j < m_input_size; j++) { if(_ma.CopyIndicatorBuffer(m_ma[_index].Handle(), 0, 0, __KERNEL + 1)) { _inputs[i][j] = _c[__KERNEL] - _ma[__KERNEL]; _index++; } } } CNN.Set(_inputs); CNN.Pad(); CNN.Convolve(); CNN.Activate(); CNN.Pool(); double _long = 0.0, _short = 0.0; if(CNN.output[0].Median() > 0.0) { _long = fabs(CNN.output[0].Median()); } if(CNN.output[1].Median() < 0.0) { _short = fabs(CNN.output[1].Median()); } double _neutral = fabs(CNN.output[2].Median()); if(_long + _short + _neutral == 0.0) { return(0.0); } return((_long - _short) / (_long + _short + _neutral)); }
替换此方法
Tobias Johannes Zimmer #:
我遇到了同样的问题。错误源于 _c[] 向量未被复制。就像 _ma[0] 代表移动平均线的最新柱状价格一样,_c[] 代表最新的收盘价。几行代码之后它本应被更新,但看起来不知怎么漏掉了。
替换此方法
请参阅已更正的附件。
附加的文件:
SignalWZ_23_.mqh
13 kb
新文章 您应当知道的 MQL5 向导技术(第 23 部分):CNNs已发布:
卷积神经网络是另一种机器学习算法,倾向于专门将多维数据集分解为关键组成部分。我们看看典型情况下这是如何达成的,并探索为交易者在其它 MQL5 向导信号类中的可能应用。
我们继续本系列,在其中看看机器学习和统计的思路,鉴于 MQL5 向导提供的快速测试和原型设计环境,令交易者能从中受益。目标仍然是在一篇文章内考察单一思路,至于这段节选,我最初认为这至少需要 2 个篇幅,不过看起来我们能够将其压缩到一个篇幅。卷积神经网络(CNN)顾名思义,借助内核,它可以在卷积中处理多维数据。
这些内核承载网络权重,且像多维输入数据一样,都采用典型的矩阵格式。与输入数据相比,它们的整体维度较小,并且在前馈期间遍历输入数据矩阵,正如我们将在下面看到,每次迭代本质上都是跨输入数据轮转。正是这个“轮转”赋予了“卷积”这个名字。
是故对于本文,我们将讲述 CNN 中涉及的关键步骤,构建一个简单的 MQL5 类来实现这些步骤,将该类集成到自定义的 MQL5 向导信号类当中,最后会配以由该信号类组装而成的智能系统执行测试。
作者:Stephen Njuki