Note

从零开始学MT4编程(四)

· Views 38,723

    程序化系统是指设计人员将交易策略的逻辑与参数在电脑程序运算后,并将交易策略系统化。程序化交易起源于美国1975年出现的“股票组合转让与交易”,即经纪人和专业投资经理可以通过计算机与证券交易所直接联机来实现股票组合的一次性买卖交易,股票市场的订单实现了电脑化。同时,电子信息网络(ECN)在20世纪70年代迅速兴起,极大地提高了交易速度。一方面,科学技术进步推动金融市场发展;另一方面,金融市场发展反过来要求进行金融市场基础制度变革,规范技术在金融市场的运用。

    程序化交易及程序化交易其实是这几十年来交易电子化的必然过程。2000年国际证券交易所(ISE )建立了第一个完全电子化的美国期权交易所。到2008年中期,已有7个交易所提供完全的电子化,或者是电子化与交易大厅相结合的期权交易平台。截至2014年,全球许多交易所实现了电子化交易。

    目前华尔街大型投行绝大部分的利润和交易量都是由程序化交易完成的,程序化交易相对于手动交易有着极大的优点,有逐渐取代手动交易的趋势,是未来金融市场的发展方向。未来的交易员之间的竞争,将会是程序代码之间的竞争,是智能交易系统之间的竞争,谁的程序技高一筹,谁就可以战胜市场,获得额外的盈利。

    截止至2016年,全球已有超过81%的金融经纪公司和全世界四十多个国家的银行选择了迈达克软件作为网络化交易平台;全球超过90%的零售交易量是通过迈达克软件成交的,而这其中大部分又是由EA成交。

    EA编程,可以从现在开始:

2.2.2 市场函数

    我们经常能遇到不同平台报价格式不同、滑点数不同、最小开仓量不同、市场时间不同等等情况。这些数据都能通过市场函数直接获取,这样才能给 EA 带来了较大的适用性。

    市场函数调用范例:定义最低价变量 myLow,并获取最低价。

    所有参数列表如下:

从零开始学MT4编程(四)从零开始学MT4编程(四)从零开始学MT4编程(四)从零开始学MT4编程(四)

2.2.3 账户函数

从零开始学MT4编程(四)从零开始学MT4编程(四)

2.2.4 市场变量

从零开始学MT4编程(四)

2.2.5 时间函数

    MQL4 内置时间函数数值的最小读取单位是以每个新价格(tick)为基础。如果没有新价格出现,则时间数值不能获取。

    Time0和TimeCurrent()的数据类型为datetime,返回从1970 年1 月1 日0 点开始至今 累计的“秒”数,Time0返回当前蜡烛时间,TimeCurrent()返回当前新价格(tick)时间。

从零开始学MT4编程(四)从零开始学MT4编程(四)

2.2.6 蜡烛序列函数

    我们经常需要计算 n~n+i 个蜡烛的最高最低价,因此这组函数用途十分光。

从零开始学MT4编程(四)

2.2.7 交易函数

    关于交易函数详见 MT4 的帮助,具体用法在本书后续的范例中会频繁出现。在这里需要强调的是:

  1. 、          自定义指标中不能调用 OrderSend(), OrderClose, OrderCloseBy, OrderDelete 和 OrderModify 交易函数。

 

    2.、   OrderClose, OrderCloseBy, OrderDelete 和 OrderModify 函数在调用前必须用 OrderSelect()命令选择订单。

2.2.8 数学、三角函数

    关于数学函数详见 MT4 的帮助。

    值得强调的是绝对值函数是用频率最高,我们经常需要判断当前价是否达到了预期的止盈止损,就要是用这个函数。下面是个例句:

    If (MathABS(Close0-OrderOpenPrice())>StopLoss*Point;//如果价位达到止损使用这个语句的意义就在于我们不必去管当前订单是买入类型还是卖出类型。

2.2.9 数组函数

    关于数组函数详见 MT4 的帮助。在此强调以下几个注意事项:

    1.、数组的最大维数最大为4 维。

    例如定义一个数组为 myArray[10,10,10,10],说明该数组有4维,每维有10个元素。

    2.、维数元素序号从 0 开始计算。

    例如 myArray0,就表示变量 myArray 第 0 个位置的数据。假如该数组定义为 10 个数字,那么第 10 个数字就应该表示为 myArray9

    3.、MQL4 不是专业的计算机开发语言,在数组使用方面有不严谨之处。比如在编写指标的时候,你预先定义了一个一维数组 A,这个方括号里为空表示可以使用任意多个元素, 实际在调用这个数组的时候,必须先定义元素数量,否则无法取值。 

2.2.10 弹出消息框函数

 【源代码】

int start()

  {

//----

   string TradeInformtion="Buy";

   PlaySound("alert.wav");

   int MsgBoxInfo=MessageBox("市场发出交易指令:"+TradeInformtion+"\n"+"是否交易?",

                             "交易提示窗口",MB_YESNO|MB_ICONWARNING);

   Print("返回信息:"+MsgBoxInfo);

return(0);

//----  

  }

【源代码说明】

从零开始学MT4编程(四)

    MessageBox 需要调用mql 的函数,因此在程序头需要添加一个语句,否则通不过编译, 该语句后面不要跟“;”

#include <WinUser32.mqh>

2.3 自定义指标

    技术指标是一种用来辅助判断行情的程序,按照特定的算法经过对市场数据计算后的值在屏幕上用线条、箭头等标注出来。

    MQL4 规定在同一个图标中最多只能画 8 种类型的线条或者符号,为了方便理解,我们在此称为 8 个图层。如下图:

从零开始学MT4编程(四)

    自定义指标又分为两种类型,一个是在主图中显示,如移动平均线,一个是在副图中显示,如MACD。

    在本书的范例中有一个指标的源代码,通过理解源代码比任何论述都有效。

以上观点仅供参考。祝福大家程序化交易顺利。

Disclaimer: The content above represents only the views of the author or guest. It does not represent any views or positions of FOLLOWME and does not mean that FOLLOWME agrees with its statement or description, nor does it constitute any investment advice. For all actions taken by visitors based on information provided by the FOLLOWME community, the community does not assume any form of liability unless otherwise expressly promised in writing.

FOLLOWME Trading Community Website: https://www.followme.com

If you like, reward to support.
avatar

Hot

厉害
@天空的眼:拳头
@天空的眼:拳头
不错哦
@如初如也:鼓掌
有没有从零基础开始学写ea的教程
@乡巴佬进汇市:发布的这个教程就是从零基础开始学的哈
手势手势手势
@基旭:拳头
学习了
优秀
周末学习。
加油哈!👍
留名
@1240220:手势
有没有系统的学习资料?
您指的哪方面的呢 ?
👍
手势
👍
手势
@hphe:强壮
Verified Official
你好,#年中盘点征文选秀#活动邀请你来参加,@Followme活动 了解详情,加精文章有109个F币奖励噢。内容可以写交易员观察、跟随策略、自己的故事或交易经验,都行
大笑
👍

-THE END-