- //+------------------------------------------------------------------+
- //| myEA20180104.mq4 |
- //| Copyright 2017,CuiYi |
- //| 010333562@qq.com |
- //+------------------------------------------------------------------+
- #property copyright "Copyright 2017,CuiYi"
- #property link "1010333562@qq.com"
- #property version "1.00"
- #property stric
- #define MAGICMA 19880305
-
- extern double Lots=0.01;
-
- int CalculateCurrentOrder(string symbol)
- {
- int buys=0,sells=0;
- for(int i=0;i<OrdersTotal();i=i+1)
- {
- if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
- if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MAGICMA)
- {
- if(OrderType()==OP_BUY) buys++;
- if(OrderType()==OP_SELL) sells++;
- }
- }
- if(buys>0) return(buys);
- else return(-sells);
- }
-
- void CheckForOpen()
- {
- double ma1,ma2,ma3,ma4,maA,maB;
- int res;
-
- ma1=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,0);
- ma2=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,0);
- ma3=iMA(NULL,240,10,6,MODE_EMA,PRICE_CLOSE,0);
- ma4=iMA(NULL,240,20,6,MODE_EMA,PRICE_CLOSE,0);
-
- maA=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,1);
- maB=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,1);
-
- if(ma1>ma2 && maA<maB && ma3>ma4)
- {
- res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Blue);
- return;
- }
-
- if(ma1<ma2 && maA>maB && ma3<ma4)
- {
- res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
- return;
- }
- }
-
- void CheckForClose()
- {
- double ma1,ma2,ma3,ma4,maA,maB;
-
- ma1=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,0);
- ma2=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,0);
- ma3=iMA(NULL,240,10,6,MODE_EMA,PRICE_CLOSE,0);
- ma4=iMA(NULL,240,20,6,MODE_EMA,PRICE_CLOSE,0);
-
- maA=iMA(NULL,30,10,6,MODE_EMA,PRICE_CLOSE,1);
- maB=iMA(NULL,30,20,6,MODE_EMA,PRICE_CLOSE,1);
-
- for(int i=0;i<OrdersTotal();i++)
- {
- if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
- if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
-
- if(OrderType()==OP_BUY)
- {
- if(ma1<ma2 && maA>maB && ma3>ma4)
- OrderClose(OrderTicket(),Lots,Bid,3,White);
- break;
- }
-
- if(OrderType()==OP_SELL)
- {
- if(ma1>ma2 && maA<maB && ma3<ma4)
- OrderClose(OrderTicket(),Lots,Bid,3,White);
- break;
- }
- }
- }
-
- void start()
- {
- if(Bars<100 || IsTradeAllowed()==false) return;
- if(CalculateCurrentOrder(Symbol())==0) CheckForOpen();
- else CheckForClose();
- }
复制代码
系统回测
1.EUR/USD
回测时间:2017/01/01 - 2018/01/01
时间周期:M30
净值图:
|