[原创]学习雷锋好榜样----手把手教编写EA
首席搞的PK比赛,用EA的似乎表现比较好。这个得刺激多少人去寻找EA圣杯。与其寻找他人的圣杯,还不如好好学习,努力编织属于自己的EA圣杯。
网络力量是无穷的,网络最大的贡献是知识共享。
如何编写EA呢?
我们先来看看一个完整的EA长什么样子。然后再展开。
Moving Average Cross.mq4
来自65楼
将两个EA合在一起,珍惜生命,远离爆仓。赶快来围观。 拓客小强EA.mq4
2楼
必须顶,这个才是真正的授业!比那些实盘直播实在多了。楼主此举绝对是功德无量!当别人沉浸在虚幻的美好世界里,被一些不知所云的技和ea催眠,楼主是第一个带光明于现实世界。实实在在,技术授业,这才是真正的大师风范!为楼主点赞!此贴长期关注,长期顶贴!直到加精!成为论坛最有价值的贴子,没有之一!忘楼主尽心教授,兄弟再此谢过!论坛其他兄弟全力顶起!
韬客社区www.talkfx.co
3楼
兄弟言重了。人各尽所能,人各取所需。顶帖,围观,关注,交流,互动,提问,打赏等都是支持。 原来EA是一个文件。文件内容是有一定规则组成的文字,这个规则是由MetaQuotes 软件公司定义的,叫MQL4,详细帮助文档在MT4自带的编辑器按F1就可以调出来的,他才是你最好的教材,也是最好的老师。 文件由不同的功能模块组成,每一个模块实现一个我们想做什么的功能。E文叫function(方孙),直译函数。语法: 功能类型 功能名(参数1,参数2...参数N) { //功能模块开始 } //功能模块结束 我们举一个功能模块实例,EA是通过报价每变化一次就进来的功能模块进行监控行情的。 我们就是通过这个功能代替人眼盯盘。他的名字叫void OnTick(). 后面我们讲函数里面包含的语法要素。
发表于:2016-04-16 22:52只看该作者
4楼
首先,谢谢楼主。这个怎么从0开始?以前从来没用过
韬客社区www.talkfx.co
发表于:2016-04-16 23:21只看该作者
6楼
楼主今年赚了多少,好奇心使然,楼主勿怪
韬客社区www.talkfx.co
7楼
人非生而知之,而是学而知之。我之前也没学过,也没用过。我的想法是,只要有人用了,我们就可以学,也能学会。中华儿女的智商不是吹的。一个靠学,一个靠悟。
讲回语法要素。
贴图行242,243,247,250,253,255带双反斜杠的//是注释语言,他们是路过,打酱油的,生怕我们不知道,不明白。
行245 void OnTick(),是我们前面提到的函数语法.详细解说如下。
void 是函数类型,表示他做得好与坏都不重要,不需要报告。
OnTick是函数名,名字取得好,可读性强,意思明确,见名思意是取名字的重点。
()表示没参数,他不需要我们提供额外的东西,照样可以干活。
行246,254{},大括号是函数的开始与结束符,中间是函数体,就是重点实现函数名说的要做的功能。
EA盯盘重点是要开仓和平仓。
行251,252要表达的意思是:如果当前开单量为0,就盯盘准备开仓,否则盯盘准备平仓。
发表于:2016-04-16 23:57只看该作者
9楼
支持,建议论坛专开一个ea研讨版块。
韬客社区www.talkfx.co
10楼
楼主是亏货,但不影响我能学会用EA,也会编EA,还可以教EA,赚多少具体参考首席贴PK赛。我想我们的重点应该是我能赚多少,而不是他人能赚多少。 行248,251用到了一个条件判断操作,语法: if (条件) 操作1; else 操作2; 就是条件是真的就执行操作1,假的就执行操作2. 其中行248 用了多重条件布尔运算,或运算(||),其中一个是真,就是真,执行操作1. 下一点讲如何计算当前下单量。
评分
参与人数2
积分
金币
人气
时间
理由
发表于:2016-04-17 00:07只看该作者
11楼
希望楼主能坚持,给EA热加把火
韬客社区www.talkfx.co
13楼
学历,专业只代表过去,资历代表现在,学习力才能代表未来。学习方向在哪里,你的未来就在哪里。
为什么要计算单量呢?
饭要一口一口的吃,交易要一单一单的做,我们要先知道有没有开单,然后再做下一步是开仓还是平仓。
因为同一个平台,有可能有人工下单的,也有可能是其它EA下单的,要怎么区分是你这个EA下的单呢?
先看行32 int CalculateCurrentOrders(string symbol);这个函数打头的类型不一样了,是int.表明做完要报告当前单量是多少。参数也带有,只是没用到,不多说。
再看行34,新语法,赋值语句。给变量赋值,变量名字取名也是遵守见名思义原则,假定买单,卖单都是0。
行36到44,新语法,循环语句。就是从所有开单单子里面找出是EA开过的单子。
36 确定总共有多少单子,最多找几次。单子总数用函数OrdersTotal()返回,选中函数点F1,可以找到类同的函数,也有举例应用,扩大知识面。
38 选中单子,选择失败就退出,不选了。
39 确定是当前货币对和标识码跟EA一致。
41 定单是买单的累加买单。
42 定单是卖单的累加卖单。
46 新语法,返回值(return N),向这个功能模块报告结果。
有了结果,EA就知道是要开仓,还是平仓了。有买单就会大于0,有卖单就会小于0.什么都单子都没有开就是0.
下一节讲如何开仓。
14楼
强势帮顶。支持楼主,辛苦了。
韬客社区www.talkfx.co
发表于:2016-04-17 04:31只看该作者
16楼
好东西
韬客社区www.talkfx.co
18楼
有时候还是很喜欢看评论的,留下抓印,也可以略知品行。
开仓能开到好价钱,赢利事半功倍。
例程用双均线金叉买入,死叉卖出。
void CheckForOpen()
我先讲讲开仓条件:
行155~159,图表每更新一条K柱,重新检查交叉。
行162~172,取样两次快慢均线的值进行交叉判断,金叉标为1,死叉标为-1,什么叉也没有发生就是0.每个技术指标对应一个函数。均线用iMA(...).
行175~186,就是根据交叉类型进行买卖下单。目前没有对下单结果进行判断,实盘中发现有下单不成功的,这个要改进。下单用OrderSend(...).
其中交叉判断用了一个功能模块,下单量也用了一个功能模块。下单量功能模块连续亏损时按30%的比例缩减,以减少损失。
我们一般讲震荡时高抛低吸,上升时买入,下降时卖出,没有具体的条件,EA是不知道怎么做的。所以我们编EA重点是给定可以量化的入场条件,而不是模糊的说词。
有了开仓条件,平仓条件就是反向操作。
19楼
mark
韬客社区www.talkfx.co