mql5编程
打开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浏览器Chrome)的官方修复工具并不叫“修复工具”,它藏在一个你绝对想不到的地方——Chrome的“帮助”菜单里。点开右上角那三个点,找到“帮助”,再点“关于Google Chrome”
...[详细]
-
那天下午三点,我在城南一家电子维修铺子门口,亲眼看见一个姑娘被电击得翻白眼。 她蹲在路边修电瓶车,手里攥着两根裸露的铜线,大概是觉得断了电的线路没什么危险。旁边修车师傅老刘正蹲在台阶上抽烟,嘴里嘟囔着
...[详细]
-
我见过最荒唐的网恋,发生在我室友身上。对方发来的照片,是那种磨皮磨到五官模糊的网红脸。他信了,还转了五千块过去,说那是“应急”。结果当然是人财两空。可你要问我相不相信网恋,我的答案还是——信。 别急着
...[详细]
-
深夜两点,某直播平台上一名女主播正在卖力地表演,突然画面一黑,直播间被封禁。她不知道的是,几分钟前,网监系统自动识别出她穿着的服装不符合规定,系统直接触发了封禁机制。这就是网监工作的冰山一角——一个你
...[详细]
-
写SQL查表是否存在,最直白的答案是:`SELECT 1 FROM information_schema.tables WHERE table_schema = '你的库名' AND table_na
...[详细]
-
FTP搭建网站,这事儿听着像上个世纪的老古董,但真要在内网传个大文件、临时部署个静态页面,它比那些花里胡哨的云盘和GitHub Pages利索多了。我上周刚给公司老旧的工控机配了台FTP服务器,就为把
...[详细]
-
一分快三的分分彩,开奖频率高到每分钟一次。很多人盯着那个跳动的数字,以为能靠感觉抓住规律。我见过一个老玩家,他从不看走势图,只拿计算器敲概率公式。他说,这游戏本质是数学题,不是赌运气。 先算个基础账。
...[详细]
-
我花了三个晚上,才让那台放在客厅角落的旧电脑变成了一个真正的“公共资源站”。问题不在配置——那台机器还是十年前的酷睿i3——而在如何让外网的人能稳定地连进来。FTP服务器搭建本身半小时就搞定了,Fil
...[详细]
-
南昌航空大学官网的首页,永远是一张蓝天下的停机坪照片。我盯着那架老式歼击机看了很久——它停在那里,机头微微上扬,像随时要冲进屏幕里。旁边滚动着“嫦娥七号”探测器某部件研发成功的新闻,再往下拉,是学
...[详细]
-
渗透平衡从来不是“停止交换”的同义词。把两个浓度不同的蔗糖溶液用半透膜隔开,水分子确实会从低浓度侧涌向高浓度侧,直到液面差带来的静水压足够抵消渗透压差——这时候宏观流动停了。可你要是用精密仪器去测膜两
...[详细]

业务逻辑漏洞
湖北高速浴帽机厂家
无锡网站公司
渗透网站是什么意思
好知网官方网站首页
