EA编程实训课程 - 图文

发布时间 : 星期日 文章EA编程实训课程 - 图文更新完毕开始阅读

9.1课程目标

掌握自定义指标编制过程 数组函数的使用

多色指标线的实现方式

指标副图中画出柱状线、曲线 理解未来函数的含义

9.2实训内容

指标完成后的图形如下:

柱状图表示对应K线的成交量。当收盘价close[i]大于前一收盘价close[i+1]时,该成交量标注为红色,表示资金流入(CapitalFlowIn);当收盘价小于前一收盘价时,该成交量标注为绿色,表示资金流出(CapitalFlowOut)。

曲线为资金流向(CapitalFlows)的黄金加权值,分两次计算出CFO结果,正数标注为黄色,负数标注为蓝色。

[CapitalFlows算法描述] 变量名 CF CFS CFI CFO 描述 第一次计算的黄金加权值。CF(i),其中i表示K线序号 第二次计算的黄金加权平滑值。CFS(I),其中i表示K线序号 资金流入。CFI(I),其中I表示K线序号 资金流出。CFO(i),其中i表示K线序号 指标计算公式:

CF(i)=(CFI(i)*0.5+CFI(i+1)*0.309+CFI(i+2)*0.191)-(CFO(i)*0.5+CFO(i+1)*0.309+CFO(i+2)*0.191)

CFS(i)=CF(i)*0.618+CF(i+1)*0.382

新建一个在副图显示的指标,分色显示成交量柱图CFI、CFO。

在上述程序基础上,当CFS从负数转变为正数时,标注红色向上箭头,当CFS从正数转变为负数时,标注绿色向下箭头。

9.3参考资料

在指标计算中会经常用到数组操作,仔细阅读帮助文件中“Array functions”部分,详细了

解每个数组函数的用法。

详细阅读自定义指标中的“ZigZag.Mq4”代码,理解未来函数的含义。

9.4思考题

1、列表说明帮助文件中15个数组函数的用法。

2、数组需要预定义,比如myArray[21]就定义了21个元素。当不能确定一个数组最大元素数量时,该数组是否可以这样定义myArray[]?

3、指标线采用双色显示时,为什么要分成两个缓冲变量?

4、上网查找“未来函数”指标的相关资料,详细描述未来指标的概念及其形成的过程,说明未来函数对实际操盘的指导意义。 5、总结编制自定义指标的流程。

第十课 网格对冲交易

10.1课程目标 编制需求分析报告 搭建模块化的EA架构 多货币对同时操作

挂单操作(按条件挂单、判断挂单触发、撤销挂单) 持仓单操作(同类型持仓单平仓、判断最新平仓单)

10.2实训内容 [需要说明]

预设开仓量、格子间距、最大格子数量

根据iMA(时间周期21,平均方法Smoothed,应用价格Weighted Close),当前价高于MA发生买入信号,当前价低于MA发生卖出信号。

以买入为例,当买入单成交后,该订单向上设置1个格子距离有止盈价位。同时向下设置一个格子距离的3倍开仓量的卖出挂单。当该卖出挂单触发后,向下设置1个格子距离的止盈价位(含买入单),同时向上设置1个格子距离的4倍开仓量的买入挂单。以此类推,直到最大格子数量为止。每次挂单的开仓量为反向持仓量+1个开仓量。止盈触发后,清除相关的挂单。

如果市场出现了卖出信号,则开出1张卖出订单,操作方法与上述相反。 一个货币对最多允许根据MA信号开出2张方向相反的订单。 2张订单操作,互不影响。

多货币对同时单独操作,相互不影响。 根据[需求说明]整理需求报告

画出交易流程图,注明各功能模块。

在主图右上角实时显示买入、卖出组的持仓、挂单情况。

10.3参考资料

下载EA委托书(http://www.docin.com/p-95514940.html),熟悉需求报告的写法。

10.4思考题

1、如何判断挂单已经触发?如何判断持仓单已经平仓? 2、汇总EA开发的常用模块 3、总结策略实现的通用流程。

第十一课 控单模板

1、控单模板

在外汇操作中,新建1张卖出类型订单有的人叫做“买入1张卖出单”,也有人称作“买入1张渣单”,览全各种称呼的不确定性,为了精确表达概念,在本书中均统一采用以下名词定义。

表1:名词定义 名词 持仓单 成交持仓单 买入单、卖出单 Stop买入挂单、Stop卖出挂单 买入组、卖出组 触发挂单 建仓 加仓 空仓 移动止损 释义 是指保持在场内的所有未平仓订单,包括己成交的订单及挂单 是指保持在场内的买入、卖出类型的订单,这类订单利润随着价格变动而动 是指场内的买入、卖出类型的成交持仓单 是指价格高于、低于当前价格的挂单 是指程序将成交持仓单按照类型分为买入、卖出两组 是指场内随着价格变动被触发,成为了成交持仓单的订单 是指场内没有成交持仓单前提下,新建1张成交持仓单,或者挂单 是指场内有成交持仓单前提下,增加1张成交持仓单 是指场内没有成交持仓单和挂单 是指成交持仓单盈利且当前报价与该单开仓价格超过预设移动止损间距点数而执行的一个不断向盈利方向调整订单止损价位的过程。该订单止损利润≥0 Limit买入挂单、Limit卖出挂单 是指价格低于、高于当前价格的挂单 MQL4编程中最繁琐的莫过于对持仓单控制了,例如EURUSD现持有4张买入单和2张卖出单,根据交易策略要求,现在需要买入组盈利最小的订单平仓,卖出组亏损最大的订单平仓,我敢保证编码工作量巨大而且容易出错,再加上EA同时挂在GBPUSD需要区别对待仓单,不能错误操作,此时的你是不是会感觉很无所适从呢?

上述控单策略在EA中屡见不鲜,笔者积累多年编程经验,总结出一套模板,你只需要将新

建一个EA的时候将这段程序直接复制粘贴到编辑器,就能又快又好、专心致志地考虑自己的策略流程,不必再为计算“哪张单是第1单”、“哪张单是盈利最小的单”等等要求而大伤脑筋了。

这是一段标准程序,预定义了一组公共变量,随着价格(tick)实时更新,提供你在各类控单模块中随时方便调用。

表2 预定义公共变量 变量名 BuyGroupOrders,SellGroupOrders BuyGroupFirstTicket,SellGroupFirstTicket BuyGroupLastTicket,SellGroupLastTicket BuyGrouplots,SellGrouplots BuyGroupProfit,SellGroupProfit BuyLimitOrders,SellLimitOrders BuyStopOrders,SellStopOrders 变量含义 买入、卖出组成交持仓单数量总计 买入、卖出组第一单单号 买入、卖出组最后一单单号 买入、卖出组成交持仓单开仓量总计 买入、卖出组成交持仓单利润总计 买入限制挂单、卖出限制挂单数量总计 买入停止挂单、卖出停止挂单数量总计 表2列出了22个公共变量,将当前货币对图表中的持仓单分为买入组、卖出组,并对其进一步细分,包括组利润、组成交持仓单数量、组开仓量等等基本控单操作需要用到的数据。

例如:买入单为3张时,不再建仓,代码书写就简单到如下程度:

+-----------------------------------------------------------------+ If(BuyGroupOrders>3) {

Return(0); }

+-----------------------------------------------------------------+

许多时候,用户会使用不同的EA操作或者手工开仓,我们可以利用MQL4提供的订单特征码(OrderMagicMunber)和订单注释(OrderComment)准确识别本EA开出的订单。 每1张建仓单都可以附加这两个标识符,值得注意的是,订单特征码只能在EA建仓时写入,订单注释则可以手工建仓或者建仓时写入。

因此,当策略要求人工建仓后交还给EA管控,那就只能利用“订单注释”来分辨特定的持仓单了。

如果成交持仓单因止盈、止损平仓,那么,历史订单中该单的注释将在原有注释前增加“[tp]”/“[sl]”字样,例如订单注释为“test”,止盈平仓后订单注释为“[tp]test”。

图1 止盈平仓单的注释

联系合同范文客服:xxxxx#qq.com(#替换为@)