EA编程实训课程 - 图文 联系客服

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

第五课 多订单识别

5.1课程目标

持仓订单中包含了注释(Comment)和订单识别码(magicnumber)两个参数,comment参数为字符类型,用于对该单加以描述,magicnumber参数为整数型,用于标注订单代码。

在实际操作过程中,持仓单形态多种多样,同一货币对可能有2张以上反向订单,不同货币对可能会有持仓单,持仓单又可能有成交单和挂单之分。EA必须能够对所有持仓单分类、分别操作。每张持仓单必须拥有一个独立的识别符号。

挂单成交变成成交单、成交单平仓变成历史订单,EA必须能够实时监控订单的这种变化。

5.2实训内容 编写EA,在当前图表按实时报价同时开出1张买入0.1手订单和1张卖出订单,标注comment为“起始单”。

根据行情情况,当“起始单”盈利20点时,追加1张同方向订单,开仓量0.1手。

编写一个自定义函数,动态显示持仓订单情况,包括订单号、订单货币对、订单类型(买入、卖出、挂单),开仓量、开仓价、注释、订单识别码。建议使用comment命令。

将该EA编译后放入三种货币对图表中运行,观察MT4终端窗口订单注释栏情况,观察动态显示持仓单信息。 5.3参考资料

遍历持仓单,挑选目标订单是EA程序常见动作,以下提供一个遍历订单框架式语句。 If(OrdersTotal()>0)

{

For(cnt=0;cnt<=OrdersTotal()-1;cnt++) {

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);//订单操作语句 } }

5.4思考题

1、除了订单号,还可以用什么方法定义订单的唯一性? 2、持仓单中的注释和订单识别号能修改吗?为什么?

3、假如有1张持仓单虎仓量为0.1手,能否将该单平仓0.05手?如果可以,平仓后的平仓单的持仓单单号分别是怎么变化的?以这种方式平仓后的订单信息中注释和订单识别码是什么样的?请用程序显示这些信息。

4、仔细阅读教材中关于MM和ECN的章节,写出两者之间的差别。ECN平台上点差和MM平台上的点差有什么区别?为了使程序同时适应MM和ECN平台,点差该怎么处理? 5、我们通常会遇到“5位数报价平台”、“4位数报价平台”的提法,为了使程序同时适应两种类型的平台,我们应该注意哪些地方?

第六课 历史订单及持仓单统计

6.1课程目标

订单分为历史订单和持仓订单。历史订单包含了交易完毕的订单记录及入金、出金记录。持仓订单包含了成交单、挂单。

学习历史订单统计方法、持仓订单统计方法。

6.2实训内容

编写EA,统计并显示当前图表(当前货币对)的历史订单总数、买入订单总数、卖出订单总数、亏损订单总数、盈利订单总数。

在上述EA基础上,增加显示历史买入订单胜率、卖出订单胜率、买入订单盈利率、卖出订单盈利率。

在上述EA基础上,增加显示当前货币对持仓单总数,买入持仓单总数、卖出持仓单总数,买入单利润、卖出单利润。如果利润为正数,显示绿色,为负数显示红色,利润为零,显示灰色。

6.3参考资料

iObjectColor是一个根据正数、负数、零数值返回颜色的自定义函数,常用于颜色区分显示盈利状况,以获取更好的视觉效果。 /*

函数:对象颜色

输入参数:doube myInput数值 输出参数:颜色数值

算法说明:负数为红色,正数为绿色,0为灰色 */

Color iObjectColor(double myTnput) {

Color myColor; If(myInput>0)

MyColor=Green;//正数颜色为绿色 If(myInput<0)

MyColor=Red;//负数颜色为红色 If(myColor==0)

MyColor=DarkGray;//0颜色为灰色 Return(myColor); }

6.4思考题

1、如何获取当前货币对中的挂单单号? 2、遍历历史订单时会用到”for(cnt=0;cnt<=OrdersHistoryTotal()-1;cnt++)”语句,请问当cnt=0,

对应历史订单是哪1单?

3、在网上收集“凯利公式”资料,归纳描述凯利公式,在程序中显示当前货币对的凯利值。

第七课 图形化显示交易指标

7.1课程目标

初步熟悉指标程序的格式

指标程序不能执行开仓、平仓、挂单操作 掌握动态线条的画法 了解文本操作基本命令

7.2实训内容

新建一个指标文件

将每张历史订单的开仓和平仓价用虚线连上,买入订单为绿色虚线,卖出订单为红色虚线,开仓价位置用上箭头表示,平仓价位用下箭头标注表示。 将每张持仓单订单的开仓价和当前价用虚线连上,买入订单为绿色虚线,卖出订单为红色虚线,开仓价位置用上箭头标注,要求价格变化时,该虚线也随着变动。 在主图中显示当前货币对、当前浮动利润。 将前一根K线的开盘价、收盘价、最高价、最低价以及货币对名称写入到CSV格式文件中,要求用Excel打开后各项数据在不同的格子中。

7.3参考资料

教材中关于文本读写的章节。

7.4思考题

1、指标在主图中显示用什么命令定义?在副图中显示用什么命令定义?

2、仔细阅读帮助中“文件函数”部分,列表说明20个文件操作函数的功能。

第八课 十字星K线连线指标

8.1课程目标

IndicatorCounted()是指标程序的专用命令 一个MQL4指标最多输出8个参数 学会图层变量定义

8.2实训内容

新建一个副图显示的指标程序,命名为“十字星K线连线副图测试”。定义一个输出变量,定义该变量在数据窗口中显示的名称。编译,加载到图表中。

修改参考资料中的iSetLable,在该指标所在窗口中用iSetLable函数显示“作者:XXX”信息。理解WindowFind函数的用法,修改程序将“作者:XXX”在主图中显示。 用Print命令打印IndicatorCounted()和Bar()值,对比观察数据的变化。 新建一个主图显示的指标程序,命名为“十字星K线连线”。找到主图中所有十字星K线,并对该缓冲变量赋值。

8.3参考资料

iSetLable是一个在副图中显示文字信息的自定义函数。 /*

函数:在屏幕上显示文字标签

输入参数:string LableName标签名称,如果显示多个文本,名称不能相同 String LableDoc文本内容 Int LableX标签X位置坐标 Int LableY标签Y位置坐标 Int DocSize文本字号 String DocStyle文本字体 Color DocColor文本颜色

输出参数:在指定的位置(X,Y)按照指定的字号、字体及颜色显示指定的文本 算法说明: */ Void iSetLable(string LableName,string LableDoc,int LableX,int LableY,int DocSize,stringDocStyle,color DocColor) {

Int myWindowsHandle=windowFind(“<填写指标名称>”);

ObjectCreate(LableName,OBJ_LABLE,myWindowsHandle,0,0); ObjectSetText(LableName,LableDoc,DocSize,DocStyle,DocColor); ObjectSet(LableName,OBJPROP_XDISTANCE,LableX); ObjectSet(LableName,OBJPROP_YDISTANCE,LableY); }

8.4思考题

1、阅读教材关于IndicatorCounted()的章节,说明IndicatorCounted()与Bars()的区别。 2、详细描述WindowFind命令的作用。 3、什么是指标的缓冲变量?起什么作用?

第九课 资金流向指标