Советник не запускается на нескольких парах, нужна помощь - страница 3

 
for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
              
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
              
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Мой Ea не может прекратить открывать и закрывать ордера, похоже, он игнорирует что-то в моем коде, есть ли что-то неправильное в моей функции закрытия ордера?
 
Matt_Townsend: есть ли что-то неправильное в моей функции закрытия ордеров?

Да - вы должны вести обратный отсчет при закрытии ордеров:

for(int i=OrdersTotal()-1; i>=0; i--)
Вы можете прочитать почему здесь
 
honest_knave:

Да - вы должны вести обратный отсчет при закрытии ордеров:

for(int i=OrdersTotal()-1; i>=0; i--)
Вы можете прочитать почему здесь
Он все еще просто открывает и закрывает сделки почти сразу, есть ли что-то еще неправильное в коде?
 
Matt_Townsend есть ли еще что-нибудь неправильное в коде?
Выведите свои переменные и выясните причину.
 
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Зачем вам продолжать?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


было бы логичнее
 
Keith Watford:
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Зачем вам продолжать?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


было бы логичнее.
Он не закрывает ордера, если в коде есть ||, но он работает лучше, если в нем есть !=
 
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


    double fastma, slowma;
    int    ticket, total;
    //---define Ma's
    
    fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
    slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
    
    total = OrdersTotal();
    //---Start operations
    
    if(total < 1)
    {
       if(fastma > slowma)
        {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Buy order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       if(fastma < slowma)
       {
         ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Sell order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       return(0);
    }
  
      
    for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Вот мой код в его нынешнем виде, он может открывать сделки на любой паре, на которой я его устанавливаю, но случайным образом имеет определенные пары с открытыми сделками. Я пытался заставить код работать независимо на любой паре, но, к сожалению, код не будет открывать сделки, пока все остальные сделки не будут закрыты, а затем не будет открывать сделки на всех парах, на которых он установлен. Есть ли способ заставить программу делать это, ведь она покупает и продает так, как я хочу.
 
Ваш код
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Упрощенный
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)
 
whroeder1:
Вы кодируете
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Упрощенный
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)

Каждый график по-прежнему не работает независимо, могу ли я сделать что-нибудь еще?

И то, как это закодировано, больше не закрывает сделки.

 
Keith Watford 2016.12.14 03:10| 122.155.43.228ban EN

    total = OrdersTotal();
    //---Start operations
    
    if(total <= 1)
просмотреть открытые ордера и считать только те сделки, которые имеют магическое число и символ графика советника
Причина обращения: