从入门到放弃再到搞定:MQL5基础语法入门

新帖
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
gz53376
gz53376 楼主 3 小时前 浏览 35 回复 0 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 2 帖数 5 积分 1772 汇币 1557
1楼
有个汇友昨晚私信我,说他照着文档写了个最简单的MQL5脚本,编译死活报“implicit conversion from 'number' to 'string'”,改了半天没头绪,问我是不是MT5对新手不友好。其实这个坑我当年也踩过,而且踩得比他还深——今天干脆借这个由头,把MQL5基础语法这块捋一捋,用对比的方式说说几种常见写法的优劣,顺便把新手最容易翻车的地方标出来。
先说变量声明这块。MQL5是强类型语言,和MQL4那种松散写法差别很大。我见过两种入门路径:一种是沿用MQL4习惯,到处用double一把梭,遇到字符串拼接就硬转;另一种是老老实实按类型来,int、double、string、bool分清楚。前者的优点是上手快,老代码复制过来能跑;缺点是编译期警告一堆,运行时遇到隐式类型转换直接给你返回0或者空串,排查起来很折磨。后者前期啰嗦,但编译器检查能帮你挡掉大半低级错误。我的建议是新手直接走第二条路,别图省事。
函数定义也是重灾区。MQL5里函数参数默认是按值传递,想改外部变量必须加&引用符。我当初写第一个移动止损函数,参数没加&,结果函数里算得好好的,主程序里止损纹丝不动,debug了快两个小时才发现问题。对比一下:按值传递安全但改不了原值,按引用传递高效但要注意别在函数里误改不该动的变量。实操步骤我一般这么走:

  • 先确定这个函数要不要修改传入的变量,要改就加&
  • 数组参数一律用引用传递,MQL5不支持按值传数组
  • 结构体参数如果只读,加const &既省内存又防误改
  • 编译后看警告栏,出现“possible loss of data”基本就是类型没对齐

再聊聊事件处理函数。OnInit、OnDeinit、OnTick这三个是EA的骨架,但新手常犯的错是把初始化逻辑全塞进OnTick。我见过一个跑黄金的EA,作者把指标句柄创建写在OnTick里,结果每根K线都新建一次句柄,跑了一天句柄数爆表,终端直接卡死。正确做法是对比着来:OnInit里做一次性初始化(创建句柄、读参数、校验输入),OnTick里只做逻辑判断,OnDeinit里释放资源。这个分工看着简单,但真到写的时候,很多人图方便就全堆一起了。
还有个绕不开的点是#property strict和输入参数的写法。MQL5用input关键字声明外部参数,配合input group可以做参数分组,界面上清爽很多。我早期写的EA参数全挤在一列,客户拿到手一脸懵,后来改成按“开仓设置”“风控设置”“离场设置”分组,反馈立马不一样。这里提醒一句,input变量在EA运行中是只读的,想在程序里改参数值得用普通变量接一层,这个坑我见好几个汇友踩过,回测时改了参数发现没生效,其实就是这个原因。
最后说编译和调试。MT5的MetaEditor比MT4那会儿强不少,但断点调试很多人没用起来。我的习惯是先在策略测试器里跑一遍,看日志有没有报错,再挂到图表上用断点单步走。对比纯靠Print输出,断点能直接看变量当前值,效率高太多。欧美这种波动温和的品种还好,要是跑镑美或者黄金,Print打多了日志刷屏,反而看不清关键信息。
差不多就这些,MQL5语法本身不难,难的是从MQL4思维转过来那一下。你们入门时卡在哪个语法点上,是类型转换还是事件函数分工?评论区说说,我看看能不能针对性再拆一篇 🙏
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 多品种EA对电脑配置要求高吗,有人遇到过吗? 下一帖 → Tickmill免费VPS申请与EA部署教程,交流