English Русский Deutsch 日本語
preview
从新手到专家:使用 MQL5 制作动画新闻标题(六)—— 新闻交易的挂单策略

从新手到专家:使用 MQL5 制作动画新闻标题(六)—— 新闻交易的挂单策略

MetaTrader 5交易 |
37 0
Clemence Benjamin
Clemence Benjamin

目录:



概述

在之前的 EA 交易中集成预警功能是一个重大进步,使其转变为手动新闻交易者的宝贵工具。然而,一个关键的限制仍然存在:EA 尚未实现交易执行的自动化。今天,我们的目标是通过整合 CTrade 类来实现基于新闻事件的自动交易,从而解决这一差距。

我们项目的早期版本已经提供了几个优点,每个新功能都是为了解决一个特定的问题并增强 EA 的实用价值。以下是对其中一些好处的快速总结:

  • 便捷访问新闻日历:用户可以直接在图表上查看即将发生的经济事件,而不会中断他们的交易或分析工作流程。
  • 实时经济新闻头条:我们整合了 Alpha Vantage 作为新闻来源,提供最新的新闻头条,让交易者随时了解最新动态。
  • 内置指标洞察:使用 MQL5 API,我们能够获取技术指标数据,并在专用图表通道中显示量身定制的见解。
  • 人工智能洞察:我们连接了本地 AI 模型来生成市场洞察,增加了一个复杂的分析维度,尽管这带来了一些影响通道滚动速度的放缓。

有了这些坚实的基础,我们现在可以迎接下一个挑战:在 EA 中自动将新闻信号转化为实际的交易执行。



挂单整合策略概述

所有 EA 交易的成败最终都取决于其交易时机和方式的逻辑。到目前为止,我们的 News Headline EA 项目主要专注于为经济事件提供强大的视觉体验和预警系统。我们构建了事件通道、新闻滚动条,甚至还有在图表上滚动显示的 AI 驱动的洞察信息。然而,所有这些工具虽然有用,但仍然让交易者负责手动执行交易。下一个合乎逻辑的发展方向是将这款 EA 交易转变为一个自主交易引擎,它不仅能够提供信息,还能在机会出现时果断采取行动。

我们正准备整合挂单交易逻辑,以捕捉高影响力经济新闻经常引发的波动。这个规划阶段至关重要,因为如果没有一个稳健的蓝图,实施很容易变得混乱或容易出错。

EA 交易中交易逻辑的必要性

纯粹的信息型 EA(无论视觉效果多么令人印象深刻)仍然是被动的。要实现交易自动化,EA 需要明确的规则:

  1. 时机:何时进行交易。
  2. 方向:做多、做空还是保持中性?
  3. 订单类型:是下市价单、限价单还是止损单。
  4. 风险控制:如何设定止损和止盈水平。
  5. 清理逻辑:如何在情况发生变化时删除或修改订单。

就我们而言,我们特意选择基于时间的条件来执行交易。这特别适合新闻交易,因为新闻发布的时间是提前知道的。与纯粹依赖图表形态或指标信号的设置不同,这种方法使用预定的新闻日历作为交易活动的主要触发器。

策略背后的市场观察

经过数月的观察和测试,出现了一致的市场行为:市场经常在主要经济数据发布前几分钟出现波动性收缩。由于交易者和机构都在场外等待新的信息,流动性可能会略微减弱。然后,随着新闻的传播,价格经常出现快速的飙升或暴跌,这是由人类交易者和算法系统对新数据的反应共同驱动的。

这种新闻事件后的剧烈波动可能表现为:

  1. 如果消息出乎意料地利好,则价格将向上突破。
  2. 如果消息对市场造成负面影响,则可能出现下跌。

这种波动性激增为挂单策略创造了肥沃的土壤,这些策略旨在抓住市场爆发的任何一方。

挂单蓝图

我们应对新闻事件的交易策略将依赖于两个止损挂单:

  1. 设置一个买入止损单,位置在近期市场价格之上,用于捕捉上涨突破。
  2. 设置一个卖出止损单,放在市场价格下方,用来捕捉下跌行情。

我们打算在预定的新闻发布时间前指定分钟数内下达这些订单(由我们的输入 InpOrderMinutesBefore 定义)。这样可以让 EA 有时间准备订单,同时最大限度地减少受到虚假市场噪音的影响。

逻辑很巧妙:

如果该消息的影响力足以引发决定性的价格波动,那么这些挂单中的一个应该会被触发,从而使我们能够顺势而为。一旦一个订单成交,相反的订单就会被删除,以避免陷入反转的陷阱。

如果没有删除步骤,这两个订单可能会在短时间内连续触发 —— 这种现象被称为“锯齿状”或“快速成交”的价格走势。这可能会导致两笔交易均以亏损关闭,从而破坏策略的目的。

新闻交易中的风险管理

新闻交易具有独特的风险。与逐渐演变的传统体系不同,经济新闻可能导致货币对在几毫秒内跃升几十个点。点差扩大,出现滑点,价格出现跳空。

在我们计划的 EA 中,风险管理不会是事后考虑的因素,而是一项核心设计原则。

我们在策略中构建了多层保护措施:

1.固定止损和止盈距离

我们将 InpStopLossPips 和 InpTakeProfitPips 作为输入参数公开。这使得我们能够精确控制价格在我们减少损失之前对我们不利的程度,以及我们的目标是让利润跑多远。例如,10 点的止损和 20 点的止盈可以形成 2:1 的受控回报风险比。

2.点差和最小价格变动单位补偿

下单前,我们会计算当前点差并将其计入挂单的偏移量中。这样可以防止点差仅仅因为买卖价差的波动就“意外地”触发我们的订单,从而保持我们预期入场价位的完整性。

3.动态点数计算

与 EURUSD (0.0001) 相比,USDJPY 等货币对的点数约定不同 (0.01)。我们的 EA 会读取交易品种的最小价格变动单位和位数,确保每个交易工具的止损、止盈和挂单价格水平都能正确计算。

4.清理未触发的订单

一旦一笔交易触发,EA 会立即删除相反方向的订单。这样可以防止在混乱的峰值期间出现双重成交。

所有这些措施旨在确保我们的 EA 能够像经验丰富的交易员一样进行交易,而不会惊慌失措或冲动行事。在像非农就业数据(NFP)星期五这样波动剧烈的市场环境下,这些保护措施至关重要。

了解 CTrade 的作用

我们计划的核心是 CTrade 类,它是 MQL5 底层交易函数的高级封装。如果没有 CTrade,我们将被迫手动构建每个 MqlTradeRequest 和 MqlTradeResult 结构,处理返回码,并管理数十种错误场景。CTrade 负责:

  • 使用正确结构封装订单。
  • 检查交易品种权限和预付款要求。
  • 通过偏差设置处理滑点。
  • 跟踪单号以便后续修改或删除。
  • 日志记录和错误处理。

实际上,我们无需编写大量的请求逻辑,只需调用:

trade.BuyStop(volume, price, symbol, stoploss, takeprofit);
trade.SellStop(volume, price, symbol, stoploss, takeprofit);
trade.OrderDelete(ticket);

它速度更快、更清洁,并大大降低了出现漏洞的风险。

我们的整合蓝图

综上所述,我们的挂单整合将遵循以下概念流程:

1.扫描经济日历,确定下一个高影响事件。

2.计算当前时间与事件发生时间之间的时间差。

3.在新闻发布前一定分钟数内设置挂单:

  • 根据最近的 M1 开盘价计算参考价格。
  • 加上或减去偏移点数,为点差做调整。
  • 计算止损价和止盈价。

4.使用 CTrade 方法发送买入止损单和卖出止损单。

5.监控未平仓位:

  • 一旦某个订单触发,立即删除反向订单。

6.处理风险管理:

  • 采用固定的 SL/TP 距离。
  • 如果不再需要挂单,务必取消。

这种设计确保我们为闪电般的快速行动做好准备,同时将风险和暴露控制在可控范围内。

总而言之,我已经详细介绍了整个开发过程,重点介绍了将新闻驱动交易逻辑集成到我们的 EA 中涉及的每个步骤。为了补充这一解释,我还提供了一个流程图,直观地描绘了开发阶段和在此过程中要采取的关键决策。这为任何希望了解在 MQL5 中实现此类策略的技术和实践方面的人提供了全面的概述。

开发流程图

开发流程图

以上概念为下一阶段奠定了基础:实际的 MQL5 实现。在接下来的阶段,我们将把这个计划转化为代码,连接 CTrade 逻辑,将其集成到我们的计时器循环中,并彻底测试 EA 在实时新闻事件中的表现。

正是在这里,我们的 News Headline EA 从纯粹的信息工具转变为强大的自主交易系统,能够在毫秒内做出反应,抓住任何人工交易者都无法如此迅速抓住的机会。


实现

这一阶段侧重于实际的集成过程,提供详细的代码分解和解释,以确保清晰的理解。在这里,我们引入 CTrade 类,我们通过在 EA 代码的顶部包含其头文件来将其集成进来,如下面的突出显示片段所示。花点时间浏览每个代码片段及其附带的解释,以深入了解集成的工作原理以及 EA 中不同组件的连接方式。

1.交易设置和配置

在我们标准的图表绘制画布和 AI 洞察变量之后,我们声明了一个 CTrade 交易对象以及一些全局变量:ordersPlaced、nextEventTime 和两个单号标识符(ticketBuyStop、ticketSellStop)。该模块与我们的成交量、点差、止损/止盈(以点为单位)以及 “minutes before” 设置等输入项并列。通过将这些集中到 “ORDER EXECUTION INPUTS” 下方,并创建一个 CTrade 实例,我们利用了 MQL5 交易库的高级方法,同时保持所有参数均可从 EA 的输入对话框进行自定义。

#include <Trade/Trade.mqh>
//…
CTrade trade;
bool   ordersPlaced    = false;
datetime nextEventTime = 0;
ulong  ticketBuyStop   = 0;
ulong  ticketSellStop  = 0;
//--- ORDER EXECUTION INPUTS ---
input int    InpOrderMinutesBefore  = 3;    
input double InpOrderVolume         = 0.10; 
input double InpStopOffsetPips      = 5.0;  
input double InpStopLossPips        = 20.0; 
input double InpTakeProfitPips      = 40.0; 

2.确定下一个新闻事件

在 ReloadEvents() 中,在获取并排序今天的高/中/低影响事件后,我们通过查找用户已启用交易的重要性等级中的最早时间戳来计算 nextEventTime。将 ordersPlaced 设置为 false,并在每次事件列表刷新时将两个单号变量都清零,可保证每个新的新闻发布周期都从零开始 —— 没有残留的标记或孤立的挂单。

void ReloadEvents()
{
  // … calendar fetching and sorting …

  // pick next event only from enabled levels
  datetime th = INT_MAX;
  if(InpTradeHigh && ArraySize(highArr)>0) th = MathMin(th, highArr[0].time);
  if(InpTradeMed  && ArraySize(medArr)>0)  th = MathMin(th, medArr[0].time);
  if(InpTradeLow  && ArraySize(lowArr)>0)  th = MathMin(th, lowArr[0].time);
  nextEventTime = (th==INT_MAX ? 0 : th);

  // reset order flags
  ordersPlaced   = false;
  ticketBuyStop  = ticketSellStop = 0;
}

3.把握挂单窗口的时机

在 OnTimer() 中,我们将当前服务器时间(now)与 nextEventTime – InpOrderMinutesBefore*60 进行比较。一旦时钟进入该窗口期 —— 并且由于我们的 ordersPlaced 保护机制,每个事件仅发生一次 —— 我们便开始建立两个待处理的止损单(买入和卖出)。将“何时交易”与“如何交易”分开,可以保持我们的时机逻辑清晰,防止重复重新入场。

void OnTimer()
{
  datetime now       = TimeTradeServer();
  datetime placeTime = nextEventTime - InpOrderMinutesBefore*60;

  if(!ordersPlaced && nextEventTime>now && now>=placeTime)
  {
    // … compute prices and place orders …
    ordersPlaced = true;
  }

  // … rest of drawing, alerts, AI, etc. …
}

4.计算精确到点的价格并下单

为了计算符合每个交易品种最小价格变动单位的价格水平,我们获取 SYMBOL_POINT 并将一个 “pip” 表示为十个点(point) —— 即使是日元交叉盘也是如此。然后,我们通过 iBarShift + iOpen 找到目标时间戳处的确切 M1 烛形开盘价。入场、止损和止盈的偏移量均乘以点数,然后加到或减去烛形的开盘价。在发送订单之前,每个原始价格都会经过 NormalizeDouble(..., SYMBOL_DIGITS) 进行转换,以满足经纪商的精度要求。最后,我们调用 trade.SetExpertMagicNumber() 和 trade.BuyStop(...) / trade.SellStop(...) 。在底层,CTrade 类处理 OrderSend() 调用、结果检查和错误报告,因此我们的 EA 代码保持简洁。

// inside the placement block in OnTimer()
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pip   = point * 10.0;

// find the bar open at target time
int idx = iBarShift(_Symbol, PERIOD_M1, placeTime, false);
if(idx >= 0)
{
  double baseOpen = iOpen(_Symbol, PERIOD_M1, idx);
  double ask      = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double bid      = SymbolInfoDouble(_Symbol, SYMBOL_BID);
  double spreadPips = (ask - bid) / pip;

  double offsetP = (spreadPips + InpStopOffsetPips) * pip;
  double slP     = InpStopLossPips   * pip;
  double tpP     = InpTakeProfitPips * pip;

  double rawBuy  = baseOpen + offsetP;
  double rawSell = baseOpen - offsetP;
  double rawBsl  = rawBuy  - slP;
  double rawBtp  = rawBuy  + tpP;
  double rawSsl  = rawSell + slP;
  double rawStp  = rawSell - tpP;

  int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  double buyPrice  = NormalizeDouble(rawBuy,  d);
  double sellPrice = NormalizeDouble(rawSell, d);
  double buySL     = NormalizeDouble(rawBsl,  d);
  double buyTP     = NormalizeDouble(rawBtp,  d);
  double sellSL    = NormalizeDouble(rawSsl,  d);
  double sellTP    = NormalizeDouble(rawStp,  d);

  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10);

  ticketBuyStop  = trade.BuyStop (InpOrderVolume, buyPrice,  _Symbol, buySL,  buyTP) ? trade.ResultOrder() : 0;
  ticketSellStop = trade.SellStop(InpOrderVolume, sellPrice, _Symbol, sellSL, sellTP) ? trade.ResultOrder() : 0;
}

5.清理未触发订单

挂单下达后,EA 会继续轮询 PositionSelect(_Symbol) 。当我们的止损单变成有效仓位时,我们通过 PositionGetInteger(POSITION_TYPE) 检测已执行的仓位,然后对相反的单号调用 trade.OrderDelete() 。将其拆分为两个单独的语句(一个用于删除订单,一个用于将单号 ID 重置为零)使逻辑一目了然 —— CTrade 再次抽象了底层协议,确保我们的清理工作是可靠的。

// later in OnTimer()
if(ordersPlaced && PositionSelect(_Symbol))
{
  long ptype = PositionGetInteger(POSITION_TYPE);
  if(ptype==POSITION_TYPE_BUY && ticketSellStop>0)
  {
    trade.OrderDelete(ticketSellStop);
    ticketSellStop = 0;
  }
  if(ptype==POSITION_TYPE_SELL && ticketBuyStop>0)
  {
    trade.OrderDelete(ticketBuyStop);
    ticketBuyStop = 0;
  }
}

把所有内容串起来

通过对这些部分进行分层 —— 输入和全局设置、事件选择、时间安排、点数正确的价格计算、CTrade 支持的挂单放置和自动清理 —— 我们把一个主要以显示为中心的 EA 变成了一个完全新闻驱动的自动驾驶仪。Trade.mqh 标头提供了所有底层机制(订单格式、发送/修改/删除、单号/结果存储),使我们的 EA 能够专注于“做什么”(交易设置和事件时间),而不是“怎么做”(构建原始 MqlTradeRequest 结构)。为了方便起见,本文末尾提供了完整的集成 EA 源代码,每个部分都已拼接在一起,可以编译并加载到 MetaTrader 5 中。


测试

早期测试结果

2025.07.15 13:45:02.348  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]
2025.07.15 13:49:02.373  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: buy stop 0.10 USDJPY.0 at 147.951 sl: 147.740 tp: 148.351 [invalid price]
2025.07.15 13:49:02.374  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.929 sl: 148.140 tp: 147.529 [invalid price]

在早期测试阶段,EA 在尝试下单挂单买入止损单和卖出止损单时遇到了几个“无效价格”错误——从日志条目中可以明显看出,例如 CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl:148.128 tp:147.522 [invalid price].这些错误源于初始实施中的两个主要疏忽:首先,EA 没有充分处理特定交易品种的点数和最小价格变动单位;其次,它试图根据实时买卖报价计算价格,而实时买卖报价波动迅速,可能会违反经纪商的限制,例如最小止损位距离。为了解决这个问题,我们修改了逻辑,以参考新闻事件发生前几分钟最近完成的 M1 蜡烛图的开盘价。这为计算待定入场价格提供了一个更稳定、更合规的基准。

此外,我们使用 SymbolInfoDouble(SYMBOL_POINT) 动态检索交易品种的点数大小,并使用最小价格变动单位缩放来计算点值 —— 确保像 USDJPY 这样的工具的一致性,该工具通常使用小数点后 3 位数字 (0.001),而像 EURUSD 这样的工具使用 5 位数字 (0.00010)。所有计算出的价格也使用 NormalizeDouble (价格, 数字) 进行标准化,以匹配交易品种的精度。这项双重改进 —— 稳定的参考价格和正确的价格格式 —— 确保所有挂单现在都落在有效范围内,彻底解决了无效价格错误,并使 EA 在任何货币对上都安全且具有适应性。

最终测试

在测试过程中,我重点关注了一个即将到来的重大事件:英国央行行长贝利的讲话,该讲话在 EA 的日历显示中以“红色新闻”的形式出现。在拍摄测试图像时,EA 正确显示了该事件的“剩余 5 分钟”倒计时。考虑到我们的逻辑设定是在预定发布前 3 分钟下挂单,我特意又等了 2 分钟,看看 EA 是否会按预期启动交易设置。

弹出预警窗口,通知您将在 5 分钟后收到即将发生的事件通知

默认配置会在活动开始前 3 分钟准时下单。然而,对这类新闻交易 EA 进行实际测试面临着独特的挑战,尤其是因为 MetaTrader 5 策略测试器并不完全适合模拟实时经济日历事件。策略测试器的工作原理是重放市场行情,但它既不了解实时日历数据,也不像实际操作那样支持异步 HTTP 请求。这意味着我们无法在测试器中“快进”到新闻稿发布,也无法在真实的时间条件下验证 EA 的完整流程(从获取新闻标题到进行交易)。

测试 EA 的挂单下单功能

为了克服这一限制,一种实用的测试技术是调整输入参数,该参数定义了在新闻事件发生前多少分钟下达挂单。例如,假设 50 分钟车程外有一个真实的新闻事件,而你不想等待近一个小时。或者,您可以暂时将待处理订单的提前期从默认的 3 分钟设置为 45 分钟。这样,你就可以测试 EA 是否能及时触发其下单逻辑,而无需长时间等待。如果它在使用修改后的时间偏移量时能够成功下单,那么您就可以确信,EA 的自动化逻辑在实际场景中也能在事件发生前更准确地运行。

在测试过程中,我尝试将止损和止盈设置为 20 点,但我发现这对于我的喜好和交易账户规模来说有点大了。对于许多散户交易者来说,10 个点的止损可能是一个更保守、更实际的选择,具体取决于账户余额和风险承受能力。最终,EA 足够灵活,可以让您调整止损和止盈水平,以适应您的个人风险管理策略。



结论

从一个简单的新闻和事件显示系统开始,我们现在已经发展到一个复杂的新闻交易和显示解决方案,围绕一个强大的挂单策略构建。通过这段旅程,我们亲身体验到了 MQL5 的卓越灵活性,它可以与外部系统无缝集成,包括人工智能引擎、新闻 API 以及平台强大的内置分析工具。这个过程简直令人惊叹,它展现了 MQL5 为算法交易提供的几乎无限的可能性。

我们的 EA 已经发展成为一款近乎完美的交易新闻软件,它结合了实时图表显示、自动交易逻辑和严格的风险管理。借助可自定义的预设,交易者可以微调设置以发现最佳配置,并且可以将 EA 部署在虚拟专用服务器 (VPS) 上,使其全天候作为可靠的新闻交易伙伴运行。

在当前版本中,我们在没有设置新闻 API 密钥和没有连接到 AI 服务器的情况下进行了测试。这种深思熟虑的选择使我们能够完全专注于完善交易逻辑,确保稳定性,避免测试期间的性能过载。即使没有这些集成,我们也观察到新闻事件处理和交易设置的流程平稳可靠。

对于那些有兴趣进一步扩展 EA 的人,我已附上设置本地 AI 模型所需的必要文件。要深入了解该配置,请重新阅读我们详细介绍步骤的文章

虽然 EA 的功能已经很丰富了,但仍有很大的改进空间。如果时间和机会允许,我们计划发布具有更高级功能的未来版本。

我诚挚地邀请您提供反馈、意见和测试结果。我们可以共同进一步完善这一工具,并继续探索基于新闻的算法交易的前沿。


关键经验

经验描述
使用 OnTimer 进行事件处理使用 OnTimer() 函数可以让您的 EA 交易按照固定的时间表执行操作,例如检查新闻时间、更新图形或管理交易,而无需依赖新的报价。
使用 CTrade 进行订单管理CTrade 类简化了下单、修改和关闭订单的操作,无需编写底层交易请求代码,从而确保了更稳定、更易于维护的交易逻辑。
动态数组管理在 MQL5 中处理数组(例如调整大小和排序)对于管理事件列表、价格数据或其他动态数据集至关重要。
字符串处理与解析在 EA 交易中集成 Web API 或构建自定义用户消息时,解析 JSON 或文本响应、修剪字符串和处理子字符串至关重要。
风险管理原则正确计算手数、止损和止盈距离对于保持账户健康以及减少新闻事件期间不可预测的价格飙升风险至关重要。
WebRequest 集成MQL5 允许向外部服务器发送 HTTP/HTTPS 请求,从而实现获取新闻标题或 AI 预测等功能,为交易策略添加强大的外部数据。
图形画布绘制CCanvas 和类似类允许您在图表上绘制自定义视觉效果,从滚动文本到图形,从而可以直接在 MetaTrader 5 图表中构建高级 UI 叠加层。
交易品种特定精度每个交易品种的点数、小数点大小或小数位数可能不同。务必调整价格偏移和止损/止盈等计算,使其与交易品种的精度相匹配,以避免订单错误。
幻数幻数可以唯一标识来自特定 EA 的订单,从而安全地管理仓位,避免与其他 EA 或手动交易发生冲突。
调试和日志记录使用 Print()、Alert() 和日志记录机制有助于在开发和实时交易过程中追踪错误并观察 EA 的行为。


附件

文件名版本描述
News Headline EA.mq51.10MetaTrader 5 EA 交易结合了经济日历事件、Alpha Vantage 新闻标题、技术指标洞察、AI 驱动的市场洞察、警报、推送通知和自动新闻交易执行以及动态点数处理。
download_model.py
该 Python 脚本用于下载并保存生成 AI 市场洞察所需的机器学习模型。确保 EA 的 AI 组件在本地拥有进行预测所需的必要模型文件。
serve_insights.py本地运行的 Python Web 服务,接受来自 EA 的 HTTP POST 请求,并以 AI 生成的市场洞察进行响应。充当 EA 交易中实时洞察通道数据的 AI 后端。

返回内容目录

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/18754

附加的文件 |
download_model.py (0.28 KB)
serve_insights.py (1.77 KB)
MQL5自优化智能交易系统(第八部分):多策略分析(2) MQL5自优化智能交易系统(第八部分):多策略分析(2)
欢迎继续阅读本系列文章,我们将把前两个交易策略合并为一个集成交易策略。本文将展示多种合并多个策略的可行方案,并介绍如何控制参数空间,确保即使在参数数量增加的情况下,仍能进行有效的优化。
在 MQL5 中实现其他语言的实用模块(第 02 部分):构建受 Python 启发的 REQUESTS 库 在 MQL5 中实现其他语言的实用模块(第 02 部分):构建受 Python 启发的 REQUESTS 库
在本文中,我们实现了一个类似于 Python 中 requests 模块的功能,以便更轻松地使用 MQL5 在 MetaTrader 5 中发送和接收 Web 请求。
新手在交易中的10个基本错误 新手在交易中的10个基本错误
新手在交易中会犯的10个基本错误: 在市场刚开始时交易, 获利时不适当地仓促, 在损失的时候追加投资, 从最好的仓位开始平仓, 翻本心理, 最优越的仓位, 用永远买进的规则进行交易, 在第一天就平掉获利的仓位,当发出建一个相反的仓位警示时平仓, 犹豫。
您应当知道的 MQL5 向导技术(第 61 部分):结合 ADX 和 CCI 形态进行监督学习 您应当知道的 MQL5 向导技术(第 61 部分):结合 ADX 和 CCI 形态进行监督学习
ADX 振荡器和 CCI 振荡器是趋势跟踪和动量指标,可在开发智能系统时配对。我们考察如何使用机器学习的三大主要训练模式来将其系统化。向导汇编的智能系统令我们能够评估这两个指标所呈现的形态,我们从考察如何在监督学习中应用这些形态开始。