1 初识MQL4程序与框架

前言:

初学者基本都分不清EA,MT4,MQL4的区别。这里介绍一下:MT4就是我们交易用的软件。MQL4是MT4提供的一门编程语言。EA是使用MQL4编写出来的智能交易程。现在暂时分不清,把它们都暂且看做是一样的也没关系。

不管你了解不了解编程,在看完本章内容之后都会对MQL4的程序有几个基本了解和概念。也许不还看不懂别人的程序,但是你如果看了本章内容就会掌握MQL4程序的框架。

那么在下文我们所说的MT4编程,MQL4编程,EA编程,都是指一个东西:编程在MT4平台上运行的自动交易程序。

其他的任务就交个第二章来解决吧。

当前我们大部分人还是使用MT4进行外汇交易。有的人以为EA只有大资金才可以使用。其实并不是这样的,很多人会使用各种指标或者K线来构建自己的交易系统。那么将你的交易系统进行适当量化,编写成程序。那么这就是你的EA,完全按照你自己的操盘方式进行下单。

1 EA是什么?及他的工作原理

EA 即 Expert Advisors 的英文缩写,中文意思专家顾问,俗称智能交易系统,就是由电脑模拟交易员的下单操作进行机器自动交易的过程。

2人工操盘过程

下面我们就以MT4外汇客户端为例,首先来分析一个外汇交易员手工进行外汇交易的操作过程:其步骤如下:
1.打开外汇交易客户端,选定一种货币对图表;
2。监视该货币对的K线趋势图,俗称盯盘,寻找开仓或者是平仓的时机,即开仓或者是平仓的条件
3。如果条件满足,进行下单开仓(做多或者做空)或者平仓
4。重复第二步,继续盯盘,假定第二步是开仓,就是寻找平仓的条件。
5。如果平仓的条件满足,进行平仓操作,计算盈亏核算。完成一次交易的循环。
6。若继续交易,重复2->3->4->5步
7。若不进行交易,退出外汇客户端。

3机器操盘过程

基于以上的分析,我们已经知道一个完整的智能交易系统(俗称EA)在运行后必须要实现的基本功能,就是上述的人工操作的1-5步。 这也就是智能交易系统的基本工作过程,所以智能交易系统的工作原理就是由程序员 借助一门计算机程序设计语言,通过编写程序交易 指令模拟人类交易员的行为进行下单操作,实现机器自动进行交易的过程。主要执行过程可分为:盯盘->开仓->再盯盘->平仓,如此循环执行的过程。
关于支持机器自动交易的平台,目前外汇市场上流行的就是MetaQuotes公司的MT4平台,由于这个平台中嵌入了一种MQL4语言,它提供了对服务器端的数据访问并可进行交易操作的接口,程序交易者可以根据自己的交易策略来编写自己的自动交易系统,从而实现让机器自动交易,既可以减轻人类的工作量,又可以克服人类交易中的一此性格弱点,但目前的EA开发,尚所早期起步阶段,有的还存在缺陷,但相信随着技术的发展,机器自动交易终将会逐步取代人类的手工操作。届时会给交易者一项新的选择。

结论:

从以上的分析,可以知道,所谓EA,就是由电脑模拟交易员的下单操作进行机器交易的过程, 具体步骤如下:

1。当用户打开外汇客户端程序后,由客户端程序调入用户在系统内已预置好的EA交易系统程序。

2。当EA程序启动后便开始对图表中货币对的K线趋势图,进行监视,寻找开仓的条件;

3。如果条件满足,进行下单开仓(做多或者做空);

4。重复第二步,继续盯盘,假定第二步是开仓,就是寻找平仓的条件。

5。如果平仓的条件满足,进行平仓操作,计算盈亏核算。完成一次交易的循环。

6。若继续交易,EA重复2->3->4->5步

7。用户若不想让EA进行交易,可通过相关菜单操作设置禁用EA,或者退出外汇客户端。

4 为什么要学习MT4编程

我们为什么要学习EA编程呢?其实我觉得每个进行外汇交易的人都需要适当的学习和了解EA编程。理由如下:如果你正在构建你的交易系统,你想快速了解自己的交易系统是否具有盈利能力,那么你可以通过编写成EA进行回测,如果回测过不了,那么基本可以认为你的交易系统不存在盈利能力。这样做的好处是防止自己在构建出真正盈利的策略之前就亏损掉自己宝贵的资金。二是 现在市面上代谢EA的人能力参差不齐,你不懂EA编程,别人给你写的程序,存在哪些问题,你也很难去判断,甚至说别人的程序跟你的想法存在差距也是完全有可能的。

大部分没有接触过编程的人都会觉得编程或者EA编程很难。那是因为你们不了解这其中的运行机制和运行原理,既有太多完备的参考资料可用,也没有人带领你们进入这个领域。

那么我在这里可以负责任的告诉大家,EA编程很简单,如果你想学,那么欢迎加入我们。我们会提供完整的学习材料和引导大家学习EA编程,包括在以后编程的过程中如果遇到什么问题,我们也会尽可能的 帮助大家解决。废话不多说,下面进入正题。

5 MT4程序类型

运行在MT4中的程序分三种:脚本,EA,指标。

三者之间存在着一定区别:

脚本:只能运行一次,加载到MT4上运行一次就自动退出。可以进行开平仓等操作。

EA:在MT4中一直运行,不会退出。其中可以包含开仓平仓,对价为进行各种计算。

指标:在MT4中一直运行,不会退出。其中不可以进行开仓平仓等操作,只能对需要处理的数据进行各种处理,并且在图表上显示出编程人员需要显示的各种图形线条和信息。

指标又分两种:主图指标和附图指标。

主图指标是跟K线在一个图中的指标。例如均线,布林带。

附图指标是在K线图下方单独出现一个图表的指标。例如RSI,KDJ,MACD。

6 如何编写MT4程序

下面我将用实际行动告诉大家MT4编程是如何从零开始。

6.1 打开MT4编辑器

首先打开MT4->工具->MQL语言编辑器。如图6.1所示

图6.1

6.2 编辑器窗口

打开之后会出现如图3.2的MQL语言编辑器。

图6.2

图6.2中共有7个指示区域:

1:EA存放位置,想要知道具体存放位置,可以选中相应的图标,单击右键,然后选择打开文件夹即可。

2:指标存放位置,具体存放位置打开方式同1上。

3:脚本存放位置,具体存放位置打开方式同1上。

4:程序编辑框,在该位置编写你的程序。

5: 程序编译和运行按键,程序编写完成后需要编译生成可执行文件才能在MT4中运行。

6:错误列表框,编译时程序中存在的错误会显示在该区域。只有错误数为0才能生成可执行文件,也才意味着你的程序编写成功。

7:点击此处可以新建一个程序,其实这应该是编写一个程序的第一步,首先就要点击此处新建程序。

6.3 新建程序

如6.2中所说,点击MT4编辑器中的文件,会出现图6.3.1所示窗口:

图3.3.1

继续点击新建,会出现图3.3.2所示窗口:

图6.3.2

一共有6个选项,初学着只需了解前三个的用法。也只有前三个创建的程序会在MT4中运行。那么这里也介绍一下 程序库就是将你写过的程序编辑在一起,这样做的好处就是下次你遇到类似的编写方式时可以直接从中复制你想要的程序,加快开发速度。mqh文件是一个头文件,就是在你写程序时可能会用到一些东西是提前在这里定义好的。新类是面向对象编程时所使用的。初学者或者大部分人实际都可以不管这个。

在新建程序时根据自己的需要选择需要创建的程序类型。

6.4 MT4程序运行机制与框架

MT4中三种程序的运行机制稍有不同。

6.4.1脚本运行机制:脚本程序加载后直接从头到尾运行一次,然后退出。

6.4.2 EA运行机制:EA加载后会一直运行,每当有新的报价出现,就会执行一次程序。在EA中可以进行开仓平仓等一系列操作。如果程序中有死循环之类的操作不会影响到其他程序的运行。一个图表只能加载一个EA程序。

6.4.3 指标运行机制:指标加载后会一直运行,每当有新的需要计算的数据,程序执行一次。如果程序中出现了死循环会影响所有其它已经加载的程序。一个图标可以加载多个指标程序。

MT4所有的程序都是事件驱动型。那么什么叫事件驱动型,打个比方,实际就是有人告诉你做什么 你就去做什么。当没有人做事时你就休息。比如有人教你扫地,你就去扫地;有人叫你做饭,你就去做饭;有人叫你洗衣服,你就洗衣服。事情干完了,没人叫你干事,你就躺着睡觉休息。

那么在MT4中有哪些事件呢?

①初始化事件         对应函数        int OnInit()

②注销事件         对应函数         void OnDeinit(const int reason)

③开始事件         对应函数         void OnStart()

④新价格事件        对应函数        void OnTick()

⑤鼠标操作事件     对应函数        void OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)

⑥定时器事件        对应函数        void OnTick()

⑦测试事件            对应函数        void OnTester()

⑧新计算事件        对应函数        void OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)

在MT4的程序中,①②用于三种程序的初始化和注销;③只用于脚本程序的入口;

④只用于EA程序;⑧只用于指标程序;⑤⑥⑦用选用于EA和指标,不是必须使用的。

MT4的程序就是事件驱动,且只支持8个事件。

脚本使用③。

EA使用①②④⑤⑥⑦,其中①②④必须使用,⑤⑥⑦根据程序功能和需求选用。

指标使用①②⑤⑥⑦⑧,其中①②⑧必须使用,⑤⑥⑦根据程序功能和需求选用。

在后面将会用程序举例做介绍。

注意:在老板编译器中使用有所区别
老版程序中主要由三个函数构成分别是:
init():初始化函数,负责程序变量及数据初始输入;只在程序调入时执行一次,一般不用重写内容。
deinit():反初始化函数,负责程序退出时,将数据从内存中清除;只在程序退出时,执行一次,一般不用重写内容。
start():开始函数,也即程序的主函数,负责EA程序 的全部交易执行过程,实际上他是一个EA的交易管理与执行函数。每隔一定时间,一般几秒之内,执行一次,就是循环执行,到程序退出时终止
运行流程:启动EA后,程序的INTI()开始执行一次,–>然后 START()循环执行—>最后退出EA时deinit()执行一次。所以你们看到有的EA是使用上面这种方式构建的程序也不要奇怪。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注