怎么编写 mt4 ea交易 pdf

MT4 EA编写 MT5 EA 代写EA MT4 EA定制 编程 开发定制 程序化交易制作
查看 (800)
亲爱的朋友:&&&&&&&&您好!欢迎加入自动化交易的行列。&MT4 EA开发 EA定制&&&编写一个稳定盈利的EA难不难?我们从编写大量的EA中,结累了很多的机械系统交易的经验。&&&在一段时间,我们一直在研究赌博的概率与胜率,包括一些赌场高手的注码策略,对外汇的资金管理很有帮助,除了下单的胜率之外,您还要考虑平仓,您下单之后有浮赢了,能否变成真正的利润,还要取决于您的平仓策略,平仓策略不好,赚钱会变成过眼烟云。&&用EA交易有以下几种思路可以尝试一下:&&&&& (1)小止赢(比如10点),大止损(比如1000点),超短线。这样的话能提高成功率,通过大量的小赢来获取胜利,但是要克服偶尔的大亏。&&&&& (2)利用5%的交易赚取95%的利润。这就是趋势交易法,在趋势的初期下单,趋势的结尾平仓。我这里所说的趋势是指你所认为的趋势,当然它的成功率是不可能大于50%的。这样的结果是大部分交易都是小赢小亏的,小亏占大多数,但是有少量情况下趋势真的倾向于你,那你就可以大赚,赚1000点一点也不稀奇。你要能忍受大部分时间盘整所带来的无尽的小亏损,甚至是上下打耳光,但是一定要坚持,否则当你放弃的时候,下一个交易机会也许就是真正的大行情。&&&&& (3)突破交易法:如海龟法则,突破是个很好的方法,简单的说就是追涨杀跌,所谓没有最高只有更高,没有最低只有更低。但问题是:什么样的突破是有效的突破?不能解决这个问题,你会死的很惨,因为大部分突破都是假的。&&&&& (4)大多数人不知道的极少的交易机会。这种交易机会出现的机会很少,这就需要你去努力的寻找。比如类似抄底打顶的时机。它出现的机会很少,但是成功率很高。&&&&& 总结一下,好的EA长什么样?&&&&& (1)在历史数据复盘测试时能取得好的成绩。虽然历史成绩并不代表将来的成绩,我们能做到的只有这样了。&&&&& (2)可供调整的参数很少,条件不复杂,EA能自动的适应所有的变化。&&&&& (3)适用于尽可能多的货币对与时间周期。&&&&&&&&&如果想要帮忙编制EA的话,请坦诚说出你的具体策略细节,最好是有完整的含有开仓,平仓,止损,参数等的整理好的文档.价格根据策略难度面议,付款后进入开发流程,做的过程中,您是要参与测试的,有时候很遗憾,有些朋友的思路并非原创,如果找我们的目的只是为了验证或者测试一些不成熟的思路,我们就无能为力帮不上忙了。&&&&&&&&&&&相关文档与资料在线传QQ:&&经典mt4编程参考-简体中文版pdf - MT4指标EA分享 - 智能交易网,程序化交易,自动交易,量化交易 -
后使用快捷导航没有帐号?
查看: 1309|回复: 13
经典mt4编程参考-简体中文版pdf
(636.9 KB, 下载次数: 417)
21:11 上传
点击文件名下载附件
供大家学习使用
好东西,谢谢分享
很好 很好 很好 很好 很好 啊
好久没上老师的网站了,又有那么多好东西,老师辛苦了 ,嘻...
好 很好 很好 很好 很好
弟弟顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
谢谢分享。好人!& &
谢谢楼主分享,新手学习的教程啊
好东西,谢谢分享
谢谢楼主分享
Powered byMT4 EA编程教程视频---基础篇
我的图书馆
MT4 EA编程教程视频---基础篇
什么是MT4?&&&&&&&&&&&&&&&&&&
我就当你了解什么是MT4了
MT4就是META. TRADER 4
# 什么是EA?
我也当你了解什么是EA了
EA 就是 Expert Adviser
EA 就是智能交易系统
智能教育系统就是:
-软件自己判断下订单
-软件自己判断提成利润
-软件自己判断砍仓止输
# 什么是速成班?
就是你在很短很快的时间内就可以学会如何编写EA
是的,快则8个学习小时
慢则24个学习小时
# 什么叫“易学难精”?
就是你很快的就上手,难在成为厉害的高手。
这需要时间慢慢的去研究编写。
久而久之你就可以是EA编写高手了。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第一课::了解EA的形式
* 以下就是EA的编写形式//
+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright ?2007, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2007, MetaQuotes Software
#property link. ""
//+-----------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
return(0);
//+------------------------------------------------------------------+ 
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright ?2007, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
这个是在上面的垃圾
写与不写都无所谓
我们就不用理他
* #property copyright "Copyright ?2007, MetaQuotes Software
#property link. ""
这个也是在上面的垃圾
写与不写都无所谓
我们也不用理他
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
//以后可能有用到
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
//以后可能有用到
return(0);
这两个很少用到。高高手才会用
速成班的话,这个可以不用理他。
放在一边先,以后才学怎样用它。
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
return(0);
//+------------------------------------------------------------------+
这个就是EA开始操作的重要部分
以上的EA的编写形式我们改成如下:
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link. ""
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
/以后可能有用到
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
/以后可能有用到
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
return(0);
//+------------------------------------------------------------------+ 
* 什么是“.mq4”?
EA制作好了就save成.mq4的文件
这文件是可以修改的
* 什么是“.ex4”?
EA制作好了
按“编写”就会自动save成.ex4的文件
这文件是不可以被修改的
这文件是加密的
可以出售的文件。
* 有什么问题要问吗?
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第二课:EA重要部分
* 回到EA重要部分
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
return(0);
//+------------------------------------------------------------------+
* 我们要知道EA是由上面往下读的
所以我们在编写方面要有逻辑思考
以下是速成班编写的形式
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
MoneyManagement();
zhangchang();
xianshi();
return(0);
//+------------------------------------------------------------------+
void MoneyManagement() {
//+------------------------------------------------------------------+
void macd() {
//+------------------------------------------------------------------+
void ma() {
//+------------------------------------------------------------------+
void zhangchang() {
//+------------------------------------------------------------------+
void buyme() {
//+------------------------------------------------------------------+
void sellme() {
//+------------------------------------------------------------------+
void buyme() {
//+------------------------------------------------------------------+
void xianshi() {
//+------------------------------------------------------------------+
* // 这两划代表右边的不要读
也可以说是注解
注意:EA不会读中文符号。比如这个“”
这个就可以 ""
* 我们可以完整他
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link. ""
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
//以后可能有用到
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
//以后可能有用到
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
buyme();//买上
sellme();//买下
xianshi();//显示管理
return(0);
//+------------------------------------------------------------------+
void MoneyManagement() {
//这边要写一些东西
//+------------------------------------------------------------------+
void macd() {
//这边要写一些东西
//+------------------------------------------------------------------+
void ma() {
//这边要写一些东西
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void sellme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void xianshi() {
//这边要写一些东西
//+------------------------------------------------------------------+
* 如果你在上面加这个xianshi2();
下面就加这个
//////////////////////////
void xianshi2() {
//这边要写一些东西
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第三课::加入指标
* //////////////////////////////
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
////////////////////////
ma1now是代表的字
你可以写成什么都可以
PRICE_CLOSE是ma最新的参数
PRICE_OPEN是ma开始的参数
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
这个整句是死的。
你只要copy&press就可以用了
ma1是ma的参数号码或bar
如果这样写法,他人不能更改参数
double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
这样写法,他人可以更改参数
extern double ma1=1,ma2=2;
这个是要放在#property上面那边的
* 其它指标的写法
macd1now=iMACD(NULL,0,macd1,macd1*2,1,PRICE_CLOSE,
MODE_MAIN,0);
zigzag1now=iCustom(NULL,0,"ZigZag",2,deviation,bac
kstep,0,0);
Highest1now=High[iHighest(NULL,0,MODE_HIGH,Highest1,0)];
Lowest1now=Low[iLowest(NULL,0,MODE_LOW,Lowest1,0)];
iTrend1now=iCustom(NULL,0,"iTrend",2,0,0,iTrend1,0
,iTrend1,0,0,1);
wpr1now = iWPR(Symbol(),0,wpr1,0);
指标写法是不用记住的
网上可以找到很多指标的写法
* 有了指标
我们可以更改我们的EA了
更改如下:
刚刚的指标加在什么地方
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link. ""
extern double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
buyme();//买上
sellme();//买下
xianshi();//显示管理
return(0);
//+------------------------------------------------------------------
+void MoneyManagement() {
//这边要写一些东西
//+------------------------------------------------------------------+
void macd() {
//这边要写一些东西
//+------------------------------------------------------------------+
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void sellme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void xianshi() {
//这边要写一些东西
//+------------------------------------------------------------------+
* 注意这个{},不要糊涂的删除了也不知道
注意这个可以写成这样
double ma1=1;
double ma2=2;
double ma1
double ma1now2;
double ma2
double ma2now2;
double ma1
double ma2
* extern double ma1=1;
extern double ma2=2;
这样写可以显示在EA开始的修改处
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第四课-资金管理
* 这个将放在#property上面那边
////////////////////////
extern string _资金管理_ ="任选一个";
extern bool zijiguanli1 =//false true、、
extern bool zijiguanli2=//false true、、
extern bool zijiguanli3=//false true、、
///////////////////////////////////
false =不要用
我提供了三个资金管理作为参考
你可以自己增加自己喜欢的资金管理方案
* /////////////////////////////////////
void MoneyManagement() {
lotstart=(AccountBalance()*lotab/10000);
if(cheng==0){cheng=1;}
CurrentBasket=AccountEquity()-AccountBalance();
/////////////////////////////////////////////////////////////////
if(zijiguanli1){ LotMM =}
/////////////////////////////////////////////////////////////////
if(zijiguanli2){
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2);
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(zijiguanli3){
if(s+b==0){aa=1;}
if(s+b==1){aa=3;}
if(s+b==2){aa=7;}
if(s+b==3){aa=11;}
if(s+b==4){aa=20;}
if(s+b==5){aa=31;}
if(s+b==6){aa=42;}
if(s+b==7){aa=54;}
if(s+b==8){aa=66;}
if(s+b==9){aa=76;}
if(s+b&=10){aa=66;}
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lotstart*aa,2); }
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(LotMM&lots){LotMM=0.01;}
if(LotMM&LotsMax){LotMM=LotsM}
}//end zijiguanli
//////////////////////////////////////////
注意:这个资金管理加了很多新的词句
所以我们要加上去#property上面那边
不然会出错
* 新的词句:
extern double cheng=1;
double aa=0;
int s=0,b=0;
intdouble CurrentBasket=0;
double LotMM=0;
double lotstart=0;
double LotsMax=100;
extern double lotab=0.1;
double lots=0;
double 是有小数点的
int 是没有小数点的
很容易用,比如:
if(LotMM&lots){LotMM=0.01;}
意思就是:
如果LotMM小过lots,LotMM就等于0.01。
if(LotMM&LotsMax){LotMM=LotsM}
意思就是:
如果LotMM大过LotsMax,LotMM就等于LotsMax。
不会的话,不要紧
copy&press就可以用了
把void MoneyManagement() { }
copy&press到我们EA模板去
结果如下://
+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link. ""
extern double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
////////////////////////
extern string _资金管理_ ="任选一个";
extern bool zijiguanli1=//false true、、
extern bool zijiguanli2=//false true、、
extern bool zijiguanli3=//false true、、
///////////////////////////////////
extern double cheng=1;
double aa=0;
int s=0,b=0;
int double CurrentBasket=0;
double LotMM=0;
double lotstart=0;
double LotsMax=100;
extern double lotab=0.1;
double lots=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
buyme();//买上
sellme();//买下
xianshi();//显示管理
return(0);
//+------------------------------------------------------------------+
void MoneyManagement() {
lotstart=(AccountBalance()*lotab/10000);
if(cheng==0){cheng=1;}
CurrentBasket=AccountEquity()-AccountBalance();
/////////////////////////////////////////////////////////////////
if(zijiguanli1){ LotMM =}
/////////////////////////////////////////////////////////////////
if(zijiguanli2){
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2);
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(zijiguanli3){
if(s+b==0){aa=1;}
if(s+b==1){aa=3;}
if(s+b==2){aa=7;}
if(s+b==3){aa=11;}
if(s+b==4){aa=20;}
if(s+b==5){aa=31;}
if(s+b==6){aa=42;}
if(s+b==7){aa=54;}
if(s+b==8){aa=66;}
if(s+b==9){aa=76;}
if(s+b&=10){aa=66;}
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lotstart*aa,2); }
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(LotMM&lots){LotMM=}
if(LotMM&LotsMax){LotMM=LotsM}
}//end zijiguanli
//+------------------------------------------------------------------+
void macd() {
//这边要写一些东西
//+------------------------------------------------------------------+
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void sellme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------+
void xianshi() {
//这边要写一些东西
//+------------------------------------------------------------------+
* 资金管理有三个方案:
资金管理1=平注
资金管理2=1,2,3,4,5...
可以乘,如果你把cheng改成2或3或0.2
资金管理3是固定式,1,3,7,11.。。
* 不明白?别急,用了就明白。
有什么问题要问吗?
但是我老实告诉你
我是自学成功的,没有上过什么EA课程
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第五课:策略:战场
* 这里是整个EA最重要的地方
这里策略变化无穷
高深莫测就是这里作怪
* 在这里你要想:。。。
你的EA要怎样下注
什么时候买上?
什么时候买下?
怎样买上?
怎样买下?
有买上又买下?
什么时候离场?
条件满足是很重要的
* 在这里我给个简单的策略
-ma1黄金交叉ma2,EA买上
-ma1死亡交叉ma2,EA买下
-有赚25点就出场
-如果亏的时候亏50点就出场
* 是这样编写的:
ma1now&ma2now
这样一句是不够条件的
ma1now&ma2now
ma1now2&ma2now2
这个就是黄金交叉的编写法
ma1now&ma2now
ma1now2&ma2now2
这个就是死亡交叉的编写法
* 但是条件还是不够的
ma1now&ma2now
ma1now2&ma2now2
s+b==0 意思就是 买上+买下等于没有
没有下注,如果遇到条件符合就可以下注的意思
&& 的意思就是“再加”什么什么的条件
那么整句是这样编写
if(什么什么){就什么什么}
就是用这个
if(ma1now&ma2now
ma1now2&ma2now2
){buyme();}
if(ma1now&ma2now
ma1now2&ma2now2
){sellme();}
* 现在我们就把这两句copy&press到战场去
现在又多了两个新的东西
buyme()和sellme()
你就copy&press buyme()和sellme()的编写法就可以了。
* 结果如下:
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link.
extern double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
////////////////////////
extern string _资金管理_ ="任选一个";
extern bool zijiguanli1=//false true、、
extern bool zijiguanli2=//false true、、
extern bool zijiguanli3=//false true、、
///////////////////////////////////
extern double cheng=1;
double aa=0;
int s=0,b=0;
intdouble CurrentBasket=0;
double LotMM=0;
double lotstart=0;
double LotsMax=100;
extern double lotab=0.1;
double lots=0;
double TP=0,TPP=0,SL=0,SLL=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
buyme();//买上
sellme();//买下
xianshi();//显示管理
return(0);
//+------------------------------------------------------------------+
void MoneyManagement() {
lotstart=(AccountBalance()*lotab/10000);
if(cheng==0){cheng=1;}
CurrentBasket=AccountEquity()-AccountBalance();
/////////////////////////////////////////////////////////////////
if(zijiguanli1){ LotMM =}
/////////////////////////////////////////////////////////////////
if(zijiguanli2){
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2);
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(zijiguanli3){
if(s+b==0){aa=1;}
if(s+b==1){aa=3;}
if(s+b==2){aa=7;}
if(s+b==3){aa=11;}
if(s+b==4){aa=20;}
if(s+b==5){aa=31;}
if(s+b==6){aa=42;}
if(s+b==7){aa=54;}
if(s+b==8){aa=66;}
if(s+b==9){aa=76;}
if(s+b&=10){aa=66;}
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lotstart*aa,2); }
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(LotMM&lots){LotMM=}
if(LotMM&LotsMax){LotMM=LotsM}
}//end zijiguanli
//+------------------------------------------------------------------+
void macd() {
//这边要写一些东西
//+------------------------------------------------------------------+
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
if(ma1now&ma2now
ma1now2&ma2now2
){buyme();}
if(ma1now&ma2now
ma1now2&ma2now2
){sellme();}
//+------------------------------------------------------------------+
void buyme(){
if (TP==0) { TPP=0; } if(TP&0) { TPP=Ask+TP*P
if (SL==0) { SLL=0; } if(SL&0) { SLL=Ask-SL*P
OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TPP,"
M"+Period()+"",0,0,Violet);
return(0); }
//+------------------------------------------------------------------+
void sellme(){
if (TP==0) { TPP=0; } if(TP&0) { TPP=Bid-(TP*Point);
if (SL==0) { SLL=0; } if(SL&0) { SLL=Bid+(SL*Point);
ticket=OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL,
TPP,"M"+Period()+"",0,0,GreenYellow);
return(0); }
//+------------------------------------------------------------------+
void buyme() {
//这边要写一些东西
//+------------------------------------------------------------------
+void xianshi() {
//这边要写一些东西
//+------------------------------------------------------------------+/////end
* 在buyme()和sellme()
我们又发现新的词句
TP,TPP,SL,SLL
我们必须在#property上面加上他们
不然会出错
我已经加上去了上面的结果了
你注意到了吗?
* ok,这个EA可以用了
现在你copy&press 去你的METAEDITOR
save as 一个新的名字就可以了
&&&&&&&&&&&&&&&&&&
第六课-解决出错问题
* 如果你有做功课
你会知道以上的EA还是不能用
因为出错了
出错是常事
没有什么了不起
没有什么大事
* 当你按在METAEDITOR按“编写”时
最下方会告诉你出错了
按一按下方的出错
他会告诉你在那里出错了
第一:intdouble CurrentBasket=0;
删掉 int 就可以了
//int 是表示要“整数”比如:1,2,3,4...
//double 表示要有小数点,比如:1.1,7.987.56.897.....
* 之后你在按一下“编写”
第二:ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
ma10,意思就是没有ma10这个新词句
其实我们没有用到ma10
是编写错误
不是ma10,是多了个0
删掉 0 就可以了
* 之后你在按一下“编写”
第三:OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TP
P,"M"+Period()+"",0,0,Violet);
问题是slip
应该是新的词句
slip 是什么?
听他们讲是滑点?管他
因为我们不可以删掉slip
所以在上方加上新的词句吧!
int slip=6;
* 再来。。。
ticket=OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL,
TPP,"M"+Period()+"",0,0,GreenYellow);
我们没有用到ticket
所以可以删掉 ticket= 就可以了
* 再来。。。他告诉你多了这个
void buyme() {
//这边要写一些东西
因为已经有了的,哈哈和。。。
是糊涂多了一个
删掉 整句多余的buyme() 就可以了
* 再来。。。
0错误 0警告
哈哈和。。。
恭喜你已经学会编写EA了
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第七课-填写盈亏
上一回我们讲到
-有赚25点就出场
-如果亏的时候亏50点就出场
这个还没有加上去
编写方法就是
Take Profit=25
Stop Loss=50
我把他们简写成
你想到了什么吗?
对,这字眼很熟吧!
double TP=0,TPP=0,SL=0,SLL=0;
double TP=25,TPP=0,SL=50,SLL=0;
你发现吗?
不过下注方面还是有问题!
其实是这EA没有判断
速成班不必学会怎样写
你只要copy&prss下面的子程式
放进去就可以了
我把它称为检查
//////////////////////////////////////////
void jiancha()
for (int cnt=0; cnt&=OrdersTotal(); cnt++)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() )
mode=OrderType();LastOrderType=OrderType();
if (OrderType() == OP_SELL){ s++;
LastPricesell=OrderOpenPrice();}
if (OrderType() == OP_BUY ){ b++;
LastPricebuy=OrderOpenPrice();}
LastPrice=OrderOpenPrice();
if (OrderType()==OP_SELL) {OpenSells++;}
if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
if (OrderType()==OP_BUY) {OpenBuys++;}
if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
}//end jiancha
//////////////////////////////////////////////////
要记得:在start那边也加入
jiancha();
这样就可以了。
当我们按“编写”
因为有了新的词句
我们没有加在#property上面那边
新的词句:
LastOrderType
LastPricesell
LastPricebuy
OpenSellStops
OpenBuyStops
我们更正如下:
double mode=0;
double LastOrderT
double LastP
double LastP
double LastP
double OpenS
double OpenSellS
double OpenB
double OpenBuyS
按“编写”。。。
0错误 0警告
按“终端”试一试效果怎样
还是buy sell buy sell buy sell
你知道什么事情发生了吗?
跟你讲一个逻辑
什么是主程式
就是主要的程式
什么是子程式
就是不是主要的程式
了解了这些
现在一个问题,这些子程式
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
buyme();//买上
sellme();//买下
xianshi();//显示管理
那些是不需要一直用的就不可以在主程式这里
buyme();//买上
sellme();//买下
是有时用到,有时没有用
所以我们删掉它
现在这个EA可以正常的操作了
其编写程式如下:
注意颜色部分的位置
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//|.cn/zhouxiaoyin18|
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link. ".cn/zhouxiaoyin18"
extern double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
////////////////////////
extern string _资金管理_ ="任选一个";
extern bool zijiguanli1=//false true、、
extern bool zijiguanli2=//false true、、
extern bool zijiguanli3=//false true、、
///////////////////////////////////
extern double cheng=1;
double aa=0;
int s=0,b=0;
double CurrentBasket=0;
double LotMM=0;
double lotstart=0;
double LotsMax=100;
extern double lotab=0.1;
double lots=0;
double TP=25,TPP=0,SL=50,SLL=0;
int slip=6;
///////////////////////////////////////
double mode=0;
double LastOrderT
double LastP
double LastP
double LastP
double OpenS
double OpenSellS
double OpenB
double OpenBuyS
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
jiancha();//检查判断
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
xianshi();//显示管理
return(0);
//+------------------------------------------------------------------+
void jiancha()
for (int cnt=0; cnt&=OrdersTotal(); cnt++)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() )
mode=OrderType();LastOrderType=OrderType();
if (OrderType() == OP_SELL){ s++;
LastPricesell=OrderOpenPrice();}
if (OrderType() == OP_BUY ){ b++;
LastPricebuy=OrderOpenPrice();}
LastPrice=OrderOpenPrice();
if (OrderType()==OP_SELL) {OpenSells++;}
if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
if (OrderType()==OP_BUY) {OpenBuys++;}
if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
}//end jiancha
//+------------------------------------------------------------------+
void MoneyManagement() {
lotstart=(AccountBalance()*lotab/10000);
if(cheng==0){cheng=1;}
CurrentBasket=AccountEquity()-AccountBalance();
/////////////////////////////////////////////////////////////////
if(zijiguanli1){ LotMM =}
/////////////////////////////////////////////////////////////////
if(zijiguanli2){
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2);
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(zijiguanli3){
if(s+b==0){aa=1;}
if(s+b==1){aa=3;}
if(s+b==2){aa=7;}
if(s+b==3){aa=11;}
if(s+b==4){aa=20;}
if(s+b==5){aa=31;}
if(s+b==6){aa=42;}
if(s+b==7){aa=54;}
if(s+b==8){aa=66;}
if(s+b==9){aa=76;}
if(s+b&=10){aa=66;}
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lotstart*aa,2); }
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(LotMM&lots){LotMM=}
if(LotMM&LotsMax){LotMM=LotsM}
}//end zijiguanli
//+------------------------------------------------------------------+
void macd() {
//这边要写一些东西
//+------------------------------------------------------------------+
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
if(ma1now&ma2now
ma1now2&ma2now2
){buyme();}
if(ma1now&ma2now
ma1now2&ma2now2
){sellme();}
//+------------------------------------------------------------------+
void buyme(){
if (TP==0) { TPP=0; } if(TP&0) { TPP=Ask+TP*P
if (SL==0) { SLL=0; } if(SL&0) { SLL=Ask-SL*P
OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TPP,"
M"+Period()+"",0,0,Violet);
return(0); }
//+------------------------------------------------------------------+
void sellme(){
if (TP==0) { TPP=0; } if(TP&0) { TPP=Bid-(TP*Point);
if (SL==0) { SLL=0; } if(SL&0) { SLL=Bid+(SL*Point);
OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL,TPP,"M"
+Period()+"",0,0,GreenYellow);
return(0); }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void xianshi() {
//这边要写一些东西
//+------------------------------------------------------------------+
///////////////////////////////end
恭喜!恭喜,这EA可以正常操作了
有什么问题要问吗?
但是我老实告诉你
我是自学成功的
没有上过什么EA课程
不要问太深奥或无聊的问题
我可能不知道怎样答你的问题
其实也不用问什么
自己想出答案会更好更刻骨铭心
哈哈和。。。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第八课-移动止赢
移动止赢就是到口的肉就不要吐出去了
哈哈和。。。
这样形容你明白吗?
其实也不是这个意思
是赢到尽头的意思
速成班不必学会怎样写Traingstop
copy&Press就可以了
子程式如下:
///////////////////////
void TrailingStop()
for(cnt=OrdersTotal();cnt&=0;cnt--)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() )//&&
OrderMagicNumber()==MAGICMA)
if (OrderType()==OP_SELL)
if(TrailingStop&0)
if((OrderOpenPrice()-Ask)&(Point*TrailingStop))
if((OrderStopLoss()&(Ask+Point*TrailingStop)) ||
(OrderStopLoss()==0))
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi
nt*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
if (OrderType()==OP_BUY)
if(TrailingStop&0)
if(Bid-OrderOpenPrice()&Point*TrailingStop)
if(OrderStopLoss()&Bid-Point*TrailingStop)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}//end TrailingStop
////////////////////////////////////
这TrailingStop是可以一直用的
所以我们要加在start那边加
TrailingStop();
发现新的词句
TrailingStop
我们更正如下:
double TrailingStop=0;
按“编写”
0错误 0警告
厉害,哈哈和。。。
把double TrailingStop=0;
0改成10,就可以操作了
改成这样也可以
extern double TrailingStop=10;
自己试一试看看效果如何?
怎样?容易吗?
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第九课-显示画面
显示的子程式如下
//////////////////////////////////////////////
void xianshi()
string name_8 = "xianshi1";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8, "伺服器时间::"+TimeToStr(CurTime( ))+"", 13,
"Arial", White);
ObjectSet(name_8, OBJPROP_CORNER, 0);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 15);
text="EA制作速成班";
name_8 = "xianshi2";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8, ""+text+"", 15, "Arial", Yellow);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 5);
name_8 = "Lableyeddrice1";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8, "M"+Period()+" 货币 "+Symbol()+"", 10, "Arial",
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 130);
ObjectSet(name_8, OBJPROP_YDISTANCE, 32);
//////这个显示上方
name_8 = "LableCurPrice2";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr(Ask, Digits)+"::买上", 15,
"Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 30);
//////这个显示下方
name_8 = "Lab345rPrice3";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr(Bid, Digits)+"::卖下", 15,
"Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 50);
name_8 = "Acc87lance";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr( AccountBalance(), 2)+"::账面资金",
13, "Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 70);
name_8 = "LableC5rice6";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr( AccountEquity(), 2)+"::净值资金",
13, "Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 90);
name_8 = "Labl456rice6";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr( AccountMargin(), 2)+"::保证资金",
13, "Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 110);
name_8 = "Labl4hcjce6";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr( AccountFreeMargin(),
2)+"::可用资金", 13, "Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 130);
name_8 = "Accvf7lance";
ObjectDelete(name_8);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSetText(name_8,""+DoubleToStr( AccountProfit(), 2)+"::账面盈亏",
13, "Arial", Lime);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
ObjectSet(name_8, OBJPROP_YDISTANCE, 150);
//我们可以无限的加
////////////////////////////////////////////////////
你应该会用了
这显示有什么了不起吗?
有什么作用吗?
用你的脚想一想你应该会领悟的
&&&&&&&&&&&&&&&&&&&&&&&&&&&
第十课-解决问题2
每一个程式的开始就是一个问题
没有问题就是有问题
有问题就有答案
没有答案就不是问题
哈哈和。。。
速成班基础篇教程到这里就结束了
结束就是新的开始
开始更上一层楼
其它基础的东东
你可以在Metaeditor的右边找到
所以我也不必重复
我们要快速的学习“策略篇”
因为一个成败的EA取决于策略
什么是策略?
策略就是战略
什么是战略?
战略就是你怎样把EA弄到直线上升
而不是楼梯下降
如果你要学习这一篇
可以,你必须交功课
在上面EA的基础上
请加上以下指标
如果你做不出来
你的基础都有问题
怎样更上一层楼呢!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第十一课::偷师
* EA速成班的学员是不必学会如何编写头痛的程式
不过这一招一定要会“偷师”
* 偷师就是“移花接木”
偷师就是“借花献佛”
* 怎样偷师?
就是copy&press那些公开的EA源码
以下是牛版主公开的源码
[原创]MT4阻力支撑源码公布
本指标为CDP公式在MT4上的实现,使用MT4的Expert调用方式,代码如下:
==================================================
//+------------------------------------------------------------------+
//| CDP.mq4 |
//| Copyright ?FXCorp. |
//+--------com
----------------------------------------------------------+
#property copyright "Copyright, 520FX Corp."
#property link. "
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
double cdp,H,L,C,Hn,Ln;
double PT,AH,NH,AL,NL;
H=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1);
L=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1);
C=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1);
Hn=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,2);
Ln=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,2);
cdp=(H+L+2*C)/4;
AH=cdp+PT;
NH=cdp*2-L;
AL=cdp-PT;
NL=cdp*2-H;
Comment("强支撑:",AL,"弱支撑:",NL,"弱阻力",NH,"强阻力",AH);
ObjectDelete("水平线");
ObjectDelete("水平线1");
ObjectDelete("水平线2");
ObjectDelete("水平线3");
ObjectCreate("水平线",OBJ_HLINE,0,D' 10:30',AL);
ObjectCreate("水平线1",OBJ_HLINE,0,D' 10:30',NL);
ObjectCreate("水平线2",OBJ_HLINE,0,D' 10:30',NH);
ObjectCreate("水平线3",OBJ_HLINE,0,D' 10:30',AH);
return(0);
//+------------------------------------------------------------------+
*  比如我们也不知道是什么东东
什么水平线?
* 第一步要做的就是把它当着是一个“子程式”
这样想你应该知道怎样加入你的EA里去
* 首先在“主程式”加入
水平线(){
//这里加入程式
水平线(){
double cdp,H,L,C,Hn,Ln;
double PT,AH,NH,AL,NL;
H=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1);
L=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1);
C=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1);
Hn=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,2);
Ln=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,2);
cdp=(H+L+2*C)/4;
AH=cdp+PT;
NH=cdp*2-L;
AL=cdp-PT;
NL=cdp*2-H;
Comment("强支撑:",AL,"弱支撑:",NL,"弱阻力",NH,"强阻力",AH);
ObjectDelete("水平线");
ObjectDelete("水平线1");
ObjectDelete("水平线2");
ObjectDelete("水平线3");
ObjectCreate("水平线",OBJ_HLINE,0,D' 10:30',AL);
ObjectCreate("水平线1",OBJ_HLINE,0,D' 10:30',NL);
ObjectCreate("水平线2",OBJ_HLINE,0,D' 10:30',NH);
ObjectCreate("水平线3",OBJ_HLINE,0,D' 10:30',AH);
return(0);
* 这样就完成“偷师”的方案。
* 希望牛版主不介意,把这个当教材
哈哈和。。。
第拾贰课:偷师2
* 看看这个EA,学习学习
#property copyright "Copyright 2008, Xilin Lu ( Zhejiang Lanxi
#property link. ""
//+------------------------------------------------------------------+
//| 交易变量。
//+------------------------------------------------------------------+
extern double nLotsNumber = 0.1; // 每次交易手数
extern double nMaxMargin = 0.3; // 最大保证金使用比率
extern double nGainPoint = 20; // 止赢点数
extern double nLossPoint = 50; // 止损点数
//+------------------------------------------------------------------+
//| 全局变量。
//+------------------------------------------------------------------+
int nAllowSend=0; // 是否允许下单变量
//+------------------------------------------------------------------+
int start() {
double YyBaoZhenJing,KyBaoZhenJing,XyBaoZhenJ
int cnt,total,nTradingMode,i;
//--- 判断K线开盘时间,以减少运行次数。 ------------------
if( Minute() ==0 ) { return(0); } // 正点时间任何时间段均不运行。
if( Minute()&3 ) { nAllowSend=0; return(0); } //
从此行起可以编写您认为有价值的交易时间,我们现在是开盘3分钟内。
//-------------------------------------------------------------
//--- 判断是否已下单。 ----------------------------------------
if( nAllowSend==1 ) { return(0); } //
本次循环已下单,不能重复下单。它在Minute()&=3时重新置为可下单
//-------------------------------------------------------------
//-- 检查开仓信息于,若有则平仓 -------------------------------
total=OrdersTotal();
if( total != 0 )
for(cnt=0;cnt&cnt++)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol())
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
//-------------------------------------------------------------
//--- 如果开仓保证金超过上限,则返还不交易。 ------------------
KyBaoZhenJing = AccountFreeMargin();
YyBaoZhenJing = AccountMargin();
if( YyBaoZhenJing / (YyBaoZhenJing + KyBaoZhenJing)
&= nMaxMargin ) { return(0); }
//-------------------------------------------------------------
//--- 重新评估开仓保证金,如果开仓保证金超过上限,则返还不交易。 ------
XyBaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); //
一个标准手需保证金金额。
XyBaoZhenJing = XyBaoZhenJing * nLotsN // 下单需用的保证金
if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing)
&= nMaxMargin ) { return(0); }
//---------------------------------------------------------------------
//+--- 判断条件
-----------------------------------------------------+
// 注意:你可以在这里编写一些判断条件,
// 当条件满足时再发出下定单指令,否则 return(0);
// 它就是你的智能交易系统了,祝你成功!
//+------------------------------------------------------------------+
//--- 发送定单。 ----------------------------
i=OrderSend(
Symbol(),OP_BUY,nLotsNumber,Ask,3,Ask-nLossPoint*Point,Ask+nGainPoint*Point,"H1
Open Buy",1234,0,Green);
if(i&0 ) { Alert( "买进",Symbol(),",开仓成功!" );
nAllowSend=1; } // 发送成功,将nAllowSend=1防止重复下单。
else { Alert( "买进",Symbol(), ",开仓不成功!" ); }
//-------------------------------------------------------------
return(0);
//+------------------------------------------------------------------+
* 以上EA是“一气呵成”的写法
* 这种编写方式是“有经验”的写法
不值得速成班学员学习
只能看看就好
* 这EA有一段可取之处
就是保证金的处理
//--- 如果开仓保证金超过上限,则返还不交易。 ------------------
KyBaoZhenJing = AccountFreeMargin();
YyBaoZhenJing = AccountMargin();
if( YyBaoZhenJing / (YyBaoZhenJing + KyBaoZhenJing)
&= nMaxMargin ) { return(0); }
//-------------------------------------------------------------
//--- 重新评估开仓保证金,如果开仓保证金超过上限,则返还不交易。 ------
XyBaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); //
一个标准手需保证金金额。
XyBaoZhenJing = XyBaoZhenJing * nLotsN // 下单需用的保证金
if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing)
&= nMaxMargin ) { return(0); }
* 这一小段,我们可以放在
战场策略开始那边,一开始策略就先判断保证金
* 怎样“偷师”呢!
这就是重要的两段话,我把它弄简单一点
//--- 如果开仓保证金超过上限,则返还不交易。 ------------------
if( AccountMargin() / (AccountMargin() + AccountFreeMargin())
&= 1 ) { return(0); }
BaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); //
一个标准手需保证金金额。
BaoZhenJing = BaoZhenJing * LotMM ; // 下单需用的保证金
if( (AccountMargin()+BaoZhenJing) /
(AccountMargin()+AccountFreeMargin()) &= 1 ) {
return(0); }
//---------------------------------------------------------------------
copy&press这段去
zhangchang(){
//开始这边
* 然后,应该有一个新的词句
加到#property上面就可以了。
* 我不知道有没有效
你自己试一试看看
* 为什么要你试
因为学习就是试一试
第拾叁课:偷师3
* 看看这个某位网友发表的EA,学习学习
* 一些交易系统的编写心得我编写EA的目的:建立系统的交易方法,
机械化运行,排除情感的影响,实现稳定赢利。
做EA一年了,最初做的是突破系统,依据突破方向追买追卖,
测试近半年,效果一般,决定放弃,但这个EA使我坚信了一点,
即只有跟着趋势交易才能实现EA的稳定赢利。
因此,我认为要做一个成功的EA,关键就在于如何应用一切可能的方法去判断趋势。
我发现很多很普通的指标都很容易做到这点,
举个例子,GBP/USD日线图,用一个长周期的RVI做趋势判断(RVI-110),
当RVI在“0”值上方趋势为上升,反之则为下降,
开仓及平仓用一个短周期RVI做信号指示(RVI-13),
在上升趋势时,采用RVI MAIN 上穿RVI SIGNAL作为买入信号;
在下降趋势时,采用RVI MAIN 下破RIV SIGNAL作卖出信号,
这个系统很简单,却很实用,配合好的止损止赢策略,
赢利是有保证的,我还为此编写了一个EA,
有兴趣的可以看看(附MQ4文件,写得很粗糙,高手别笑话)。
//+------------------------------------------------------------------+
//| RVITradeSys.mq4 |
//| Copyright 2007, ABKCN|
//+-----------------------------------------------------------------
extern double TakeProfit = 400;
extern double Lots = 0.1;
extern double TrailingStop = 80;
extern double Stops=200;
extern double RVIPERIODSHORT=13;
extern double RVIPERIODLONG=110;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int init ()
Points = MarketInfo (Symbol(), MODE_POINT);
return(0);
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int start()
double RVISIGNAL_C=0, RVISIGNAL_P=0,RVIMAIN_C=0,RVIMAIN_P=0;
double RVISIGNAL15_C,RVISIGNAL15_P,RVIMAIN15_C,RVIMAIN15_ P;
double TRENDSIDE=2,BSSIGNAL=2;
double LONGRVISIGNAL_C=0, LONGRVISIGNAL_P=0;
int cnt=0,
if(Bars&100)
Print("bars less than 100");
return(0);
if(TakeProfit&10)
Print("TakeProfit less than 10");
return(0);
//==================================================
===========
RVISIGNAL_C=iRVI(NULL,0,RVIPERIODSHORT,MODE_SIGNAL ,0);
RVISIGNAL_P=iRVI(NULL,0,RVIPERIODSHORT,MODE_SIGNAL ,1);
RVIMAIN_C =iRVI(NULL,0,RVIPERIODSHORT,MODE_MAIN,0);
RVIMAIN_P =iRVI(NULL,0,RVIPERIODSHORT,MODE_MAIN,1);
LONGRVISIGNAL_C=iRVI(NULL,0,RVIPERIODLONG,MODE_SIG NAL,0);
//==================================================
===========
if(OrdersTotal()&1)
if(AccountFreeMargin()&(1000*Lots))
Print("We have no money");
return(0);
//计算大方向及买卖信号
if (LONGRVISIGNAL_C&0) { TRENDSIDE=0;
}//0为上升1为下降
if (LONGRVISIGNAL_C&0) { TRENDSIDE=1; }
if (RVIMAIN_P&=RVISIGNAL_P
RVIMAIN_C&RVISIGNAL_C) { BSSIGNAL=0; }
//0买入1卖出
if (RVIMAIN_P&=RVISIGNAL_P
RVIMAIN_C&RVISIGNAL_C) { BSSIGNAL=1; }
//BUY CONDITIONS
if(TRENDSIDE==0 && BSSIGNAL==0)
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Stops*Points,Ask+TakeProfit*Points,"macd
sample",16384,0,Red);
if(GetLastError()==0)Print("Order opened :
",OrderOpenPrice());
return(0);
//SELL CONDITIONS
if(TRENDSIDE==1 &&
BSSIGNAL==1)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Stops*Po
ints,Bid-TakeProfit*Points,"macd sample",16384,0,Red);
if(GetLastError()==0)Print("Order opened :
",OrderOpenPrice());
return(0);
return(0);
//平仓处理及追踪止损
total=OrdersTotal();
for(cnt=0;cnt&cnt++)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()&=OP_SELL
OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(TRENDSIDE==1 &&
BSSIGNAL==1)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
return(0);
if(TrailingStop&0)
if(Bid-OrderOpenPrice()&Points*TrailingStop)
if(OrderStopLoss()&Bid-Points*TrailingStop)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Points*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
if(TRENDSIDE==0 &&
BSSIGNAL==0)
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
return(0);
if(TrailingStop&0)
if((OrderOpenPrice()-Ask)&(Points*TrailingStop))
if(OrderStopLoss()==0.0 ||
OrderStopLoss()&(Ask+Points*TrailingStop))
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi
nts*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
return(0);
// the end.
* 这个EA也是“一气呵成”的EA
不值得速成班学员为学习EA的榜样
* 那看来作什么呢?
答案是:自我学习
* 学习什么呢?
* 因为速成班学员个个都是“编写懒惰虫”
也不可以这么讲
因为我们不会什么C++啊!
怎样编怎样写啊!
总得找出路嘛!
因此我们最精通的就是“移花接木”
* 请学员们把以上的EA
移花接木的放到自己的EA上去
* 方法简单:
第一步:copy&press指标
把他弄成子程式
把他的战场策略移植到我们的
战场策略,完毕。
就是这么简单。
* 为什么可以这样的简单?
其它的源码呢!
对,其它的就不要了
* 为什么?
因为我们的速成班EA结构no1啊!
无限发展空间啊!
你还不知道吗?
哈哈和。。。
&&&&&&&&&&&&&&&&&&&&&&&
第拾肆课:如何加其它指标
* 如何添加macd指标
//+------------------------------------------------------------------+
//| MT4-EA制作速成班.mq4 |
//| Copyright 2007, MT4-EA制作速成班. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, MT4-EA制作速成班."
#property link
extern double ma1=1,ma2=2;
double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2
////////////////////////
extern string _资金管理_ ="任选一个";
extern bool zijiguanli1=//false true、、
extern bool zijiguanli2=//false true、、
extern bool zijiguanli3=//false true、、
extern bool maok=//false true、、
extern bool macdok=//false true、、
///////////////////////////////////
extern double cheng=1;
double aa=0;
int s=0,b=0;
double CurrentBasket=0;
double LotMM=0;
double lotstart=0;
double LotsMax=100;
extern double lotab=0.1;
double lots=0;
double TP=100,TPP=0,SL=200,SLL=0;
int slip=6;
//////////////////////////////////
double mode=0;
double LastOrderT
double LastP
double LastP
double LastP
double OpenS
double OpenSellS
double OpenB
double OpenBuyS
///////////////////////////////
extern int TrailingStop=0;
///////////////////////////////
string text="";
////////////////////////
double MacdCurrent, MacdP
double Macd_1, Macd_2, Macd_3, Macd_4, Ma_Quick, Ma_S
double MaCurrent, MaP
double top,
////////////////////////////
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
return(0);
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
return(0);
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
jiancha();//检查判断
MoneyManagement();//资金管理
macd();//指标管理
ma();//指标管理
zhangchang();//战场管理
xianshi();//显示管理
TrailingStop();//移动止赢
return(0);
//+------------------------------------------------------------------+
void jiancha()
for (int cnt=0; cnt&=OrdersTotal(); cnt++)
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() )
mode=OrderType();LastOrderType=OrderType();
if (OrderType() == OP_SELL){ s++;
LastPricesell=OrderOpenPrice();}
if (OrderType() == OP_BUY ){ b++;
LastPricebuy=OrderOpenPrice();}
LastPrice=OrderOpenPrice();
if (OrderType()==OP_SELL) {OpenSells++;}
if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
if (OrderType()==OP_BUY) {OpenBuys++;}
if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
}//end jiancha
//+------------------------------------------------------------------+
void MoneyManagement() {
lotstart=(AccountBalance()*lotab/10000);
if(cheng==0){cheng=1;}
CurrentBasket=AccountEquity()-AccountBalance();
/////////////////////////////////////////////////////////////////
if(zijiguanli1){ LotMM =}
/////////////////////////////////////////////////////////////////
if(zijiguanli2){
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2);
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(zijiguanli3){
if(s+b==0){aa=1;}
if(s+b==1){aa=3;}
if(s+b==2){aa=7;}
if(s+b==3){aa=11;}
if(s+b==4){aa=20;}
if(s+b==5){aa=31;}
if(s+b==6){aa=42;}
if(s+b==7){aa=54;}
if(s+b==8){aa=66;}
if(s+b==9){aa=76;}
if(s+b&=10){aa=66;}
if(CurrentBasket&0 )
{LotMM=NormalizeDouble(lotstart*aa,2); }
if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
/////////////////////////////////////////////////////////////////
if(LotMM&lots){LotMM=}
if(LotMM&LotsMax){LotMM=LotsM}
}//end zijiguanli
//+------------------------------------------------------------------+
void macd() {
Macd_1 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,1);
Macd_2 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,2);
Macd_3 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,3);
Macd_4 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,4);
Ma_Quick = iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,0);
Ma_Slow = iMA(NULL,0,65,0,MODE_EMA,PRICE_CLOSE,0);
top = High[iHighest(NULL,0,MODE_HIGH,10,1)];
bottom = Low[iLowest(NULL,0,MODE_LOW,10,1)];
//+------------------------------------------------------------------+
ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
//+------------------------------------------------------------------+
void zhangchang() {
//这边要写一些东西
if(ma1now&ma2now
ma1now2&ma2now2
){buyme();}
if(ma1now&ma2now
ma1now2&ma2now2
){sellme();}
if(macdok){
&& Macd_1 &
&& Macd_2 &
&& Ma_Quick &
&& Macd_2 & 0
//&& Macd_2 &
//&& Macd_3 &
//&& Ma_Quick &
//&& Bid & Low[2]
&& Macd_3 & 0
{sellme(); }
if( s+b==0
&& Macd_1 & Macd_2
&& Macd_2 &
&& Ma_Quick &
Ma_Slow && Ask &
High[1] && Macd_2 &
//&& Macd_2 &
//&& Macd_3 & Macd_4
&& Ma_Quick &
//&& Ask & High[2]
&& Macd_3 & 0
{ buyme(); }
} //end macd
}//end zhangchang&
TA的推荐TA的最新馆藏

我要回帖

更多关于 mt4 ea交易 的文章

 

随机推荐