汇客开户及真实客户相关问题、新手请查看《新手辅导及开户服务专区》

汇客服务电话正式启用:020-85875293,免费电话4006729829故障修理中,恢复时会及时在论坛通知!
汇客电话020-85875293 。邮箱:forexgd@126.com。 开户点击这里给我发消息合作咨询QQFXSOL、I Trade FX(汇聚)新老客户送价值16000元VIP服务及海啸2软件。开户在线注册快速通道。
返回列表 回复 发帖

请教大师,关于均线交叉,SELL单不能平仓

//+------------------------------------------------------------------+
//|                                                    OneOrder1.mq4 |
//|                                                              ldj |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "ldj"
#property link      "http://www.metaquotes.net"
extern int         lots=1;
extern int         EMA1=10;
extern int         EMA2=89;
extern int         EMA3=162;
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);
  }
//+------------------------------------------------------------------+
经测试,在有SELL单时,出现BUY单,不能把之前的SELL单平仓.
请教问题出在那?应该如何解决?
是否
   if (MAX (EMA1,EMA2,timeF,1)==1)
   {
     if (SearchOrder (magic,OP_SELL)>0)
     CloseOrder(SearchOrder (magic,OP_SELL));
出错...谢谢
返回列表