从新手到专家:MQL5交易的必备之旅·综合运用
🧩

从新手到专家:MQL5交易的必备之旅·综合运用

(3/3)· 从能写第一行代码到能独立交付可运行系统,只差这套组合拳

进阶 第 3/3 篇
很多人把 MQL5 社区当资料库、把 AI 当代码生成器,却从没让两者在真实终端里跑通闭环。结果学了两年还在复制片段,遇到点差跳空就束手无策。本篇收尾直接给你一条能落地的综合路径。

用AI起手写出首个MT5日线判势脚本

做这个脚本的目标很直接:在MT5里跑一下,就让程序告诉我当前D1(日线)K线是偏多头还是偏空头。思路是先让对话式AI生成一段MQL5脚本模板并驻留上下文,再喂入「判定日线方向」的需求让其改写,避免从零手搓语法。 实测流程:从AI拿到代码后,打开MetaEditor,走「文件 > 新建 > 脚本」,命名后下一步到底。把自动生成的空骨架全删,贴上AI给的代码,点工具栏编译。若编译器零报错,脚本就会进导航器里的脚本目录。 把脚本拖到任意图表,它会基于D1数据输出方向结论。那次测试中程序一次编译通过,并判定D1 K线为看涨(多头倾向,非绝对信号)。外汇与贵金属波动剧烈,这类脚本仅作辅助参考,实盘仍须自担高风险。 下面这段是AI基于模板产出的初版代码,OnStart函数体尚空,仅搭好版权与版本骨架:

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//|                                                      MyFirstMQL5 Program.mq5 |
class=class="str">"cmt">//|                                     Copyright class="num">2024, MetaQuotes Ltd. |
class=class="str">"cmt">//|                                         [MQL5官方文档] |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#class="kw">property copyright "Copyright class="num">2024, MetaQuotes Ltd."
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.00"
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Script program start function                                      |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void OnStart()
  {
class=class="str">"cmt">//---
  
  }
class=class="str">"cmt">//+------------------------------------------------------------------+

◍ 在图上直接标出当日阴阳线状态

做日内方向过滤时,肉眼扫 K 线容易受影线干扰。写一段脚本,在 MT5 图表左上角用文字标出当前 D1 蜡烛是 Bullish 还是 Bearish,比看收盘价减开盘价直观得多。 脚本通过 iOpen(_Symbol, PERIOD_D1, 0) 与 iClose(_Symbol, PERIOD_D1, 0) 取当日开收价,用三元运算判定 closePrice >= openPrice 则为看涨、否则看跌。判定结果交给 DisplayCandleStatus 函数,以 OBJ_LABEL 文本对象渲染。 输入参数给了五个可调项:TextColor 默认 clrRed、FontSize 默认 20、AnchorCorner 默认 ANCHOR_LEFT_UPPER、X/Y_Offset 均默认 10。改 FontSize 到 14 能让标注在手机远程桌面里更不挡量价。 外汇与贵金属杠杆高,D1 阴阳只反映当日惯性,不能单独作为入场依据,须配合更小周期确认。

MQL5 / C++
class="macro">#class="kw">property copyright "Copyright class="num">2024, MetaQuotes Ltd."
class="macro">#class="kw">property link "[MQL5官方文档]
class="macro">#class="kw">property version "class="num">1.00"
class="macro">#class="kw">property strict
class=class="str">"cmt">// Input parameters for customizing the text display
class="kw">input class="type">color TextColor = clrRed;           class=class="str">"cmt">// Color of the text
class="kw">input class="type">int FontSize = class="num">20;                  class=class="str">"cmt">// Font size
class="kw">input ENUM_ANCHOR_POINT AnchorCorner = ANCHOR_LEFT_UPPER; class=class="str">"cmt">// Text anchor point
class="kw">input class="type">int X_Offset = class="num">10;                 class=class="str">"cmt">// X offset
class="kw">input class="type">int Y_Offset = class="num">10;                 class=class="str">"cmt">// Y offset
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Script program start function                                    |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void OnStart()
  {
   class=class="str">"cmt">// Get the opening price of the current day
   class="type">class="kw">double openPrice = iOpen(_Symbol, PERIOD_D1, class="num">0);
   class=class="str">"cmt">// Get the closing price of the current day
   class="type">class="kw">double closePrice = iClose(_Symbol, PERIOD_D1, class="num">0);
   class=class="str">"cmt">// Determine the candle status
   class="type">class="kw">string candleStatus = (closePrice >= openPrice) ? "Bullish" : "Bearish";
   class=class="str">"cmt">// Display the candle status on the screen
   DisplayCandleStatus(candleStatus);
  }
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Function to display the candle status on the screen              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void DisplayCandleStatus(class="type">class="kw">string status)
  {
   class="type">class="kw">string objName = "CandleStatusText";
   if(ObjectFind(class="num">0, objName) < class="num">0)
     {
      class=class="str">"cmt">// Create the text object if it doesn&class="macro">#x27;t exist
      ObjectCreate(class="num">0, objName, OBJ_LABEL, class="num">0, class="num">0, class="num">0);
      ObjectSetInteger(class="num">0, objName, OBJPROP_CORNER, AnchorCorner);
      ObjectSetInteger(class="num">0, objName, OBJPROP_XDISTANCE, X_Offset);
      ObjectSetInteger(class="num">0, objName, OBJPROP_YDISTANCE, Y_Offset);
      ObjectSetInteger(class="num">0, objName, OBJPROP_FONTSIZE, FontSize);
      ObjectSetInteger(class="num">0, objName, OBJPROP_COLOR, TextColor);
     }

「给日线标签实时改字」

在 MT5 的 MQL5 脚本里,日线状态标签不是画完就固定,关键在运行时用 ObjectSetString 去改 OBJPROP_TEXT。上面这段只露出收尾两行,但已经点出核心:图表 ID 用 0 代表当前图表,objName 必须是你创建对象时用的同名字符串,否则改不到目标。 把 "Day Candle: " 和 status 变量拼起来,意味着 status 之前要由你自己的判断逻辑赋值(比如涨/跌/未收盘)。外汇与贵金属波动大、跳空频繁,这类标签仅作盯盘辅助,不预示方向,实际显示可能延迟 1~2 个 tick。 开 MT5 新建一个指标,照这个调用把对象名和 status 来源接上,就能在图上看到随状态翻转的文字,比来回切周期省事。

MQL5 / C++
  class=class="str">"cmt">// Update the text
  ObjectSetString(class="num">0, objName, OBJPROP_TEXT, "Day Candle: " + status);
  }

别急着下结论

AI 写出来的 MQL5 程序不是每次都能直接跑顺,多数情况下你得自己翻社区文档、啃 MQL5 书籍,再在调试器里磨几轮。附件里那三个文件就是现成的起点:MyFirstIndicator.mq5 是指标模板(1.59 KB),MyFirstMQL5_Program.mq5 是脚本算法源码(2.46 KB),编译后的 MyFirstMQL5_Program.ex5 有 9.24 KB,丢进 MT5 就能加载。 外汇和贵金属算法交易杠杆高、回撤快,AI 辅助只是把试错成本压低,极限仍在你提需求和改参数的功力上。下次打开终端时,先拿那支脚本跑一遍历史数据,看看和你手感差在哪。 真要把潜力放出来,靠的是持续改代码而不是信一套万能生成。至少现在你身边多了个能跑模板的伙伴,剩下的坑自己填。

让小布替你跑这套
把重复的诊断与信号巡检交给小布盯盘,你专注决策。小布已内置常见 MQL5 指标逻辑的可视化比对,打开对应品种页即可看到实盘偏差。

常见问题

优先看带逐步项目的入门文,从基础语法到可运行脚本那段最省时间,跳过纯概念堆砌的长文。
本地策略测试、调试输出和指标可视化只在桌面端完整,移动端仅适合接收信号与通知。
目前小布提供指标逻辑比对与信号巡检,自定义 ea 的托管执行建议用桌面端回测后再接入观察。
多数生成代码忽略点差、滑点和休市规则,需人工补完订单校验与错误处理才可能稳定。