"Виснет" терминал

 

Помогите решить проблему....

Сделал индикатор... Скомпилировал... все в норме... присоединяю к графику - "виснет" терминал... Никаких логов, никаких зацепок нет...

Прошерстил код... Выяснил, что зависает на одной функции.. Точнее, при выходе из функции... Тестировал функцию отдельно - работает как часы....

Модераторы отзовитесь... Помогите решить проблему.... Код и скомпилированый файл отправлю в личку...

 

Некорректно написанный индикатор может завесить терминал.


Модераторы не занимаются проверкой чужого кода. Если хотите получить помощь, просто приложите свой индикатор в тему и наверняка найдутся люди, кто проверит код и укажет на ошибку.

 
Renat писал(а) >>

Некорректно написанный индикатор может завесить терминал.

Модераторы не занимаются проверкой чужого кода. Если хотите получить помощь, просто приложите свой индикатор в тему и наверняка найдутся люди, кто проверит код и укажет на ошибку.

Я ошибок не нашел, хотя смотрел только проблемный участок. Дело в другом.

 

Если есть обоснованные подозрения на ошибку терминала, то лучше сразу слать исходный код Славе Старикову (stringo) на емайл stringo AT metaquotes . ru


Код после проверки будет удален.

 
Renat писал(а) >>

Некорректно написанный индикатор может завесить терминал.

Модераторы не занимаются проверкой чужого кода. Если хотите получить помощь, просто приложите свой индикатор в тему и наверняка найдутся люди, кто проверит код и укажет на ошибку.

Написано более 50 функций... Каждая по отдельности работает нормально... При соединении их в единое целое - "виснет"... Думаю проблема в самом терминале...

Было несколько вариантов...

В первом использовал глобальные переменные... при изменении значения глобальной переменной - терминал "зависает"...

Заменил глобальные переменные функциями... таже история...

Только теперь совсем уж начались "чудеса"...

Проблемы начинаются в функции

int OrdTotals(int i,int index,bool check=true)
{
   static int total,add;
   int Totals[];
//---
   if(check)
   {
// Размер массива Orders[] можно увеличивать/уменьшать на 1
      if(i!=-1 && i!=0 && i!=1)
         return(-1);
      total+=i;
// Возвращает номер тикета
      if(i==0)
      {
//         if(index<0)
//            return(total);
         return(Totals[index]);
      }
// Возвращает общее количество открытых и отложенных ордеров, добавляет новый элемент в массив
// Параметр index - это новое значение элемента массива (номер записи в базе ордеров)
      if(i==1)
      {
         if(total>=add)
         {
            add+=100;
            ArrayResize(Totals,add);
         }
         Totals[total-1]=index;
      }
// Возвращает общее количество открытых и отложенных ордеров, уменьшает размер массива
// Запись массива index-1 удаляется. На его место записывается последняя запись массива
      if(i==-1)
      {
         Totals[index]=Totals[total];
         Totals[total]=0;
      }
      return(total);
   }
   else
   {
// Инициализация. Остальные формальные параметры игнорируются
      if(total==0)
         return(total);
      total=0;
      ArrayInitialize(Totals,0);
      return(total);
   }
}

В ней закомментированы 2 строчки: возвращает общее количество открытых ордеров... Если вставить эти 2 строчки. то мы в стопоре...

Функция не возвращает значение.. зацикливается сама на себя....

 
Renat писал(а) >>

Если есть обоснованные подозрения на ошибку терминала, то лучше сразу слать исходный код Славе Старикову (stringo) на емайл stringo AT metaquotes . ru

Код после проверки будет удален.

Я отослал Славе Старикову (stringo) код и скомпилированый файл через личное сообщение... Но похоже личные сообщения модераторами не читаются....

 
Модераторы ответьте по теме... Все исходники Вам отосланы...
Причина обращения: