xfxyldj 2007-8-27 20:38
均线交叉EA给大家作参考。
//+------------------------------------------------------------------+
//| OneOrder1.mq4 |
//| ldj |
//| [url]http://www.metaquotes.net[/url] |
//+------------------------------------------------------------------+
#property copyright "ldj"
#property link "http://www.metaquotes.net"
extern int lots=1;
extern int EMA1=7;
extern int EMA2=10;
extern int EMA3=62;
extern int timeF=0;
static bool W1,W2,D1,D2,H1,H2,Buy,Sell;
static int magic;
static double TimeX[3];
static int X[3];
int MA_Model =1;
int PRICE_Model =0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
X[0]=0;
X[1]=0;
X[2]=0;
D1=false;
D2=false;
magic=1;
TimeX[0]=Time[0];
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (MAX (EMA1,EMA2,timeF,1)==-1)
{
if (SearchOrder (magic,OP_BUY)>0)
CloseOrder(SearchOrder (magic,OP_BUY));
}
if (MAX (EMA1,EMA2,timeF,1)==1)
{
if (SearchOrder (magic,OP_SELL)>0)
CloseOrder(SearchOrder (magic,OP_SELL));
}
if (MAX (EMA1,EMA2,timeF,1)==1 && TimeX[0]!=Time[0])
{
if (!OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"D1",magic,0))
Alert( "OrderSend Error #", GetLastError() );
TimeX[0]=Time[0];
}
if (MAX (EMA1,EMA2,timeF,1)==-1 && TimeX[0]!=Time[0])
{
if (!OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"D1",magic,0))
Alert( "OrderSend Error #", GetLastError() );
TimeX[0]=Time[0];
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| SearchOrder function |
//+------------------------------------------------------------------+
int SearchOrder (int Magic,int k)
{
//----
int i=0;
for ( int z = OrdersTotal() - 1; z >= 0; z -- )
{
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() );
continue;
}
if (OrderSymbol()!=Symbol())continue;
if (OrderMagicNumber() != Magic )continue;
if ( OrderType()==k ) i=OrderTicket();
}
//----
return(i);
}
//+------------------------------------------------------------------+
//| CloseOrder function |
//+------------------------------------------------------------------+
int CloseOrder(int _OrderTicket)
{
//----
if ( !OrderSelect( _OrderTicket, SELECT_BY_TICKET ) )
{
Print("OrderSelect(",OrderTicket(), ",SELECT_BY_POS) - Error #",GetLastError() );
}
if (!OrderClose(OrderTicket(), OrderLots(), Bid, 3))
{
Print("OrderClose(",OrderTicket(), ",SELL) - Error #",GetLastError() );
}
//----
return(1);
}
//+------------------------------------------------------------------+
//| MAX function |
//+------------------------------------------------------------------+
int MAX (int MAFast,int MASlow,int PX,int j)
{
//----
double MAF[2],MAS[2];
int i=0;
MAF[0]=iMA(NULL,PX,MAFast,0,MA_Model,PRICE_Model,0+j);
MAF[1]=iMA(NULL,PX,MAFast,0,MA_Model,PRICE_Model,1+j);
MAS[0]=iMA(NULL,PX,MASlow,0,MA_Model,PRICE_Model,0+j);
MAS[1]=iMA(NULL,PX,MASlow,0,MA_Model,PRICE_Model,1+j);
if (MAF[0]>MAS[0] && MAF[1]<MAS[1]) i=1;
if (MAF[0]<MAS[0] && MAF[1]>MAS[1]) i=-1;
//----
return(i);
}
//+------------------------------------------------------------------+
[[i] 本帖最后由 xfxyldj 于 2008-1-19 14:20 编辑 [/i]]
lilyblue 2007-10-31 09:11
谢谢分享!