Ошибка 4059 там, где её не должно быть...

 

Есть функция, для возвращения массива с рабочими инструментами. В процессе её использования возникли проблемки. Комментируя функции, я обнаружил, что в классе, в котором данная функция находится если закомментить эту функцию, то всё работает без ошибок и не каких ошибок терминал не возвращает. Если же эту функция раскомментить, то сразу же возникает ошибка 4059. Есс-но я понял, что косяк именно в этой функции. Потому её и нужно штудировать..

Вот функция с расставленными принтами типа:  Print ("_LastError_( номер коммента ) = ", _LastError);

// 1.1 Создаём список рабочих инструментов и заносим их в массив. =========================================================================
int MakeListOfInstruments::CreatWorkingSMBArray (string& fsa_WorkingSMB[],           // Возвращаемый массив рабочих инструментов
                                                 string  fs_ListOfWorkingSMB,        // Список рабочих инструментов
                                                 string  fs_BaseCurrency,            // Список базовых валют
                                                 string  fs_BadCurrency,             // "Чёрный" список валют( их пропускаем )
                                                 int     fi_MAXspread = 0,           // Максимальный спред
                                                 string  fs_Delimiter = ",")         // Разделитель элементов в списках
{
   ResetLastError();
   int li_CntOfSMB = 0;

   //---- Формируем лист рабочих символов
   if (fs_ListOfWorkingSMB == "")
   {
      string lsa_AllSymbols[],      // Массив с общим количеством торговых инструментов( в зависимости от выбора источника )
             lsa_ProperCUR[],       // Массив с подходящими торговыми инструментами
             lsa_BadCUR[];          // Массив с НЕподходящими торговыми инструментами
      int    li_CntProperCUR,       // Количество подходящих торговых инструментов
             li_CntBadCUR,          // Количество НЕподходящих торговых инструментов
             li_Cnt = 0,            // Общее количество торговых инструментов котируемых ДЦ
             li_CUR,                // Счётчик подходящих торговых инструментов
             li_BAD;                // Счётчик НЕподходящих торговых инструментов
      bool   lb_BAD;

      //---- Формируем массив из списка базовых валют
      li_CntProperCUR = CArraysMan.MakeStrArrayFromLine (fs_BaseCurrency, lsa_ProperCUR, ",");

      //---- Формируем массив из "чёрного" списка валют
      li_CntBadCUR = CArraysMan.MakeStrArrayFromLine (fs_BadCurrency, lsa_BadCUR, ",");

      //---- Получаем перечень доступных символов в окне "Обзор рынка"
      li_Cnt = ListOfSMB (lsa_AllSymbols, True);

      ArrayResize (fsa_WorkingSMB, li_Cnt);

      if (li_CntProperCUR == 0)
      {
         li_CntProperCUR = 1;
         ArrayResize (lsa_ProperCUR, 1);
      }

      CArraysMan.InitializeArraySTR (fsa_WorkingSMB, "");
Print ("_LastError_1 = ", _LastError);
      //---- Оставляем только те инструменты, в которых присутствуют "доминантные" валюты
      for (int li_SMB = 0; li_SMB < li_Cnt; li_SMB++)
      {
         Print ("_LastError_2 = ", _LastError);
         for (li_CUR = 0; li_CUR < li_CntProperCUR; li_CUR++)
         {
            ResetLastError();
            Print ("_LastError_3 = ", _LastError);
            if (StringFind (lsa_AllSymbols [li_SMB], lsa_ProperCUR [li_CUR]) >= 0 || fs_BaseCurrency == "")
            {
//               Print ("_LastError_6 = ", _LastError);
               if (li_CntBadCUR > 0)
               {
//                //---- Фильтруем инструменты через "чёрный" список
                  lb_BAD = false;
                   
                  for (li_BAD = 0; li_BAD < li_CntBadCUR; li_BAD++)
                  {
                     if (StringFind (lsa_AllSymbols [li_SMB], lsa_BadCUR [li_BAD]) >= 0)
                     {
                        lb_BAD = true; break;
                     }
                  }
                  
                  if (lb_BAD) break;
               }
//               Print ("_LastError_7 = ", _LastError);
               //---- Отбрасываем инструменты с "большим" спредом
               if (MaxSpread > 0)
               {
                  if (  MarketInfo (lsa_AllSymbols [li_SMB], MODE_SPREAD) > MaxSpread)
                  break;
               }
               fsa_WorkingSMB [li_CntOfSMB] = lsa_AllSymbols [li_SMB];
               li_CntOfSMB++;
               break;
            }
         }
      }
      Print ("_LastError_4 = ", _LastError);
      ArrayResize (fsa_WorkingSMB, li_CntOfSMB);
   }
   else
   {
      li_CntOfSMB = CArraysMan.MakeStrArrayFromLine (fs_ListOfWorkingSMB, fsa_WorkingSMB, ",");
      //---- Проверяем на котируемость у ДЦ введённых символов
      li_CntOfSMB = CheckPresenceSMBInMarket (fsa_WorkingSMB);
   }
   //---- Контролируем возможные ошибки
   CLogging.Printing (StringConcatenate ("CreatWorkingSMBArray() => ", CErrs.ErrorToString (_LastError)));
//----
   return (li_CntOfSMB);
}

Входящие данные ИНПУТ такие:

input string     _Make_List_Of_Symbols =     " ______________ Make List Of Symbols _____________ ";
input string     is_ListOfWorkingSMB = "";           // Список рабочих инструментов
input string     is_ListOfMagic = "3333021";         // Список используемых экспертом магиков
input string     is_BaseCurrencyList = "USD,EUR,JPY,CHF,GBP,CAD,AUD";      // Список базовых валют
input string     is_BadCurrencyList = "NZD";         // "Чёрный" список валют ( их пропускаем )
input int        ii_MaxSpread = 50;                  // Максимальный спред, при котором эксперту разрешено торговать!

По ходу, если просмотреть лог, то становится ясно, что ошибка возникает в процессе вложенного цикла. Вот что интересно, в логе:

22:35:05 Expert BaseTemplate EURUSD,H1: loaded successfully
22:35:05 TestGenerator: current spread 105 used
22:35:05 BaseTemplate inputs: id_Lots=0.1; id_SL=0; id_TP=10; ii_Slippage=2; ib_Bootstrap=0; ib_RealTrade=1; ib_VirtualTrade=1; ib_NeedLogs=1; ib_PrintUP=1; ib_CommentUP=1; ii_MaxSpread=500; ii_NumberOfTry=10; ib_LotMoreMaxLot=0; 
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_1 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 4059
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 4059
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 4059
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 4059
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_2 = 4059
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
22:35:05 2014.06.24 00:00  BaseTemplate EURUSD,H1: _LastError_3 = 0
Во втором принте значение _LastError_2 равно сразу 0, а потом 4059 становится и так постоянно уже. Смотря в код, я не понимаю, где может быть ошибка. Вроде всё написано верно. Компилируется всё без ошибок и предупреждений...

 Весь класс, который тут используется прилагаю к сообщению. Глобальные переменные я уже показал. И 2 метода, которые используются в проблемной функции MakeStrArrayFromLine и InitializeArraySTR вот:

// 1.4 Возвращает массив STRING из строки, разделённой fs_Delimiter. ========================================================================
int MakeStrArrayFromLine (string  fs_List,              // строка с данными
                          string& fsa_OUT[],            // возвращаемый массив
                          string  fs_Delimiter = ",")   // разделитель данных в строке
{
   string tmp_Str = "",
          tmp_Char = "";
//----
   ArrayResize (fsa_OUT, 0);
    
   for (int i = 0; i < StringLen (fs_List); i++)
   {
      tmp_Char = StringSubstr (fs_List, i, 1);
    
      if (tmp_Char == fs_Delimiter)
      {
         if (StringTrimLeft (StringTrimRight (tmp_Str)) != "")
         {
            ArrayResize (fsa_OUT, ArraySize (fsa_OUT) + 1);
            fsa_OUT [ArraySize (fsa_OUT) - 1] = tmp_Str;
         }
         tmp_Str = "";
      }
      else
      {
         if (tmp_Char != " ") tmp_Str = tmp_Str + tmp_Char;
      }
   }
    
   if (StringTrimLeft (StringTrimRight (tmp_Str)) != "")
   {
      ArrayResize (fsa_OUT, ArraySize (fsa_OUT) + 1);
      fsa_OUT [ArraySize (fsa_OUT) - 1] = tmp_Str;
   }
//----
   return (ArraySize (fsa_OUT));
}
// 1.3 Инициализируем массив STRING по заданному VALUE. ===================================================================================
void InitializeArraySTR (string& fsa_Array[],     // Инициализируемый массив
                         string  fs_Value = "")   // Значение, которым будем инициализировать массив fsa_Array
{
   for (int li_Int = 0; li_Int < ArraySize (fsa_Array); li_Int++)
   {
      fsa_Array [li_Int] = fs_Value;
   }
}
Причём тут ошибка 4059, которая говорит мол ошибка при работе с объектами? Так в цикле и объектов то нет...
Файлы:
 

Привет, Виктор! А это смотрел? 

4059

ERR_FUNC_NOT_ALLOWED_IN_TESTING

Функция не разрешена в тестовом режиме

Может, что-то изменили!?

 

Борис, Здарова. Да, видел. Накидывал на график (на демо), там уже другая картина:

00:16:03 BaseTemplate EURUSD,M1: Logging => CreatWorkingSMBArray() => Ошибка № 0 :: Ошибка при работе с объектом
Это вообще нонсенс какой-то...
 
hoz:

Борис, Здарова. Да, видел. Накидывал на график (на демо), там уже другая картина:

Это вообще нонсенс какой-то...



Ты знаешь, я в дебри не лезу! Если обнаруживаю какую-то ошибку, ищу другим путём добиться того же! Тогда меньше будет задержек на Реале! Пока там ещё у них всё утрясётся с заменами и преобразованиями, пилю на старом, и всё работает без ошибок! 
 
borilunad:

Ты знаешь, я в дебри не лезу! Если обнаруживаю какую-то ошибку, ищу другим путём добиться того же! Тогда меньше будет задержек на Реале! Пока там ещё у них всё утрясётся с заменами и преобразованиями, пилю на старом, и всё работает без ошибок! 


Тут не дебри. Смотри, Борис, Ситуацию:

Вот конец метода:

   ...
   Print ("_LastError_9 = ", _LastError);
   //---- Контролируем возможные ошибки
   CLogging.Printing (StringConcatenate ("CreatWorkingSMBArray() => ", CErrs.ErrorToString (_LastError)));
   Print ("_LastError_10 = ", _LastError);
//----
   return (li_CntOfSMB);
}

До и перед строкой:

CLogging.Printing (StringConcatenate ("CreatWorkingSMBArray() => ", CErrs.ErrorToString (_LastError)));
Ошибок нет! Внутри неё ошибка с индексом 0, но описание ошибки: Ошибка при работе с объектом.

 Принтую то что внутри и там ошибок нет ни в начале функции, ни внутри! Получается какой-то обсурд. Ошибок нигде нет, в коде функций, из которых состоит проблемная функция, а в конце проблемной функции вылазить ошибка 0, с описанием Ошибка при работе с объектом.

 Интересно, кто-нить мне сможет объяснить логически в чём тут причина? 

 

Более того. Разобрав ту строчку что повыше  сказал на части. Принтанул. И заметил вообще не логичную ситуацию. Вот:

// 1.2 Выводим на печать и (или) на график комментарии. ===================================================================================
Logging::Printing (string  fs_Text,                               // Возвращаемая пустая строка
                   bool    fb_PrintUP = true,                     // Флаг печати комментариев
                   bool    fb_CommentUP = true)                   // Флаг показа комментариев на графике
{
   LibName = "Logging";
   Print ("_( Logging )LastError_1 = ", _LastError);
   if (StringLen (fs_Text) > 0)
   {
      Print ("_( Logging )LastError_2 = ", _LastError);
      if (LibName != "") fs_Text = StringConcatenate (LibName, " => ", fs_Text);
      Print ("_( Logging )LastError_3 = ", _LastError);
      if (fb_PrintUP)
          Print (fs_Text);
      Print ("_( Logging )LastError_4 = ", _LastError);
      if (fb_CommentUP)
          Comment (fs_Text);
   }
   //---- Очищаем переменную
   //fs_Txt = "";
Print ("_( Logging )LastError_5 = ", _LastError);
   return;
}

Вот лог:

23:40:52 BaseTemplate EURUSD,M5 inputs: _Position_Properties= _______________ Position_Properties _____________ ; idt_Expiration=0; id_Lots=0.1; id_SL=0.0; id_TP=10.0; ii_Slippage=2; _BaseInfo= ____________________ BaseInfo ___________________ ; ib_Bootstrap=false; ib_RealTrade=true; ib_VirtualTrade=true; _Logging= ____________________ Logging ____________________ ; ib_NeedLogs=true; ib_PrintUP=true; ib_CommentUP=true; _Make_List_Of_Symbols= ______________ Make List Of Symbols _____________ ; is_ListOfWorkingSMB=; is_ListOfMagic=3333021; is_BaseCurrencyList=USD,EUR,JPY,CHF,GBP,CAD,AUD; is_BadCurrencyList=NZD; ii_MaxSpread=50; _CTradingFunc= __________________ CTradingFunc _________________ ; ii_NumberOfTry=10; ic_ColorSendBuy=16711680; ic_ColorSendSell=255; ic_ColorCloseBuy=32768; ic_ColorCloseSell=16711935; ic_ColorModifyBuy=55295; ic_ColorModifySell=16776960; _MM= _______________________ MM ______________________ ; ib_LotMoreMaxLot=false; 
23:40:53 BaseTemplate EURUSD,M5: _LastError_9 = 0
23:40:53 BaseTemplate EURUSD,M5: _( ErrorDescription )LastError_1 = 0
23:40:53 BaseTemplate EURUSD,M5: _( ErrorDescription )LastError_3 = 0
23:40:53 BaseTemplate EURUSD,M5: _( Logging )LastError_1 = 0
23:40:53 BaseTemplate EURUSD,M5: _( Logging )LastError_2 = 0
23:40:53 BaseTemplate EURUSD,M5: _( Logging )LastError_3 = 0
23:40:53 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Ошибка № 0 :: Ошибка при работе с объектом
23:40:53 BaseTemplate EURUSD,M5: _( Logging )LastError_4 = 0
23:40:53 BaseTemplate EURUSD,M5: _( Logging )LastError_1 = 0
23:40:53 BaseTemplate EURUSD,M5: _LastError_10 = 0
23:40:53 BaseTemplate EURUSD,M5: initialized
23:40:57 BaseTemplate EURUSD,M5: Количество финансовых истументов в окне `Обзор рынка` Alpari Limited равно 135
И выше приведённого в этом посте видно где появилась ошибка с номером 0, и описанием Ошибка при работе с объектом. Вроде бы всё элементарно просто и верно. Что тут может быть не так? Ошибка уже явно в этой функции... По логу то видно...
 
Виктор, скорей всего они ещё не доделали! А ты хочешь быстрее их освоить то, до чего у них руки дошли! Потому я не спешу, вот осваиваю 8-ку 64 бит, будь она неладна, сделали всё на подобие мобильника, всё летает, не стоит на месте, добиваюсь, чтобы убрать это мельтешение! Сделали забаву для детей, и сайтовских сплетен! И тут пришла мода для дурачков! :((
 
Кто выдаёт строчку "Ошибка при работе с объектом"? На 99 процентов этот кто-то вызывает функцию GetLastError(), которая обнуляет переменную _LastError
 
borilunad:
Виктор, скорей всего они ещё не доделали! А ты хочешь быстрее их освоить то, до чего у них руки дошли! Потому я не спешу, вот осваиваю 8-ку 64 бит, будь она неладна, сделали всё на подобие мобильника, всё летает, не стоит на месте, добиваюсь, чтобы убрать это мельтешение! Сделали забаву для детей, и сайтовских сплетен! И тут пришла мода для дурачков! :((

Я 8-ку вообще не планирую ставить. Метро мне как-то не по душе. Пусть  разработчики сами им пользуются. У меня и 7-ка летает...

А так да, Борис, Вы правы! Косяк похоже всё-таки в недоработке языка. Видать что-то не доделали. В сервисдеске пока молчат. Видать сказать не чего им мне. 

stringo:
Кто выдаёт строчку "Ошибка при работе с объектом"? На 99 процентов этот кто-то вызывает функцию GetLastError(), которая обнуляет переменную _LastError

Даже если б переменная _LastError обнулялась, то причём тут "Ошибка при работе с объектом" ? Типа обнулили переменную и на те ошибку "Ошибка при работе с объектом" ? Это типа нормально?
Так согласно документации что-ли должно быть?

stringo, поймите правильно. Я не ставлю задачу искать недоработки в языке и есс-но мне не хочется подымать подобные разговоры. Но у меня хватает не реализованных идей, который нужно делать. И делать я это хочу с максимальным комфортом. Я уже перешёл на ООП суцельно, и ой как не хочется возвращаться к писанине "Всё в одном". Потому и прошу помочь понять что происходит в некоторых ситуациях...

stringo:
Кто выдаёт строчку "Ошибка при работе с объектом"? На 99 процентов этот кто-то вызывает функцию GetLastError(), которая обнуляет переменную _LastError

Нет, функция GetLastError() не вызывается вообще. Я уже понял, что ругань даже не в том классе, который я публиковал, а именно, в строке... В одной строке! Я её перенёс в функцию OnTick() эксперта-пустышки. Чтобы проверить всё наверняка. Вот что имеем:

void OnTick()
{
//---
   Print ("_LastError_9 = ", _LastError);
   CLogging.Printing (StringConcatenate ("CreatWorkingSMBArray() => ", CErrs.ErrorToString (_LastError)));
   Print ("_LastError_10 = ", _LastError);
}

 Классы, используемые в коде прикрепляю к сообщению.

Так вот если в любой компилируемый эксперт вписать то, что я опубликовал и в шапке добавить классы:

#include    <HOZ_Code\Classes\HandlingWithErrors.mqh>
#include    <HOZ_Code\Classes\Logging.mqh>
То становится понятным, что тут есть какой-то косяк. Вопрос только какой. Ведь я передаю строку как и положено соответствующим методом.

 Вот, кстати, лог:

2014.08.05 12:07:59.627 Expert BaseTemplate EURUSD,M5: removed
2014.08.05 12:07:59.626 BaseTemplate EURUSD,M5: uninit reason 1
2014.08.05 12:07:58.822 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:58.822 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:58.822 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:57.646 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:57.646 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:57.646 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:56.798 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:56.798 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:56.798 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:53.968 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:53.968 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:53.968 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:53.558 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:53.558 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:53.558 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:53.183 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:53.183 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:53.183 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:51.539 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:51.539 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:51.539 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:46.243 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:46.243 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:46.243 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:44.621 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:44.621 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:44.621 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:44.189 BaseTemplate EURUSD,M5: _LastError_10 = 0
2014.08.05 12:07:44.189 BaseTemplate EURUSD,M5: Logging => CreatWorkingSMBArray() => Îøèáêà ¹ 0 :: Îøèáêà ïðè ðàáîòå ñ îáúåêòîì
2014.08.05 12:07:44.189 BaseTemplate EURUSD,M5: _LastError_9 = 0
2014.08.05 12:07:39.897 BaseTemplate EURUSD,M5: initialized
2014.08.05 12:07:39.770 BaseTemplate EURUSD,M5 inputs: _Position_Properties= _______________ Position_Properties _____________ ; idt_Expiration=0; id_Lots=0.1; id_SL=0.0; id_TP=10.0; ii_Slippage=2; _BaseInfo= ____________________ BaseInfo ___________________ ; ib_Bootstrap=false; ib_RealTrade=true; ib_VirtualTrade=true; _Logging= ____________________ Logging ____________________ ; ib_NeedLogs=true; ib_PrintUP=true; ib_CommentUP=true; _Make_List_Of_Symbols= ______________ Make List Of Symbols _____________ ; is_ListOfWorkingSMB=; 
2014.08.05 12:07:38.571 Expert BaseTemplate EURUSD,M5: loaded successfully
Файлы:
 
Оператор break в switch забыли расставить, вот функция и возвращает ls_Error = "Ошибка при работе с объектом";
Причина обращения: