从零开始学MT4编程(五)

avatar
· 阅读量 22,670

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

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

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

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

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

第三章 编程进阶

3.1 构思策略

3.1.1 交易过程的说明

下面是一个完整的交易流程图:

从零开始学MT4编程(五)

    毫无疑问,所有的人都会按照上面这个流程进行外汇交易,同时得到一个结果:盈利或者亏损。在交易过程中我们会根据技术指标提供的信号决定买入或者卖出,再根据技术指标提供的信号决定修改止损止盈点,最后决定平仓出市。

    相信所有的人都有一个共同的经历:当账面出现浮动盈利的时候,会认为盈利将继续扩大而没有按照计划获利平仓。当行情反向运行,盈利缩减的时候就会安慰自己,行情会掉头的再等等,又没有及时获利平仓。行情往往会跟你的美好愿望相悖而驰,当账面出现亏损抵达止损点的时候,依然梦想行情回头,甚至安慰自己说没关系,这一点点我亏得起,结果自然不言而喻。

    每位参与外汇交易的人都有一套自己熟悉的指标体系来辅助决策,除此之外还有一套适合自己的资金盘子计划。每一次做单都需要考虑账户保证金和下单量,开仓后出现的浮动亏损与盈利情况又成为了下一步动作的重要参考,怎么重新设置止损止盈价位,用多大的补仓量等等,所有这些思考和行动的目的仅仅是确保账户资金的安全,实现稳步盈利,避免出现爆仓。咱们的老祖宗说过:留得青山在不愁没柴烧。

    相信所有的人都知道要按照计划执行操作,但往往决策的时候忘记了计划,这就是人性的弱点,谁都克服不了,包括我也逃脱不了,我经常这样评价自己和中国的汇友:亏得起, 赢不起。因此,我们不难得出这个结论:使用 EA,能够回避人性的弱点,让操盘更加标准,更加严格按照计划执行。

    从交易流程图的分析我们发现,一旦确定了技术指标、开仓量、补仓量、止损价位、止盈价位等等计划后,就是按照交易逻辑执行了,全过程完全可以不需要人工参与,证明 EA 可以帮助我们自动盯盘,根据制定好的策略执行开仓、平仓、挂单、修改止损止盈价位等等各种动作,是完全可行的。

    我们在构思策略时最少要综合考虑以下三个方面:

    ●  价:入市的价位、止损止盈的价位

    ●  量:根据账户余额决定开仓、补仓的量

    ●  信号:根据技术指标决定入市(出市)及其方向

3.1.2 技术指标的选择

    但凡炒外汇的人都会使用一些技术指标并将其整合,作为判断入市出市的参考依据。MQL4 语言提供了 29 个默认技术指标,囊括了几乎所有常见使用的指标。网上也有人提供 1000 个技术指标的,技术指标的作用是提供判断依据,我们几乎没有必要过多了解和学习默认值指标以外的,也不必深入钻研技术指标是怎么编制的,只要懂得技术指标是否发出了操作信号即可。

3.1.3 风险控制的策略

    对行情走势的判断之后,我们需要着重考虑风险控制。是重仓入市还是轻仓入市都是有讲究的,你不能输了一单就疯狂加倍反向做单,那样只会加快你账户爆仓。

3.1.3.1 开仓下单量

    开仓下单量计算公式如下:

从零开始学MT4编程(五)

    说明:

    杠杆  1:100;

    标准手交易量为125000 美元;

    风险系数可根据自己的承受能力设置,通常我们设定风险系数为 5,系数大风险越高。 假设账户余额      为10000 美元,列表计算如下:

从零开始学MT4编程(五)

 从零开始学MT4编程(五)

3.1.3.2 补仓下单量

    在交易过程中,如果行情方向正确,账户可用保证金会随着增加,为了不浪费一轮好的行情,我们需要做补仓处理,以赚取更大的利润。或者行情出现了反向,为了减少亏损,加大盈利概率,也可以考虑反向补仓。

    补仓量的大小是根据账户净额来确定的,如果账户净额大于账户余额,说明账面盈利,补仓量可以稍微加码,反之则需要减少。

    计算补仓下单量也设置一个系数,计算公式如下:

从零开始学MT4编程(五)

    例如,补仓系数为 3 ,亏损订单数量为 1 ,那么这时补仓下单量就是开仓下单量的 2/3。在后面的逻辑分析章节中,会禁止该公式出现负数,也会处理补仓系数为 0 (分母为零)的情况,否则在程序运行时会出现错误。

3.1.3.3 价格波动控制

    根据技术指标我们发现了入市信号,根据帐户余额我们选定了下单量,就可以开仓了, 此时止损止盈价格的设置是必须的,特别当你启动了 EA 后离开汇市,就显得更加重要。

    考虑到汇市变化多端,风险难以控制,目的就是为了排除小周期(M1、M5、M15)市场出现的干扰信号。当然这只是经验数据,如果你的账户是 Mini 型的,杠杆又大于100,那么就要因地制宜考虑参数的设置。

    纵观外汇数据图表不难发现盘整行情多于单边行情,那么我们就需要利用趋势类指标确定单边行情的到来,同时利用震荡类指标过滤掉窄幅震荡行情。

    控制价格波动没有绝对的区间,这是个见仁见智的数据。

3.2 逻辑分析

    谈及逻辑执行,这可是计算机程序的强项,一个制定好的逻辑程序交给计算机要比人工的执行力强得多。

    随着外汇 EA 化程度越来越高,许多人开始研究人工智能的计算模型,试图让计算机具备学习能力,来对付千变万化的汇市。最近类似网格、云计算等等人工智能专业术语充斥了整个 EA 世界。

    我们不是专家,我们的目的是充分利用计算机的逻辑执行能力来辅助我们的决策,这就简单了。

    上一章针对外汇交易流程及风险控制的论述可以得到这么一个结论:外汇交易行为中有 99% 是逻辑行为,剩下的 1% 是突发性事件因素,而对付突发性事件的解决方案就是设置合理的能够承受的止损空间,这仍然可以归类到逻辑行为。

    本章着重针对交易行为和交易策略进行逻辑化的程序化的分析,旨在为下一章编制代码拟定一个准确详细的流程。

    学会流程分析是编程的必要条件。

3.2.1 EA 逻辑框架

    MQL4 语言为 EA 制定了一个固定的框架,见下图:

从零开始学MT4编程(五)

    参数定义模块放置当前 EA 的属性,包括 EA 运行前需要人工定义的一些市场必须的参数(如止损、止盈点等),还可以包括一些外部函数库的调用和图表基本属(线型、颜 色等)的定义。

    初始化定义模块在 EA 运行时会先执行一次,一般用于进行和图表有关的一些属性的设置,也可以对后续程序中需要调用的变量给出初始值。

    预定义函数模块在策略参数被修改后会执行一次,紧接着再执行初始化定义模块,策略首次导入图表时不执行该模块代码。

    操盘控制模块是 EA 主模块,当市场出现每一次价格变动时都会执行一次。

3.2.2 操盘控制模块流程图

从零开始学MT4编程(五)

    细心的人会发现,上面这个流程图中居然没有平仓的动作?这是个有趣的话题,另外慢慢找时间思考回味吧。

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

风险提示:以上内容仅代表作者或嘉宾的观点,不代表 FOLLOWME 的任何观点及立场,且不代表 FOLLOWME 同意其说法或描述,也不构成任何投资建议。对于访问者根据 FOLLOWME 社区提供的信息所做出的一切行为,除非另有明确的书面承诺文件,否则本社区不承担任何形式的责任。

FOLLOWME 交易社区网址: www.followme.ceo

喜欢的话,赞赏支持一下
avatar
回复 0

加载失败()

  • tradingContest