# 什麼是MT4?
我就當你了解什麼是MT4了
MT4就是META. TRADER 4
# 什麼是EA?
我也當你了解什麼是EA了
EA 就是 Expert Adviser
EA 就是智能交易系統
智能教育系統就是:
-軟件自己判斷下訂單
-軟件自己判斷提成利潤
-軟件自己判斷砍倉止輸
# 什麼是速成班?
就是你在很短很快的時間內就可以學會如何編寫EA
是的,快則8個學習小時
慢則24個學習小時
# 什麼叫“易學難精”?
就是你很快的就上手,難在成為厲害的高手。www.emoneybtc.com
這需要時間慢慢的去研究編寫。
久而久之你就可以是EA編寫高手了。
第一課::了解EA的形式
* 以下就是EA的編寫形式//#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#property link ""
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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的編寫形式我們改成如下:#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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();
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不會讀中文符號。比如這個“”
這個就可以 ""#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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_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,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了
更改如下:
注意看看
剛剛的指標加在什麼地方
什麼位置#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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小過lots,LotMM就等於0.01。
if(LotMM>LotsMax){LotMM=LotsMax;}
意思就是:
如果LotMM大過LotsMax,LotMM就等於LotsMax。
不會的話,不要緊
copy&press就可以用了
把void MoneyManagement() { }
copy&press到我們EA模板去
結果如下://#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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改成2或3或0.2
資金管理3是固定式,1,3,7,11.。。
第五課:策略:戰場
* 這裡是整個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()的編寫法就可以了。
* 結果如下:#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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
因為是虧錢的EA
第六課-解決出錯問題
* 如果你有做功課
你會知道以上的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了
編寫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
B是buy
S是sell
速成班不必學會怎樣寫
你只要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可以正常的操作了
其編寫程式如下:
注意顏色部分的位置#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#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;
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可以正常操作了!
第八課-移動止贏
移動止贏就是贏到盡頭的意思
不必學會怎樣寫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;
自己試一試看看效果如何?
怎樣?容易嗎?
外_匯_邦 WaiHuiBang.com第九課-顯示畫面
顯示的子程式如下
//////////////////////////////////////////////
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);
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);
區塊鏈作為一種新型的數據存儲機制,會有其歷史地位,但卻不是解決所有問題的萬金油。能源領域的區塊鏈項目目前來看並不具備太大可行性和必要性,比
基於許可的賬本可能有一個或多個擁有者。當一條新紀錄被添加進去後,賬本的完整性是由一個有限的共識過程去檢查。這是由少數被信任的個人或機構去執
百威英博非洲正推出區塊鏈解決方案,以幫助農戶監測作物銷售跨國釀酒公司百威英博非洲(AB InBev Africa)正在推出區塊鏈解決方案,
近日,Ripple與沙特阿拉伯貨幣管理局(SAMA)簽署協議,建立跨境支付的試點項目。該試點項目允許參與的沙特銀行利用分布式技術(DLT
區塊鏈之下,全球連接的空間更緊密,6度空間在未來會變成5度乃至4度,區塊鏈可以激發各種社群的成長。興趣小組全球化會成為必然,未來世界會有各
歡迎訪問 外 匯 邦 WWW.WaiHuiBang.com 美聯儲加息和黃金之間
基本信息 建信現金添利貨幣,基金代碼是000693。集中認購時間為9.09-9.15。基金托管方為交通銀行,管理人為
在炒匯當中,有五種心理弱點最容易導致投資者失敗,必須注意加以克服: 盲目膽大心理。有些投資者從未認真系統地學習過投資理論技巧,也沒有經過任
最佳答案: 想要領取生育保險必須要滿足一定的參保時間,每個地方的政策不一樣。北京需要連續繳滿9個月,
最佳答案: 寫書評賺錢的正規網站有很多,下面主要介紹以下三個:1、頭條號。創作者可以通過頭條號網頁後