MQL:5分钟双均线EA

//+------------------------------------------------------------------+
//|                                                 myEA20180115.mq4 |
//|                                             Copyright 2017,CuiYi |
//|                                                1010333562@qq.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,CuiYi"
#property link      "1010333562@qq.com"
#property version   "1.00"
#property strict
#define MAGICMA 19880305

extern double Lots=0.02;

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()=="EURUSD" && 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;
	int res;
	
	ma1=iMA(NULL,5,6,0,MODE_EMA,PRICE_CLOSE,1);
	ma2=iMA(NULL,5,18,0,MODE_EMA,PRICE_CLOSE,1);
	ma3=iMA(NULL,5,6,0,MODE_EMA,PRICE_CLOSE,2);
	ma4=iMA(NULL,5,180,0,MODE_EMA,PRICE_CLOSE,2);
	
	if(ma1>ma2 && ma3<ma4)
		{
		res=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Blue);
		return;
		}
	
	if(ma1<ma2 && ma3>ma4)
		{
		res=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
		return;
		}
	}

void CheckForClose()
	{
	double ma1,ma2,ma3,ma4;
		
	ma1=iMA(NULL,5,6,0,MODE_EMA,PRICE_CLOSE,1);
	ma2=iMA(NULL,5,18,0,MODE_EMA,PRICE_CLOSE,1);
	ma3=iMA(NULL,5,6,0,MODE_EMA,PRICE_CLOSE,2);
	ma4=iMA(NULL,5,18,0,MODE_EMA,PRICE_CLOSE,2);
		
	for(int i=0;i<OrdersTotal();i++)
		{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)	break;
		if(OrderMagicNumber()==MAGICMA || OrderSymbol()=="EURUSD")
			{
			if(OrderType()==OP_BUY)
				{
				if(ma1<ma2 && ma3>ma4)	
					{
					if(!OrderClose(OrderTicket(),Lots,Bid,3,White))
						Print("OrderClose error ",GetLastError());
					}
				break;
				}
			
			if(OrderType()==OP_SELL)
				{
				if(ma1>ma2 && ma3<ma4)
					{
					if(OrderClose(OrderTicket(),Lots,Ask,3,White))
						Print("OrderClose error ",GetLastError());
					}
				break;
				}
			}
		}
	}

void start()
	{
	if(Bars<100 || IsTradeAllowed()==false) return;
	if(CalculateCurrentOrder(Symbol())==0) CheckForOpen();
	else CheckForClose();
	}

转载于:https://my.oschina.net/u/3093769/blog/1607291

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//--- input parameters extern int shortp=5; extern int longp=20; extern double Lots=0.1; int Crossed (double line1 , double line2) { static int last_direction = 0; static int current_dirction = 0; if(line1>line2)current_dirction = 1; //up if(line1<line2)current_dirction = 2; //down if(current_dirction != last_direction) //changed { last_direction = current_dirction; return (last_direction); } else { return (current_dirction); } } int start() { int cnt, ticket, total; double shortma, longma; if(Bars<100) { Print("bars less than 100"); return(0); } shortma = iMA(NULL,0,shortp,0,MODE_SMA,PRICE_CLOSE,1); longma = iMA(NULL,0,longp,0,MODE_SMA,PRICE_CLOSE,1); //开仓---------------------------------------------------------------- int isCrossed = Crossed (shortma,longma); total = OrdersTotal(); if(total 0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } if(isCrossed == 2) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"My MA",12345,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } //平仓------------------------------------------------------------------------------------------------------- for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) // long position is opened { if(isCrossed == 2) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);// close position return(0); // exit } } if(OrderType()==OP_SELL) // go to short position { if(isCrossed == 1) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);// close position return(0); // exit } } } } return(0); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值