怎样限制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 Corp.&
#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 Corp.&
#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
因为是亏钱的EA
哈哈和。。。
* 有什么问题要问吗?
但是我老实告诉你
我是自学成功的,没有上过什么EA课程
不要问太深奥或无聊的问题
我可能不知道怎样答你的问题。
哈哈和。。。
* 你会发现问题??。。。
然后告诉我上面问题。。。
这就是你今天的功课
哈哈和。。。
第六课-解决出错问题
* 如果你有做功课
你会知道以上的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了
* 试一试用一用?
效果怎样?
是不是有一点怪怪?
又出错了?
又是功课的时间
告诉我又发生什么事情。。。
* 编写EA就是解决问题
当你是解决问题高手
你就是编写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制作速成班. |
//+------------------------------------------------------------------+
#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;
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&, Silver);
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. |
//+------------------------------------------------------------------+
#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,学习学习
* /* 尚未通过检测
//+------------------------------------------------------------------+
//| WYD_AE_H1.mq4 |
//| Copyright 2008, Xilin Lu ( Zhejiang Lanxi ) |
//+------------------------------------------------------------------+
================================================== =========================
功能简介: 本智能的中文名字:开门见喜。
工作原理:本智能交易以一小线的开盘价和收盘价为触发器。
在每H1线形成的过程中,开盘3分钟内执行。
当 Minute()&=3 时:
第一步,首先检查是否未平仓的单子,若有则平仓。
第二步,开新单,开仓前检查资金是否足够。不够时不能下单。
注意事项:虽然本智能对图表的运行时间没有要求,但它只在( Minute()&0 && Minute()&=3 )
时段才有可能下单,这样做不仅能保证是H1的开盘价送单,而且可大大节约运算时间。
================================================== =================== + */
#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啊!
无限发展空间啊!
你还不知道吗?
哈哈和。。。
* 如果你做不到
你就别想成为EA策略高手!
哈哈和。。。
第拾肆课:如何加其它指标
* 如何添加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
&& Macd_2 & Macd_3
&& Ma_Quick & Ma_Slow
&& Bid & Low[1]
&& Macd_2 & 0
//&& Macd_2 & Macd_3
//&& Macd_3 & Macd_4
//&& Ma_Quick & Ma_Slow
//&& Bid & Low[2] && Macd_3 & 0
{sellme(); }
if( s+b==0
&& Macd_1 & Macd_2 && Macd_2 & Macd_3
&& Ma_Quick & Ma_Slow && Ask & High[1] && Macd_2 & 0
//&& Macd_2 & Macd_3
//&& Macd_3 & Macd_4 && Ma_Quick & Ma_Slow
//&& Ask & High[2] && Macd_3 & 0
{ buyme(); }
} //end macd
}//end zhangchang
更多股市内幕、实战交流、个股互动请进入中金在线部落&&最火爆的投资交流移动社区,扫描左侧二维码进入体验!详情点击:
是否确认删除这篇文章?
是否确认将这个粉丝放进黑名单?
是否确认这条留言删除?
您确定要删除这条信息?
用手机或者平板电脑扫描应用拍下上方二维码,可以在手机博客继续浏览文本,也可以分享给你的联系人。
以下资料仅供联系使用,请放心填写。
*您的姓名:
*联系电话:
我要给金国之旅送鲜花
您将赠送(朵)鲜花给:金国之旅
(1鲜花 = 0.1人民币)
附言:(不超过100字)
可用金币:
&&&&&&您还需要支付0元人民币

我要回帖

更多关于 开仓价和开盘价的区别 的文章

 

随机推荐