首页学院交易策略EA智能交易文章详细

MT4 EA制作速成班――基础篇

外汇网2021-06-17 09:39:54 77
汇外网 - 全球专业的黄金外汇门户导航行情资讯网站

# 什么是MT4?

我就当你了解什么是MT4了

MT4就是META. TRADER 4

# 什么是EA?

我也当你了解什么是EA了

EA 就是 Expert Adviser

EA 就是智能交易系统

智能教育系统就是:

-软件自己分析下订单

-软件自己分析提成利润

-软件自己分析砍仓止输

# 什么是速成班?

就是你在很短迅速的时期内就可以学会如何编撰EA

是的,快则8个学习小时

慢则24个学习小时

# 什么叫“易学难精”?

就是你迅速的就上手,难在形成厉害的大神。

这需要时间逐渐的去研究编撰。

久而久之你就可以是EA编撰大神了。

05-25-2009 08:56 AM

yes810

第一课::了解EA的形式

* 下方就是EA的编撰形式//

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

//| MT4-EA制作速成班.mq4 |

//| Copyright ?2007, MetaQuotes Software Corp. |

//| http://www.FXunion.com |

//+------------------------------------------------------------------+

#property copyright "Copyright ?2007, MetaQuotes Software Corp."

#property link. "http://www.FXunion.com"

//+------------------------------------------------------------------+

//| 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. |

//| http://www.FXunion.com |

//+------------------------------------------------------------------+

这个是在上面的垃圾

写与不写都无所谓

我们就不用理他

* #property copyright "Copyright ?2007, MetaQuotes Software Corp."

#property link. "http://www.FXunion.com"

这个也是在上面的垃圾

写与不写都无所谓

我们也不用理他

* //+------------------------------------------------------------------+

//| 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制作速成班. |

//| http://www.FXunion.com|

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

//+------------------------------------------------------------------+

//| 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的文件

这文件是不可以被修改的

这文件是加密的

可以卖出的文件。

* 有什么困难要问吗?

但是我告诉你

不要问太深的困难,我是不会的。

05-25-2009 08:59 AM

yes810

第二课:EA重要部分

* 回到EA重要部分

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

//主程式

//----

return(0);

}

//+------------------------------------------------------------------+

* 我们要知道EA是由上面向下读的

所以我们在编撰方面要有逻辑思考

下方是速成班编撰的形式

//+------------------------------------------------------------------+

//| 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() {

}

//+------------------------------------------------------------------+

/////end

* // 这两划代表右边的不要读

也可以说是注解

注意:EA不会读中文符号。比如这个“”

这个就可以 ""

* 我们可以完整他

//+------------------------------------------------------------------+

//| MT4-EA制作速成班.mq4 |

//| Copyright 2007, MT4-EA制作速成班. |

//| http://www.FXunion.com|

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

//+------------------------------------------------------------------+

//| 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() {

//子程式

//这边要写一部分东西

}

//+------------------------------------------------------------------+

/////end

* 假使你在上面加这个xianshi2();

下面就加这个

//////////////////////////

void xianshi2() {

//这边要写一部分东西

}

////////////////////////////

可以任意无限的加。

* 有什么困难要问吗?

但是我老实告诉你

不要问太深的困难,我是不会回答的。

05-25-2009 09:03 AM

yes810

第三课::加入指标

* //////////////////////////////

void ma()

{

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_OPEN,0);

ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_OPEN,0);

}

////////////////////////

ma1now是代表的字

你可以写成什么都可以

PR洲际交易所_CLOSE是ma最新的参数

PR洲际交易所_OPEN是ma开始的参数

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,0);

这个整句是死的。

你只要copy&press就可以用了

ma1是ma的参数号码或bar

假使如此写法,他人不能更改参数

double ma1=1,ma2=2;

double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

如此写法,他人可以更改参数

extern double ma1=1,ma2=2;

这个是要放在#property上面那边的

* 其它指标的写法

macd1now=iMACD(NULL,0,macd1,macd1*2,1,PR洲际交易所_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制作速成班. |

//| http://www.FXunion.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

extern double ma1=1,ma2=2;

double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

//+------------------------------------------------------------------+

//| 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()

{

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_OPEN,0);

ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_OPEN,0);

}

//+------------------------------------------------------------------+

void zhangchang() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void buyme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void sellme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void buyme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void xianshi() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

/////end

* 注意这个{},不要糊涂的删除了也不晓得

会出错的

注意这个可以写成如此

效果一样

double ma1=1;

double ma2=2;

double ma1now;

double ma1now2;

double ma2now;

double ma2now2;

double ma1bnow;

double ma2bnow;

* extern double ma1=1;

extern double ma2=2;

如此写可以表明在EA开始的修改处

* 有什么困难要问吗?

但是我老实告诉你

不要问太深的困难

或许我也不会回答的。

05-25-2009 09:07 AM

yes810

第四课-资金管理

* 这个将放在#property上面那边

////////////////////////

extern string _资金管理_ ="任选一个";

extern bool zijiguanli1 = true;//false true、、

extern bool zijiguanli2= false;//false true、、

extern bool zijiguanli3= false;//false true、、

///////////////////////////////////

true=要

false =不要用

我给予了三个资金管理作为参考

你可以自己增长自己喜欢的资金管理方案

* /////////////////////////////////////

void MoneyManagement() {

lotstart=(AccountBalance()*lotab/10000);

lots=lotstart;

if(cheng==0){cheng=1;}

CurrentBasket=AccountEquity()-AccountBalance();

/////////////////////////////////////////////////////////////////

if(zijiguanli1){ LotMM = lots;}

/////////////////////////////////////////////////////////////////

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

if(LotMM>LotsMax){LotMM=LotsMax;}

}//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(){}

很容易用,比如:

if(LotMM

意思就是:

假使LotMM小过lots,LotMM就等于0.01。

if(LotMM>LotsMax){LotMM=LotsMax;}

意思就是:

假使LotMM大过LotsMax,LotMM就等于LotsMax。

不会的话,不要紧

copy&press就可以用了

把void MoneyManagement() { }

copy&press到我们EA模板去

结果如下://

* +------------------------------------------------------------------+

//| MT4-EA制作速成班.mq4 |

//| Copyright 2007, MT4-EA制作速成班. |

//| http://www.FXunion.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

extern double ma1=1,ma2=2;

double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

////////////////////////

extern string _资金管理_ ="任选一个";

extern bool zijiguanli1= true;//false true、、

extern bool zijiguanli2= false;//false true、、

extern bool zijiguanli3= false;//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);

lots=lotstart;

if(cheng==0){cheng=1;}

CurrentBasket=AccountEquity()-AccountBalance();

/////////////////////////////////////////////////////////////////

if(zijiguanli1){ LotMM = lots;}

/////////////////////////////////////////////////////////////////

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

if(LotMM>LotsMax){LotMM=LotsMax;}

}//end zijiguanli

//+------------------------------------------------------------------+

void macd() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void ma()

{

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_OPEN,0);

ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_OPEN,0);

}

//+------------------------------------------------------------------+

void zhangchang() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void buyme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void sellme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void buyme() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void xianshi() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

/////end

* 资金管理有三个方案:

资金管理1=平注

资金管理2=1,2,3,4,5...

可以乘,假使你把cheng改成2或3或0.2

资金管理3是固定式,1,3,7,11.。

* 不明白?别急,用了就明白。

有什么困难要问吗?

但是我老实告诉你

我是自学成功的,没有上过什么EA课程

不要问太深的困难

或许我也不会回答的。

05-25-2009 09:14 AM

yes810

第五课:策略:战场

* 这里是整个EA最重要的地方

这里策略改变无穷

高深莫测就是这里作怪

* 在这里你要想:。

你的EA要怎样下注

何时买上?

何时买下?

怎样买上?

怎样买下?

有买上又买下?

何时退场?

条件满足是很重要的

* 在这里我给个简单的策略

-ma1黄金交叉ma2,EA买上

-ma1死亡交叉ma2,EA买下

-有赚25点就出场

-假使亏的时机亏50点就出场

* 是如此编撰的:

ma1now>ma2now

如此一句是不够条件的

ma1now>ma2now

&& ma1now2

这个就是黄金交叉的编撰法

* 倒过来

ma1now

&& ma1now2>ma2now2

这个就是死亡交叉的编撰法

* 但是条件依旧不够的

再加

ma1now>ma2now

&& ma1now2

&& s+b==0

+b==0 意思就是 买上+买下等于没有

没有下注,假使遇到条件符合就可下方注的意思

amp;& 的意思就是“再加”什么什么的条件

那么整句是如此编撰

if(什么什么){就什么什么}

就是用这个

if(ma1now>ma2now

&& ma1now2

&& s+b==0

){buyme();

}

if(ma1now

&& ma1now2>ma2now2

&& s+b==0

){sellme();

}

* 当下我们就把这两句copy&press到战场去

注意:

当下又多了两个新的东西

buyme()和sellme()

你就copy&press buyme()和sellme()的编撰法就可以了。

* 结果如下:

//+------------------------------------------------------------------+

//| MT4-EA制作速成班.mq4 |

//| Copyright 2007, MT4-EA制作速成班. |

//| http://www.FXunion.com|

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

extern double ma1=1,ma2=2;

double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

////////////////////////

extern string _资金管理_ ="任选一个";

extern bool zijiguanli1= true;//false true、、

extern bool zijiguanli2= false;//false true、、

extern bool zijiguanli3= false;//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);

lots=lotstart;

if(cheng==0){cheng=1;}

CurrentBasket=AccountEquity()-AccountBalance();

/////////////////////////////////////////////////////////////////

if(zijiguanli1){ LotMM = lots;}

/////////////////////////////////////////////////////////////////

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

if(LotMM>LotsMax){LotMM=LotsMax;}

}//end zijiguanli

//+------------------------------------------------------------------+

void macd() {

//这边要写一部分东西

}

//+------------------------------------------------------------------+

void ma()

{

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,0);

ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PR洲际交易所_OPEN,0);

ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PR洲际交易所_OPEN,0);

}

//+------------------------------------------------------------------+

void zhangchang() {

//这边要写一部分东西

if(ma1now>ma2now

&& ma1now2

&& s+b==0

){buyme();

}

if(ma1now

&& ma1now2>ma2now2

&& s+b==0

){sellme();

}

}

//+------------------------------------------------------------------+

void buyme(){

if (TP==0) { TPP=0; } if(TP>0) { TPP=Ask+TP*Point; }

if (SL==0) { SLL=0; } if(SL>0) { SLL=Ask-SL*Point; }

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课程

不要问太深奥或无聊的困难

我或许不晓得怎样答你的困难。

哈哈和。

* 你会发现困难??。

然后告诉我上面困难。

这就是你今天的功课

再见

哈哈和。

05-25-2009 09:18 AM

yes810

第六课-处理出错困难

* 假使你有做功课

你会知道以上的EA依旧不能用

由于出错了

出错是常事

没有什么了不起

没有什么大事

* 当你按在METAEDITOR按“编撰”时

最以下会告诉你出错了

按一按以下的出错

他会告诉你在那里出错了

第一:intdouble CurrentBasket=0;

多了 int

删掉 int 就可以了

//int 是表明要“整数”比如:1,2,3,4...

//double 表明要有小数点,比如:1.1,7.987.56.897.....

* 之后你在按一下“编撰”

他告诉你

第二:ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PR洲际交易所_CLOSE,1);

ma10,意思就是没有ma10这个新词句

其实我们没有用到ma10

是编撰错误

不是ma10,是多了个0

应当是ma1

删掉 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

所以可以删掉 ticket= 就可以了

* 再来。他告诉你多了这个

void buyme() {

//这边要写一部分东西

}

由于已经有了的,哈哈和。

是糊涂多了一个

删掉 整句多余的buyme() 就可以了

* 再来。

0错误 0警示

哈哈和。

成功了

恭喜你已经学会编撰EA了

* 试一试用一用?

效果怎样?

是不是有一点怪怪?

又出错了?

又是功课的时间

告诉我又发生什么事情。

* 编撰EA就是处理困难

当你是处理困难大神

你就是编撰EA大神

哈哈和。

05-25-2009 09:22 AM

yes810

第七课-填写盈亏

上一回我们讲到

-有赚25点就出场

-假使亏的时机亏50点就出场

这个还没有加之去

编撰方法就是

Take Profit=25

Stop Loss=50

我把他们简写成

TP=25;

SL=50;

你想到了什么吗?

对,这字眼很熟吧!

记得吗?

double TP=0,TPP=0,SL=0,SLL=0;

我们改成

double TP=25,TPP=0,SL=50,SLL=0;

你发现吗?

然而下注方面依旧有困难!

其实是这EA没有分析

什么是B

什么是S

B是buy

S是sell

速成班不必学会怎样写

你只要copy&prss下面的子程式

放进去就可以了

我把它称为检查

//////////////////////////////////////////

void jiancha()

{

=0;s=0;

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上面那边

新的词句:

mode

LastOrderType

LastPricesell

LastPricebuy

LastPrice

OpenSells

OpenSellStops

OpenBuys

OpenBuyStops

我们更正如下:

double mode=0;

double LastOrderType;

double LastPricesell;

double LastPricebuy;

double LastPrice;

double OpenSells;

double OpenSellStops;

double OpenBuys;

double OpenBuyStops;

按“编撰”。

0错误 0警示

ok了

按“终端”试一试效果怎样

依旧不行

依旧buy sell buy sell buy sell

你知道什么事情发生了吗?

跟你讲一个逻辑

什么是主程式

就是首要的程式

什么是子程式

就是不是首要的程式

了解了这些

当下一个困难,这些子程式

MoneyManagement();

//资金管理

macd();

//指标管理

ma();

//指标管理

zhangchang();

//战场管理

buyme();

//买上

sellme();

//买下

xianshi();

//表明管理

那些是不需要一直用的就不可以在主程式这里

对啦!

uyme();

//买上

sellme();

//买下

是有时用到,有时没有用

所以我们删掉它

当下这个EA可以正常的操作了

其编撰程式如下:

注意颜色部分的位置

//+------------------------------------------------------------------+

//| MT4-EA制作速成班.mq4 |

//| Copyright 2007, MT4-EA制作速成班. |

//| http://www.FXunion.com|

//+------------------------------------------------------------------+

#property copyright "Copyright 2007, MT4-EA制作速成班."

#property link. "http://www.FXunion.com"

extern double ma1=1,ma2=2;

double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

////////////////////////

extern string _资金管理_ ="任选一个";

extern bool zijiguanli1= true;//false true、、

extern bool zijiguanli2= false;//false true、、

extern bool zijiguanli3= false;//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 LastOrderType;

double LastPricesell;

double LastPricebuy;

double LastPrice;

double OpenSells;

double OpenSellStops;

double OpenBuys;

double OpenBuyStops;

//+------------------------------------------------------------------+

//| 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()

{

=0;s=0;

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);

lots=lotstart;

if(cheng==0){cheng=1;}

CurrentBasket=AccountEquity()-AccountBalance();

/////////////////////////////////////////////////////////////////

if(zijiguanli1){ LotMM = lots;}

/////////////////////////////////////////////////////////////////

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;}

标签:

随机快审展示
加入快审,优先展示

加入VIP