龙虎大师

 找回密码
 立即注册

微信登录,快人一步

查看: 532|回复: 50

[MQL4(MT4)] 3 moving averages EA

[复制链接]

504

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81559
发表于 2019-4-29 12:58:22 | 显示全部楼层 |阅读模式
  1. //+------------------------------------------------------------------+
  2. //|                                         Three moving averages EA |
  3. //|                              Copyright ?2008, TradingSytemForex |
  4. //|                                http://www.tradingsystemforex.com |
  5. //+------------------------------------------------------------------+

  6. #property copyright "Copyright ?2008, TradingSytemForex"
  7. #property link "http://www.tradingsystemforex.com"

  8. #define OrSt "Three moving averages EA"

  9. extern string IS="---------------- Indicator Settings";
  10. extern double Short_Period=5;
  11. extern double Middle_Period=15;
  12. extern double Long_Period=30;
  13. extern double Mode_MA=0; //0=simple, 1=exponential, 2=smoothed, 3=linea weighted
  14. extern string LM="---------------- Lot Management";
  15. extern double Lots=0.1;
  16. extern bool MM=false; //money management
  17. extern double Risk=10; //risk in percentage
  18. extern string TSTB="---------------- TP SL TS BE";
  19. bool RealSL_Enabled=false;
  20. int RealSL=5; //stop loss under 15 p頿s
  21. bool RealTP_Enabled=false;
  22. int RealTP=10; //take profit under 10 p頿s
  23. extern int SL=0; //stop loss
  24. extern int TP=0; //take profit
  25. extern int TS=0; //trailing stop
  26. extern int TS_Step=1; //trailing stop step
  27. extern int BE=0; //breakeven
  28. extern string EXT="---------------- Extras";
  29. extern bool Reverse=false;
  30. extern bool Add_Positions=true; //positions cumulated
  31. extern int MaxOrders=100; //maximum number of orders
  32. extern int Magic=0;

  33. int Slip=3;static int TL=0;double MML=0;

  34. // expert start function
  35. int start(){int j=0,limit=1;double BV=0,SV=0;BV=0;SV=0;double SMA1a,SMA1b,SMA2a,SMA2b,SMA3a,SMA3b;
  36.   if(CntO(OP_BUY,Magic)>0) TL=1;if(CntO(OP_SELL,Magic)>0) TL=-1;for(int i=1;i<=limit;i++){
  37.   
  38.   SMA1a=iMA(Symbol(),0,Short_Period,0,Mode_MA,PRICE_CLOSE,i+1);
  39.   SMA1b=iMA(Symbol(),0,Short_Period,0,Mode_MA,PRICE_CLOSE,i);
  40.   SMA2a=iMA(Symbol(),0,Middle_Period,0,Mode_MA,PRICE_CLOSE,i+1);
  41.   SMA2b=iMA(Symbol(),0,Middle_Period,0,Mode_MA,PRICE_CLOSE,i);
  42.   SMA3a=iMA(Symbol(),0,Long_Period,0,Mode_MA,PRICE_CLOSE,i+1);
  43.   SMA3b=iMA(Symbol(),0,Long_Period,0,Mode_MA,PRICE_CLOSE,i);

  44.   if((SMA1a<SMA3a && SMA1b>SMA3b)||(SMA1a<SMA2a && SMA1b>SMA2b && SMA2b>SMA3b)){if(Reverse) SV=1; else BV=1; break;}
  45.   if((SMA1a>SMA3a && SMA1b<SMA3b)||(SMA1a>SMA2a && SMA1b<SMA2b && SMA2b<SMA3b)){if(Reverse) BV=1; else SV=1; break;}}

  46. // expert money management
  47. if(MM){if(Risk<0.1 || Risk>100) {Comment("Invalid Risk Value."); return(0);}
  48.    else {MML=MathFloor((AccountFreeMargin() *AccountLeverage()*Risk*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT )))*MarketInfo(Symbol(),MODE_MINLOT );}}
  49. if(MM==false){MML=Lots;}

  50. // expert init positions
  51. int cnt=0,OP=0,OS=0,OB=0,CS=0,CB=0;OP=0;for(cnt=0; cnt<OrdersTotal();cnt++) {OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  52. if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)) OP=OP+1;}
  53. if(OP>=1){OS=0; OB=0;}OB=0;OS=0;CB=0;CS=0;

  54. // expert conditions to open position
  55. if(SV>0){OS=1;OB=0;}if(BV>0){OB=1;OS=0;}

  56. // expert conditions to close position
  57. if((SV>0) || (RealSL_Enabled && (OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled && (Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;}
  58. if((BV>0) || (RealSL_Enabled && (Ask-OrderOpenPrice())/Point>=RealSL)||(RealTP_Enabled && (OrderOpenPrice()-Bid)/Point>=RealTP)){CS=1;}
  59. for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
  60.         if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)){if (CB==1){OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Red); return(0);}}
  61.         if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)){
  62.         if(CS==1){OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);return(0);}}}double SLI=0,TPI=0;int TK=0;

  63. // expert open position value
  64. if((AddP() && Add_Positions && OP<=MaxOrders) || (OP==0 && !Add_Positions)) {
  65.         if(OS==1){if (TP==0) TPI=0; else TPI=Bid-TP*Point;if (SL==0) SLI=0; else SLI=Bid+SL*Point;TK=OrderSend(Symbol(),OP_SELL,MML,Bid,Slip,SLI,TPI,OrSt,Magic,0,Red);OS=0;return(0);}       
  66.         if(OB==1){if(TP==0) TPI=0; else TPI=Ask+TP*Point;if(SL==0) SLI=0; else SLI=Ask-SL*Point;TK=OrderSend(Symbol(),OP_BUY,MML,Ask,Slip,SLI,TPI,OrSt,Magic,0,Lime);OB=0; return(0);}}
  67. for(j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS, MODE_TRADES)){if (OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)) {TrP();}}}return(0);}

  68. // expert number of orders
  69. int CntO(int Type,int Magic){int _CntO;_CntO=0;
  70. for(int j=0;j<OrdersTotal();j++){OrderSelect(j, SELECT_BY_POS, MODE_TRADES);if(OrderSymbol()==Symbol()) {if((OrderType()==Type && (OrderMagicNumber()==Magic) || Magic==0)) _CntO++;}}return(_CntO);}

  71. // expert trailing stop
  72. void TrP(){double pb,pa,pp;pp=MarketInfo(OrderSymbol(),MODE_POINT);if (OrderType()==OP_BUY){pb=MarketInfo(OrderSymbol(),MODE_BID);

  73. //expert breakeven
  74.     if(BE>0){if((pb-OrderOpenPrice())>BE*pp){if((OrderStopLoss()-OrderOpenPrice())<0){ModSL(OrderOpenPrice()+0*pp);}}}
  75.     if(TS>0){if((pb-OrderOpenPrice())>TS*pp){if(OrderStopLoss()<pb-(TS+TS_Step-1)*pp){ModSL(pb-TS*pp);return;}}}}
  76.   if(OrderType()==OP_SELL){pa=MarketInfo(OrderSymbol(),MODE_ASK);if(BE>0){if((OrderOpenPrice()-pa)>BE*pp){if((OrderOpenPrice()-OrderStopLoss())<0){ModSL(OrderOpenPrice()-0*pp);}}}
  77.   if (TS>0){if (OrderOpenPrice()-pa>TS*pp){if (OrderStopLoss()>pa+(TS+TS_Step-1)*pp || OrderStopLoss()==0){ModSL(pa+TS*pp);return;}}}}}

  78. //expert stoploss
  79. void ModSL(double ldSL){bool fm;fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);}

  80. //expert add positions function
  81. bool AddP(){int _num=0; int _ot=0;
  82. for (int j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol() && OrderType()<3 && ((OrderMagicNumber()==Magic) || Magic==0)) {       
  83.          _num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();}}
  84. if(_num==0) return(true);if(_num>0 && ((Time[0]-_ot))>0) return(true);else return(false);}
复制代码


回复

使用道具 举报

233

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
80773
发表于 2019-4-29 12:58:29 | 显示全部楼层
水能载舟,亦能煮粥!
回复 支持 反对

使用道具 举报

437

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81489
发表于 2019-4-29 12:58:33 | 显示全部楼层
自然法则.强者生存
回复 支持 反对

使用道具 举报

217

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81211
发表于 2019-4-29 12:58:42 | 显示全部楼层
谢谢,你的链接已做好
回复 支持 反对

使用道具 举报

470

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81571
发表于 2019-4-29 12:58:46 | 显示全部楼层
楼主出门来财,儿孙满堂!
回复 支持 反对

使用道具 举报

443

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81094
发表于 2019-4-29 12:59:08 | 显示全部楼层
我把硬币抛向空中:如果正面朝上,就上MSN,如果背面朝上,就上QQ,如果硬币立起来,我就去自习。
回复 支持 反对

使用道具 举报

226

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81457
发表于 2019-4-29 12:59:09 | 显示全部楼层
我们驾驶教练说的一句话:有路就走,没路就慢,不行就停!
回复 支持 反对

使用道具 举报

229

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81695
发表于 2019-4-29 12:59:13 | 显示全部楼层
曾经相遇,曾经相拥,曾经在彼此生命中光照,即使无缘也无憾
回复 支持 反对

使用道具 举报

468

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81350
发表于 2019-4-29 12:59:17 | 显示全部楼层
错过一个人最可怕的方式就是:坐在她的身旁,你却知道永远都不会拥有她。
回复 支持 反对

使用道具 举报

228

主题

5万

帖子

8万

积分

高级VIP会员

Rank: 8Rank: 8

积分
81696
发表于 2019-4-29 12:59:17 | 显示全部楼层
世界上有一种东西叫\"思念\",古人云:\"一日不见,如隔三秋.\"又有:\"一种思念,两处闲愁,才下眉头,却上心头.\"还如:\"思悠悠,恨悠悠,恨到归时方始休.\"
回复 支持 反对

使用道具 举报

QQ|Archiver|手机版|小黑屋|努金智能 ( 沪ICP备18033831号-1 )

GMT+8, 2019-10-16 11:20 , Processed in 0.040703 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表