mql5编程教程
mql5编程教程:从零开始写你的程教程第一个交易机器人
凌晨三点,我盯着MT5的程教程日志窗口,一行红色报错跳出来——"array out of range"。程教程这已经是程教程今晚第七次了。旁边那台旧笔记本上,程教程一条简单的程教程均线交叉策略正跑着模拟盘,盈亏曲线像心电图一样起伏。程教程写MQL5这事儿,程教程说难不难,程教程说简单,程教程它真能把你逼疯。程教程
先别管那些复杂的程教程类继承或DLL调用。你只需要理解一件事:MQL5就是程教程C++的私生子,但没继承到内存管理的程教程天赋。变量要声明类型,程教程函数要写返回,循环用for或while,这些你从C语言课本上翻到的知识,百分之八十直接能用。区别在于——你写的代码不是给用户点按钮用的,而是给市场看门狗跑的。每个tick进来,你的程序就得做出决定:买、卖,还是装死。
打开MetaEditor(MT5自带的编辑器),新建一个Expert Advisor。你会看到模板自动生成了三个函数:OnInit()、OnTick()、OnDeinit()。别被这些名字吓到。OnInit()就像你开店前的准备——摆货架、贴价签。这里通常放指标句柄的创建,比如iMA()拿个均线句柄。OnTick()才是主战场,每次价格变动它就被调用一次。你在这儿写买卖逻辑。OnDeinit()是关店后的清扫,释放句柄,免得内存泄漏。
举个例子。你想写个最简单的策略:价格站上20日均线就做多,跌破就平仓。核心代码就十几行:
double ma = iMA(_Symbol, _Period, 20, 0, MODE_SMA, PRICE_CLOSE, 0); if(Bid > ma && PositionSelect(_Symbol) == false) { OrderSend(_Symbol, ORDER_TYPE_BUY, 0.1, Ask, 30, 0, 0, "my first ea"); } if(Bid < ma && PositionSelect(_Symbol) == true) { PositionClose(_Symbol); } 注意PositionSelect()——MQL5里持仓和订单是分开的。新手最爱犯的错就是拿MQL4的思路写MQL5,结果订单半天不成交,因为你还得处理Trade类的ResultRetcode()返回值。真到实盘你会发现,光有信号不够,还得管滑点、管止损、管每天几点该收手不交易。
调试的时候,Print()是你的救命稻草。把每个变量的值打出来,一行行看它怎么跑的。我习惯在OnTick()开头加一句Print("tick time: ", TimeCurrent()),至少能确认程序活着。遇到诡异bug,先查数组下标——MQL5里CopyRates()取历史数据时,索引0是最新K线,索引1是上一根,方向别搞反。搞反了,你的策略等于看着后视镜开车。
写回测时,记得把Model选成"Every tick based on real ticks",别用默认的"Open prices only"。前者更接近实盘,虽然慢些,但能暴露很多问题——比如你的策略在点差扩大时会不会频繁止损。我跑过一套网格策略,用开盘价模式回测年化200%,换成真实tick直接亏穿。市场里的噪音比你想象的多得多。
最后说个反直觉的经验:别一开始就想着写完美代码。先让程序跑起来,哪怕只有一条均线交叉,哪怕没有止损。跑通了,再加过滤器、加仓位管理、加时间限制。MQL5的编译错误提示其实挺友好,它告诉你"possible loss of data due to type conversion"时,多半是你在给double赋值时写了int变量。改掉就好。
写代码写到烦躁时,去泡杯茶,回来看一眼图表。你写的每一行逻辑,最终都要跟市场里几千个同样写代码的人博弈。有人用机器学习,有人用高频套利,但更多人连个简单的突破策略都写不利索。你只要把基础打牢,就已经跑赢一半人了。剩下的,交给时间和复盘。
本文地址:http://www.79wt.cn/news/917f0599077.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。