请教高手看一下,为什么我这个EA不会开仓

要添加评论,请登录注册
wood213
9
wood213  
void OnTick()
  {
    
     double h1maxiao[];
     sj.MA(h1maxiao,4,Symbol(),PERIOD_H1,均线周期,0,MODE_SMA,PRICE_CLOSE);
   //  double h4mada[];
  //   sj.MA(h4mada,4,Symbol(),PERIOD_H1,大均线周期,0,MODE_SMA,PRICE_CLOSE);
     
     
     
   //  MqlRates m30rate[];
   //  sj.getrates(m30rate,4,Symbol(),PERIOD_H1);
     
     MqlRates h1rate[];
     sj.getrates(h1rate,4,Symbol(),PERIOD_H1);
      ///////////////////////////////////////////////
   
    
     
      //////////////////////////////////////////////////
     if(h1rate[1].close>h1maxiao[1] && h1maxiao[1]>h1maxiao[2])  //开多单
      {
        
        buyplus(Symbol(),开单手数,止损点数,止盈点数,Symbol()+"buy",magic); //
      }
     if(h1rate[1].close<h1maxiao[1] )  //平多单
      {
        closeallbuy(Symbol(),magic);
      }
    if(h1rate[1].close<h1maxiao[1] && h1maxiao[1]<h1maxiao[2])  //开空单
      {
        sellplus(Symbol(),开单手数,止损点数,止盈点数,Symbol()+"sell",magic);
      }
     if(h1rate[1].close>h1maxiao[1])   //平空单
      {
        closeallsell(Symbol(),magic);
      }
   
  }


 
 ulong buyplus(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
   {
      ulong a=0;
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
          if(PositionGetTicket(i)>0)
           {
             if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC)==magic && PositionGetString(POSITION_COMMENT)==com)
              {
                a=1;
                return(0);
              }
           }
        }
      if(a==0)
        {
          a=buy(symbol,lots,slpoint,tppoint,com,magic);
        }
      return(a);
   }
ulong buy(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
   {
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      request.action=TRADE_ACTION_DEAL;
      request.symbol=symbol;
      request.type=ORDER_TYPE_BUY;
      request.volume=lots;
      request.deviation=100;
      request.type_filling=ORDER_FILLING_IOC;
      request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
      if(slpoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
       {
          request.sl=SymbolInfoDouble(symbol,SYMBOL_ASK)-slpoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
       }
      if(tppoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
       {
          request.tp=SymbolInfoDouble(symbol,SYMBOL_ASK)+tppoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
       } 
      request.comment=com;
      request.magic=magic;
     //--- 发送请求
      if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());     // 如果不能发送请求,输出错误代码
      //--- 操作信息
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(result.order);
   }




ulong sellplus(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
   {
      ulong a=0;
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
          if(PositionGetTicket(i)>0)
           {
             if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && PositionGetInteger(POSITION_MAGIC)==magic && PositionGetString(POSITION_COMMENT)==com)
              {
                a=1;
                return(0);
              }
           }
        }
      if(a==0)
        {
          a=sell(symbol,lots,slpoint,tppoint,com,magic);
        }
      return(a);
   }
   
ulong sell(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
   {
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      request.action=TRADE_ACTION_DEAL;
      request.symbol=symbol;
      request.type=ORDER_TYPE_SELL;
      request.volume=lots;
      request.deviation=100;
      request.type_filling=ORDER_FILLING_IOC;
      request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
      if(slpoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
       {
         request.sl=SymbolInfoDouble(symbol,SYMBOL_BID)+slpoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
       }
      if(tppoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
       {
         request.tp=SymbolInfoDouble(symbol,SYMBOL_BID)-tppoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
       } 
      request.comment=com;
      request.magic=magic;
     //--- 发送请求
      if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());     // 如果不能发送请求,输出错误代码
      //--- 操作信息
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(result.order);
   }
   
   
   
   
void closeallbuy(string symbol,int magic=0)
 {
   int t=PositionsTotal();
   for(int i=t-1;i>=0;i--)
     {
       if(PositionGetTicket(i)>0)
        {
          if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
              if(magic==0)
               {
                  MqlTradeRequest request={0};
                  MqlTradeResult  result={0};
                  request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                  request.symbol   =symbol;                              // 交易品种
                  request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                  request.type     =ORDER_TYPE_SELL;                        // 订单类型
                  request.price    =SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
                  request.type_filling=ORDER_FILLING_IOC;
                  request.deviation=100; // 允许价格偏差
                  request.position =PositionGetTicket(i);
                  if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能发送请求,输出错误
               }
              else
               {
                  if(PositionGetInteger(POSITION_MAGIC)==magic)
                  {
                     MqlTradeRequest request={0};
                     MqlTradeResult  result={0};
                     request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                     request.symbol   =symbol;                              // 交易品种
                     request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                     request.type     =ORDER_TYPE_SELL;                        // 订单类型
                     request.price    =SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
                     request.deviation=100; // 允许价格偏差
                     request.type_filling=ORDER_FILLING_IOC;
                     request.position =PositionGetTicket(i);
                     if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError());   // 如果不能发送请求,输出错误
                  }
               }
             
           }
        }
     }
 }
void closeallsell(string symbol,int magic=0)
 {
   int t=PositionsTotal();
   for(int i=t-1;i>=0;i--)
     {
       if(PositionGetTicket(i)>0)
        {
          if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
              if(magic==0)
               {
                 MqlTradeRequest request={0};
                 MqlTradeResult  result={0};
                  request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                  request.symbol   =symbol;                              // 交易品种
                  request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                  request.type     =ORDER_TYPE_BUY;                        // 订单类型
                  request.price    =SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
                  request.deviation=100; // 允许价格偏差
                  request.type_filling=ORDER_FILLING_IOC;
                  request.position =PositionGetTicket(i);
                  if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能发送请求,输出错误
               }
              else
               {
                  if(PositionGetInteger(POSITION_MAGIC)==magic)
                  {
                     MqlTradeRequest request={0};
                     MqlTradeResult  result={0};
                     request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                     request.symbol   =symbol;                              // 交易品种
                     request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                     request.type     =ORDER_TYPE_BUY;                        // 订单类型
                     request.price    =SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
                     request.deviation=100; // 允许价格偏差
                     request.type_filling=ORDER_FILLING_IOC;
                     request.position =PositionGetTicket(i);
                     if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError()); 
                  }
               }
           }
        }
     }
 }
void closeall(string symbol,int magic=0)
 {
   int t=PositionsTotal();
   for(int i=t-1;i>=0;i--)
     {
       if(PositionGetTicket(i)>0)
        {
          if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
              if(magic==0)
               {
                  MqlTradeRequest request={0};
                  MqlTradeResult  result={0};
                  request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                  request.symbol   =symbol;                              // 交易品种
                  request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                  request.type     =ORDER_TYPE_SELL;                        // 订单类型
                  request.price    =SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
                  request.deviation=100; // 允许价格偏差
                  request.type_filling=ORDER_FILLING_IOC;
                  request.position =PositionGetTicket(i);
                  if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 
               }
              else
               {
                  if(PositionGetInteger(POSITION_MAGIC)==magic)
                  {
                     MqlTradeRequest request={0};
                     MqlTradeResult  result={0};
                     request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                     request.symbol   =symbol;                              // 交易品种
                     request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                     request.type     =ORDER_TYPE_SELL;                        // 订单类型
                     request.price    =SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
                     request.deviation=100; // 允许价格偏差
                     request.type_filling=ORDER_FILLING_IOC;
                     request.position =PositionGetTicket(i);
                     if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError());  
                  }
               }
           }
          if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
              if(magic==0)
               {
                 MqlTradeRequest request={0};
                 MqlTradeResult  result={0};
                  request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                  request.symbol   =symbol;                              // 交易品种
                  request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                  request.type     =ORDER_TYPE_BUY;                        // 订单类型
                  request.price    =SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
                  request.deviation=100; // 允许价格偏差
                  request.type_filling=ORDER_FILLING_IOC;
                  request.position =PositionGetTicket(i);
                  if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能发送请求,输出错误
               }
              else
               {
                  if(PositionGetInteger(POSITION_MAGIC)==magic)
                  {
                     MqlTradeRequest request={0};
                     MqlTradeResult  result={0};
                     request.action   =TRADE_ACTION_DEAL;                     // 交易操作类型
                     request.symbol   =symbol;                              // 交易品种
                     request.volume   =PositionGetDouble(POSITION_VOLUME); // 0.1手交易量 
                     request.type     =ORDER_TYPE_BUY;                        // 订单类型
                     request.price    =SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
                     request.deviation=100; // 允许价格偏差
                     request.type_filling=ORDER_FILLING_IOC;
                     request.position =PositionGetTicket(i);
                     if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError());  
                  }
               }
           }
        }
     }
 }
要添加评论,请登录注册