Не работает эксперт

 

Ниже представлен код программы. Проблема в том, что торговля по инструменту к которому прикреплен эксперт идет, а по второму инструменту, который записан в переменную inst, торговля не ведется. Ошибка 4106, неизвестный инструмент. Просмотрел весь код 100 раз, не могу найти ошибку. Кто знает, в чем проблема?



//////////////////////////////////////////////////////////////////////////////////////////////

//Объявление глобальных перменных используемых в программе////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
extern double Lots = 0.1;                                //Колличество лотов для торговли
extern string Inst="XAGUSD";                             //Название парного инструмента
extern double ARB_Period=21;                             //Период усреднения отношения
//////////////////////////////////////////////////////////////////////////////////////////////
//Основной код программы//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
int start()
  {  
//////////////////////////////////////////////////////////////////////////////////////////////  
//Объявление внутренних переменных////////////////////////////////////////////////////////////  
//////////////////////////////////////////////////////////////////////////////////////////////
   double ARB, vbid, vask;
   int cnt, ticket, ticket2, total;
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем достаточно ли баров имеет график для четкой работы индикаторов////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   if(Bars<100)
     {
      Print("Имеется меньше 100 баров");
      return(0);  
     }
//////////////////////////////////////////////////////////////////////////////////////////////
//Присвоение внутренним переменным значеня индикаторов////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   ARB=iCustom(NULL,0,"Arbitrag2",Inst,ARB_Period,0,0);
   vbid = MarketInfo(Inst,MODE_BID);
   vask = MarketInfo(Inst,MODE_ASK);
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем имеютя ли ранее открытые позиции, если нет, то.../////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   total=OrdersTotal();
   if(total<1) 
     {
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем достаточно ли средств на торговом счете///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("У вас недостаточно средств, на счете = ", AccountFreeMargin());
         return(0);  
        }
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем на возможность встать в длинную позицию (BUY)/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(ARB < 0)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"Покупка",2530,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на покупку открыт : ",OrderOpenPrice());
           }
         else Print("Ошибка при открытие ордера на покупку/продажу : ",GetLastError()); 
         ticket2=OrderSend(Inst,OP_SELL,Lots,vbid,3,0,0,"Продажа",2530,0,Red);
         if(ticket2 > 0)
           {
            if(OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на продажу открыт : ",OrderOpenPrice());
           }
         else Print("Ошибка при открытие ордера на покупку/продажу : ",GetLastError()); 
         return(0); 
        }
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем на возможность встать в короткую позицию (SELL)///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(ARB > 0)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"Продажа",2530,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на продажу открыт : ",OrderOpenPrice());
               
           }
         else Print("Ошибка при открытие ордера на продажу/продажу : ",GetLastError()); 
         ticket2=OrderSend(Inst,OP_BUY,Lots,vask,3,0,0,"Покупка",2530,0,Green);
         if(ticket2 > 0)
            {
            if(OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на покупку открыт : ",OrderOpenPrice());
            }
         else Print("Ошибка при открытие ордера на продажу/продажу : ",GetLastError()); 
         return(0); 
        }
       return(0);
     }
//////////////////////////////////////////////////////////////////////////////////////////////
//Условия закрытия позиций////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      for(cnt=0;cnt<total;cnt+=2)
     {
      int cnt2 = cnt+1;
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)  
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта длинная позиция/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
            if(ARB > 0)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0);
                }
            return(0);
           }
         else
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта короткая позиция////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
           if(ARB < 0)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
               return(0); 
              }
           } 
        }
        OrderSelect(cnt2, SELECT_BY_POS, MODE_TRADES); 
        if(OrderType()<=OP_SELL && OrderSymbol()==Inst)
        {
         if(OrderType()==OP_BUY)  
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта длинная позиция/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
            if(ARB > 0)
                {
                 OrderClose(OrderTicket(),OrderLots(),vbid,3,Violet); 
                 return(0);
                }
            return(0);
           }
         else
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта короткая позиция////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
           if(ARB < 0)
              {
               OrderClose(OrderTicket(),OrderLots(),vask,3,Violet);
               return(0); 
              }
           } 
        }
      }
   return(0);
   }
//////////////////////////////////////////////////////////////////////////////////////////////
//Конец программы, выход из функции start////////////////////////////////////////////////////

/////////////////////////////////////////


 
Monata54:

Ниже представлен код программы. Проблема в том, что торговля по инструменту к которому прикреплен эксперт идет, а по второму инструменту, который записан в переменную inst, торговля не ведется. Ошибка 4106, неизвестный инструмент. Просмотрел весь код 100 раз, не могу найти ошибку. Кто знает, в чем проблема?



//////////////////////////////////////////////////////////////////////////////////////////////

//Объявление глобальных перменных используемых в программе////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
extern double Lots = 0.1;                                //Колличество лотов для торговли
extern string Inst="XAGUSD";                             //Название парного инструмента
extern double ARB_Period=21;                             //Период усреднения отношения
//////////////////////////////////////////////////////////////////////////////////////////////
//Основной код программы//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
int start()
  {  
//////////////////////////////////////////////////////////////////////////////////////////////  
//Объявление внутренних переменных////////////////////////////////////////////////////////////  
//////////////////////////////////////////////////////////////////////////////////////////////
   double ARB, vbid, vask;
   int cnt, ticket, ticket2, total;
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем достаточно ли баров имеет график для четкой работы индикаторов////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   if(Bars<100)
     {
      Print("Имеется меньше 100 баров");
      return(0);  
     }
//////////////////////////////////////////////////////////////////////////////////////////////
//Присвоение внутренним переменным значеня индикаторов////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   ARB=iCustom(NULL,0,"Arbitrag2",Inst,ARB_Period,0,0);
   vbid = MarketInfo(Inst,MODE_BID);
   vask = MarketInfo(Inst,MODE_ASK);
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем имеютя ли ранее открытые позиции, если нет, то.../////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
   total=OrdersTotal();
   if(total<1) 
     {
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем достаточно ли средств на торговом счете///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("У вас недостаточно средств, на счете = ", AccountFreeMargin());
         return(0);  
        }
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем на возможность встать в длинную позицию (BUY)/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(ARB < 0)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"Покупка",2530,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на покупку открыт : ",OrderOpenPrice());
           }
         else Print("Ошибка при открытие ордера на покупку/продажу : ",GetLastError()); 
         ticket2=OrderSend(Inst,OP_SELL,Lots,vbid,3,0,0,"Продажа",2530,0,Red);
         if(ticket2 > 0)
           {
            if(OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на продажу открыт : ",OrderOpenPrice());
           }
         else Print("Ошибка при открытие ордера на покупку/продажу : ",GetLastError()); 
         return(0); 
        }
//////////////////////////////////////////////////////////////////////////////////////////////
//Проверяем на возможность встать в короткую позицию (SELL)///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      if(ARB > 0)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"Продажа",2530,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на продажу открыт : ",OrderOpenPrice());
               
           }
         else Print("Ошибка при открытие ордера на продажу/продажу : ",GetLastError()); 
         ticket2=OrderSend(Inst,OP_BUY,Lots,vask,3,0,0,"Покупка",2530,0,Green);
         if(ticket2 > 0)
            {
            if(OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("Ордер на покупку открыт : ",OrderOpenPrice());
            }
         else Print("Ошибка при открытие ордера на продажу/продажу : ",GetLastError()); 
         return(0); 
        }
       return(0);
     }
//////////////////////////////////////////////////////////////////////////////////////////////
//Условия закрытия позиций////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
      for(cnt=0;cnt<total;cnt+=2)
     {
      int cnt2 = cnt+1;
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)  
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта длинная позиция/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
            if(ARB > 0)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0);
                }
            return(0);
           }
         else
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта короткая позиция////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
           if(ARB < 0)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
               return(0); 
              }
           } 
        }
        OrderSelect(cnt2, SELECT_BY_POS, MODE_TRADES); 
        if(OrderType()<=OP_SELL && OrderSymbol()==Inst)
        {
         if(OrderType()==OP_BUY)  
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта длинная позиция/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
            if(ARB > 0)
                {
                 OrderClose(OrderTicket(),OrderLots(),vbid,3,Violet); 
                 return(0);
                }
            return(0);
           }
         else
//////////////////////////////////////////////////////////////////////////////////////////////
//Открыта короткая позиция////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
           {
           if(ARB < 0)
              {
               OrderClose(OrderTicket(),OrderLots(),vask,3,Violet);
               return(0); 
              }
           } 
        }
      }
   return(0);
   }
//////////////////////////////////////////////////////////////////////////////////////////////
//Конец программы, выход из функции start////////////////////////////////////////////////////

/////////////////////////////////////////



Символ есть в обзоре рынка?

 

Проверьте 
MarketInfo(Inst,MODE_TRADEALLOWED)
MarketInfo(Inst,SYMBOL_SELECT)

 
Evgeny Belyaev:

Символ есть в обзоре рынка?

Есть
 
Monata54:
Есть

Значит, проблема только в значении, которое указано в переменной Inst, о чем уже говорили в другой ветке. Распечатайте значение в той же строке, в которой печатаете код ошибки.

 
Andrei Fandeev:

Проверьте 
MarketInfo(Inst,MODE_TRADEALLOWED)
MarketInfo(Inst,SYMBOL_SELECT)


Что означают эти функции?

 
Monata54:

Что означают эти функции?


Проверка разрешения на торговлю и проверка факта выбора символа в обзоре рынка.