Onada 2015 最佳cfd 公司

優惠活動中 開戶入金200美金  獲得獎金100美金  歡迎詢問

開戶連結 

https://au.oanda.com/your_account/fxtrade/register/individual/beforeyoubegin?ib=830321

 

如果你有開戶需要 請加lin honlin2015 群組 onada  諮詢  現在開戶入金200美金送100美金 機會有限 

 

第一課::瞭解EA的形式

 

* 以下就是EA的編寫形式//

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

//| MT4EA製作速成班.mq4 |

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

//| http://blog.sina.com.cn/zhouxiaoyin18 |

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

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

#property link. "http://blog.sina.com.cn/zhouxiaoyin18"

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

//----

//----

return(0);

}

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

 

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

//| MT4EA製作速成班.mq4 |

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

//| http://blog.sina.com.cn/zhouxiaoyin18|

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

這個是在上面的垃圾

寫與不寫都無所謂

我們就不用理他

 

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

#property link. "http://blog.sina.com.cn/zhouxiaoyin18"

這個也是在上面的垃圾

寫與不寫都無所謂

我們也不用理他

 

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

//| expert initialization function |

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

int init()

{

//----

//以後可能有用到

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//以後可能有用到

//----

return(0);

}

這兩個很少用到。高高手才會用

速成班的話,這個可以不用理他。

放在一邊先,以後才學怎樣用它。

 

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

//| expert start function |

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

int start()

{

//----

//主程式

//----

return(0);

}

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

這個就是EA開始操作的重要部分

以上的EA的編寫形式我們改成如下:

 

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//| http://blog.sina.com.cn/zhouxiaoyin18|

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link. "http://blog.sina.com.cn/zhouxiaoyin18"

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

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

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不會讀中文符號。比如這個“”

這個就可以 ""

* 我們可以完整他

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//| |

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

#property copyright "Copyright 2007, MT4EA製作速成班."

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

//子程式

//這邊要寫一些東西

}

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

/////end

 

* 如果你在上面加這個xianshi2();

下面就加這個

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

void xianshi2() {

//這邊要寫一些東西

}

                             第三課::加入指標

 

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

void ma()

{

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_CLOSEma最新的參數

PRICE_OPENma開始的參數

ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);

這個整句是死的。

你只要copy&press就可以用了

ma1ma的參數號碼或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,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

更改如下:

注意看看

剛剛的指標加在什麼地方

什麼位置

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

 

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link. ""

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

//這邊要寫一些東西

}

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

/////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開始的修改處

 

                             第四課-資金管理

 

* 這個將放在#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<lots){LotMM=0.01;}

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<lots){LotMM=0.01;}

意思就是:

如果LotMM小過lotsLotMM就等於0.01

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

意思就是:

如果LotMM大過LotsMaxLotMM就等於LotsMax

不會的話,不要緊

copy&press就可以用了

void MoneyManagement() { }

copy&press到我們EA範本去

結果如下://

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//| |

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link. ""

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<lots){LotMM=lots;}

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

}//end zijiguanli

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

void macd() {

//這邊要寫一些東西

}

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

void ma()

{

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

//這邊要寫一些東西

}

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

/////end

 

* 資金管理有三個方案:

資金管理1=平注

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

可以乘,如果你把cheng改成230.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

s+b==0 意思就是 買上+買下等於沒有

沒有下注,如果遇到條件符合就可以下注的意思

&& 的意思就是“再加”什麼什麼的條件

那麼整句是這樣編寫

if(什麼什麼){就什麼什麼}

就是用這個

if(ma1now>ma2now

&& ma1now2<ma2now2

&& s+b==0

){buyme();}

if(ma1now<ma2now

&& ma1now2>ma2now2

&& s+b==0

){sellme();}

* 現在我們就把這兩句copy&press到戰場去

注意:

現在又多了兩個新的東西

buyme()sellme()

你就copy&press buyme()sellme()的編寫法就可以了。

* 結果如下:

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//|  |

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link.

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<lots){LotMM=lots;}

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

}//end zijiguanli

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

void macd() {

//這邊要寫一些東西

}

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

void ma()

{

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

&& s+b==0

){buyme();}

if(ma1now<ma2now

&& 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還是不能用

因為出錯了

出錯是常事

沒有什麼了不起

沒有什麼大事

* 當你按在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,PRICE_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

 

                              第七課-填寫盈虧

上一回我們講到

-有賺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

Bbuy

Ssell

速成班不必學會怎樣寫

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

放進去就可以了

我把它稱為檢查

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

void jiancha()

{

b=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();//顯示管理

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

對啦!

buyme();//買上

sellme();//買下

是有時用到,有時沒有用

所以我們刪掉它

現在這個EA可以正常的操作了

其編寫程式如下:

注意顏色部分的位置

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//|http://blog.sina.com.cn/zhouxiaoyin18|

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link. "http://blog.sina.com.cn/zhouxiaoyin18"

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

{

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

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

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

}//end zijiguanli

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

void macd() {

//這邊要寫一些東西

}

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

void ma()

{

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

&& s+b==0

){buyme();}

if(ma1now<ma2now

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

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

發現新的詞句

cnt

TrailingStop

我們更正如下:

int cnt;

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的基礎上

請加上以下指標

amacd

如果你做不出來

你的基礎都有問題

怎樣更上一層樓呢!

是不是

 

                                  第十一課::偷師

 

* EA速成班的學員是不必學會如何編寫頭痛的程式

不過這一招一定要會“偷師”

* 偷師就是“移花接木”

偷師就是“借花獻佛”

* 怎樣偷師?

就是copy&press那些公開的EA源碼

* 比如:

以下是牛版主公開的源碼

[原創]MT4阻力支撐源碼公佈

本指標為CDP公式在MT4上的實現,使用MT4Expert調用方式,代碼如下:

==================================================

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

//| CDP.mq4 |

//| Copyright ?2005,520FXCorp. |

//| |

//+--------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;

PT=Hn-Ln;

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'2005.11.01 10:30',AL);

ObjectCreate("水平線1",OBJ_HLINE,0,D'2005.11.01 10:30',NL);

ObjectCreate("水平線2",OBJ_HLINE,0,D'2005.11.01 10:30',NH);

ObjectCreate("水平線3",OBJ_HLINE,0,D'2005.11.01 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;

PT=Hn-Ln;

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'2005.11.01 10:30',AL);

ObjectCreate("水平線1",OBJ_HLINE,0,D'2005.11.01 10:30',NL);

ObjectCreate("水平線2",OBJ_HLINE,0,D'2005.11.01 10:30',NH);

ObjectCreate("水平線3",OBJ_HLINE,0,D'2005.11.01 10:30',AH);

return(0);

* 這樣就完成“偷師”的方案。

* 希望牛版主不介意,把這個當教材

哈哈和。。。

05-25-2009 09:54 AM

yes810

第拾貳課:偷師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,XyBaoZhenJing;

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<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()!=Symbol()) continue;

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

if(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

break;

}

}

}

//-------------------------------------------------------------

//--- 如果開倉保證金超過上限,則返還不交易。 ------------------

KyBaoZhenJing = AccountFreeMargin();

YyBaoZhenJing = AccountMargin();

if( YyBaoZhenJing / (YyBaoZhenJing + KyBaoZhenJing) >= nMaxMargin ) { return(0); }

//-------------------------------------------------------------

//--- 重新評估開倉保證金,如果開倉保證金超過上限,則返還不交易。 ------

XyBaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); // 一個標準手需保證金金額。

XyBaoZhenJing = XyBaoZhenJing * nLotsNumber ; // 下單需用的保證金

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 * nLotsNumber ; // 下單需用的保證金

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上面就可以了。

* 我不知道有沒有效

你自己試一試看看

* 為什麼要你試

因為學習就是試一試

05-25-2009 10:10 AM

yes810

第拾三課:偷師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|

//| http://blog.sina.com.cn/zhouxiaoyin18

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

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;

double Points;

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

//| http://blog.sina.com.cn/zhouxiaoyin18

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

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, total;

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

}

}

}

}

else

{

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指標

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

//| MT4EA製作速成班.mq4 |

//| Copyright 2007, MT4EA製作速成班. |

//|    http://blog.sina.com.cn/zhouxiaoyin18

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

#property copyright "Copyright 2007, MT4EA製作速成班."

#property link

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 bool maok= false;//false true、、

extern bool macdok= true;//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 LastOrderType;

double LastPricesell;

double LastPricebuy;

double LastPrice;

double OpenSells;

double OpenSellStops;

double OpenBuys;

double OpenBuyStops;

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

int cnt;

extern int TrailingStop=0;

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

string text="";

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

double MacdCurrent, MacdPrevious;

double Macd_1, Macd_2, Macd_3, Macd_4, Ma_Quick, Ma_Slow;

double MaCurrent, MaPrevious;

double top, bottom;

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

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

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

{

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

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

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

}//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)];

}

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

void ma()

{

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

if(ma1now>ma2now

&& ma1now2<ma2now2

&& s+b==0

){buyme();}

if(ma1now<ma2now

&& ma1now2>ma2now2

&& s+b==0

){sellme();}

}//end ma

if(macdok){

if(

s+b==0

&& Macd_1 < Macd_2

&& Macd_2 > Macd_3

&& Ma_Quick < Ma_Slow

&& Bid < Low[1]

&& Macd_2 > 0

//||

// s+b==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

//||

//s+b==0

//&& Macd_2 > Macd_3

//&& Macd_3 < Macd_4 && Ma_Quick > Ma_Slow

//&& Ask > High[2] && Macd_3 < 0

)

{ buyme(); }

 

} //end macd

}//end zhangchang