当前位置:首页 > 百科 > mql5编程

mql5编程

2026-10-17 06:04:06 [娱乐] 来源:力不从心网

打开MetaEditor,新建一个.mq5文件,你会看到OnInit、OnDeinit、OnTick三个函数骨架。这就是MQL5的全部起点。别被C++-like的语法吓到,它比C++简单得多——没有指针运算,没有模板元编程,内存管理基本交给平台。但它的能力边界比MQL4宽了整整一圈:多线程回测、面向对象、事件驱动、自定义指标句柄,这些在MQL4里要么没有要么残缺。

我最早写MQL4的时候,习惯把所有逻辑塞进OnTick里,用一堆全局变量传来传去。迁到MQL5后第一次被编译器教做人:OrderSend的参数从7个变成了11个,而且必须用MqlTradeRequest结构体。当时觉得麻烦,后来才明白这种设计的好处——请求和结果分离,异步执行,出错时能精确知道是哪个字段的问题。

指标调用方式的根本改变

MQL5不再支持iMA、iRSI这类直接返回数值的函数。取而代之的是先创建指标句柄,再用CopyBuffer取数据。这个变化让很多人不适应,但它解决了一个老问题:MQL4里每次调用iMA都会重新计算一遍指标,EA跑久了CPU直接拉满。MQL5的句柄机制只计算一次,后续都是读缓存。

int handle = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE); double buf[]; ArraySetAsSeries(buf, true); CopyBuffer(handle, 0, 0, 3, buf);

注意ArraySetAsSeries这行。不设的话,buf[0]是最老的数据而不是最新的。这个坑我踩过不止一次,回测结果和实盘对不上,查了半天才发现是数组顺序问题。

订单系统的重构

MQL5把订单(Order)和持仓(Position)彻底分开了。在MQL4里你下一单,它就变成一个订单,平仓就是关闭这个订单。MQL5不是这样:你发一个市价单请求,平台先创建一个订单,订单成交后生成一个持仓,订单本身消失。听起来绕,但这是Netting和Hedging账户模式统一处理的前提。

查持仓用PositionsTotal()和PositionGetSymbol(),查挂单用OrdersTotal()和OrderGetTicket()。两套API不能混用。我曾经写过一个函数想同时遍历持仓和挂单,结果在Hedging账户上跑得好好的,换到Netting账户直接乱套——因为Netting模式下同品种只有一个持仓,逻辑完全不一样。

CTrade类:省事但别全信

标准库里的CTrade封装了大部分交易操作,PositionOpen、PositionClose、Buy、Sell,用起来确实快。但它默认的滑点设置是0,在真实账户上可能反复拒单。我一般会手动设一下:

CTrade trade; trade.SetDeviationInPoints(10); trade.SetTypeFilling(ORDER_FILLING_FOK);

Filling模式尤其要注意。不同经纪商支持的模式不同,有的只支持FOK,有的只支持IOC。设错了OrderSend直接返回TRADE_RETCODE_INVALID_FILL,连报错信息都不告诉你具体哪里错了。

调试和回测的实用技巧

Print和Comment是最常用的调试手段,但Print在回测模式下输出量大了会严重拖慢速度。我的做法是用一个全局的调试开关,只在需要的时候打开。另外,OnTick里不要写文件操作,回测时每次tick都写盘,跑一年数据能写到你怀疑人生。

策略测试器里有个被低估的功能:自定义符号。你可以导入外部数据生成自己的K线,测试一些在标准品种上没法验证的想法。我试过用tick数据合成4小时线跑均线策略,结果和直接跑4小时图差别不小——因为合成时的tick聚合方式和经纪商的服务器端聚合不完全一致。

MQL5的学习曲线确实比MQL4陡,但一旦过了那个坎,你会发现很多在MQL4里需要绕路解决的问题,在MQL5里有了正规的解法。事件驱动、面向对象、多线程回测,这些不是花架子,是写复杂策略时真正省时间的东西。

(责任编辑:娱乐)

推荐文章
  • google浏览器修复工具官方下载

    google浏览器修复工具官方下载 Google浏览器Chrome)的官方修复工具并不叫“修复工具”,它藏在一个你绝对想不到的地方——Chrome的“帮助”菜单里。点开右上角那三个点,找到“帮助”,再点“关于Google Chrome” ...[详细]
  • 美女电击翻白眼

    美女电击翻白眼 那天下午三点,我在城南一家电子维修铺子门口,亲眼看见一个姑娘被电击得翻白眼。 她蹲在路边修电瓶车,手里攥着两根裸露的铜线,大概是觉得断了电的线路没什么危险。旁边修车师傅老刘正蹲在台阶上抽烟,嘴里嘟囔着 ...[详细]
  • 相信网恋

    相信网恋 我见过最荒唐的网恋,发生在我室友身上。对方发来的照片,是那种磨皮磨到五官模糊的网红脸。他信了,还转了五千块过去,说那是“应急”。结果当然是人财两空。可你要问我相不相信网恋,我的答案还是——信。 别急着 ...[详细]
  • 网监是干什么的

    网监是干什么的 深夜两点,某直播平台上一名女主播正在卖力地表演,突然画面一黑,直播间被封禁。她不知道的是,几分钟前,网监系统自动识别出她穿着的服装不符合规定,系统直接触发了封禁机制。这就是网监工作的冰山一角——一个你 ...[详细]
  • sql查询表是否存在

    sql查询表是否存在 写SQL查表是否存在,最直白的答案是:`SELECT 1 FROM information_schema.tables WHERE table_schema = '你的库名' AND table_na ...[详细]
  • ftp搭建网站

    ftp搭建网站 FTP搭建网站,这事儿听着像上个世纪的老古董,但真要在内网传个大文件、临时部署个静态页面,它比那些花里胡哨的云盘和GitHub Pages利索多了。我上周刚给公司老旧的工控机配了台FTP服务器,就为把 ...[详细]
  • 分分彩漏洞计算方法

    分分彩漏洞计算方法 一分快三的分分彩,开奖频率高到每分钟一次。很多人盯着那个跳动的数字,以为能靠感觉抓住规律。我见过一个老玩家,他从不看走势图,只拿计算器敲概率公式。他说,这游戏本质是数学题,不是赌运气。 先算个基础账。 ...[详细]
  • ftp服务器外网访问

    ftp服务器外网访问 我花了三个晚上,才让那台放在客厅角落的旧电脑变成了一个真正的“公共资源站”。问题不在配置——那台机器还是十年前的酷睿i3——而在如何让外网的人能稳定地连进来。FTP服务器搭建本身半小时就搞定了,Fil ...[详细]
  • 南昌航空大学官网官网

    南昌航空大学官网官网 南昌航空大学官网的首页,永远是一张蓝天下的停机坪照片。我盯着那架老式歼击机看了很久——它停在那里,机头微微上扬,像随时要冲进屏幕里。旁边滚动着“嫦娥七号”探测器某部件研发成功的新闻,再往下拉,是学 ...[详细]
  • 达到渗透平衡后为什么还存在浓度差

    达到渗透平衡后为什么还存在浓度差 渗透平衡从来不是“停止交换”的同义词。把两个浓度不同的蔗糖溶液用半透膜隔开,水分子确实会从低浓度侧涌向高浓度侧,直到液面差带来的静水压足够抵消渗透压差——这时候宏观流动停了。可你要是用精密仪器去测膜两 ...[详细]
热点阅读