从新手到专家:MQL5交易的必备之旅·综合运用
(3/3)· 从能写第一行代码到能独立交付可运行系统,只差这套组合拳
用AI起手写出首个MT5日线判势脚本
做这个脚本的目标很直接:在MT5里跑一下,就让程序告诉我当前D1(日线)K线是偏多头还是偏空头。思路是先让对话式AI生成一段MQL5脚本模板并驻留上下文,再喂入「判定日线方向」的需求让其改写,避免从零手搓语法。 实测流程:从AI拿到代码后,打开MetaEditor,走「文件 > 新建 > 脚本」,命名后下一步到底。把自动生成的空骨架全删,贴上AI给的代码,点工具栏编译。若编译器零报错,脚本就会进导航器里的脚本目录。 把脚本拖到任意图表,它会基于D1数据输出方向结论。那次测试中程序一次编译通过,并判定D1 K线为看涨(多头倾向,非绝对信号)。外汇与贵金属波动剧烈,这类脚本仅作辅助参考,实盘仍须自担高风险。 下面这段是AI基于模板产出的初版代码,OnStart函数体尚空,仅搭好版权与版本骨架:
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 阴阳只反映当日惯性,不能单独作为入场依据,须配合更小周期确认。
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 来源接上,就能在图上看到随状态翻转的文字,比来回切周期省事。
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 辅助只是把试错成本压低,极限仍在你提需求和改参数的功力上。下次打开终端时,先拿那支脚本跑一遍历史数据,看看和你手感差在哪。 真要把潜力放出来,靠的是持续改代码而不是信一套万能生成。至少现在你身边多了个能跑模板的伙伴,剩下的坑自己填。