MT4 зависает, не вызывает start() снова - страница 4

 

Я согласен с Raptor, единственный способ, которым кто-то действительно сможет помочь, это если вы опубликуете соответствующий код, в противном случае это все равно, что просто делать выстрелы в темноте.

 

Извините, но я не могу выложить код. Это 72 страницы и это код продукта, который я буду выпускать.

А пока я реализовал вызовы журнала, которые предложил WHRoeder в своем первом ответе,

записывая отладочную информацию, которую можно просмотреть с помощью dbgView от Microsoft.

Эта отладочная информация точно такая же, как и моя собственная отладочная информация, которая показывает,

что мы можем доверять тому, что видим в лог-файлах.

Итак, лог-файл сообщает нам, что start() завершается, но больше не запускается.

Похоже, что это связано с объемом работы, выполняемой в CreateHistory(), которая вызывается внутри start().

Когда я вызываю ту же CreateHistory() в init(), точно такой же объем работы выполняется без проблем.

Можем ли мы привлечь разработчика MT4, чтобы он посмотрел на это?

Где я могу найти дополнительную информацию о сбое MT4 (версия моего индикатора для советника сбоит в MT4)?

Я не смог ничего увидеть в средстве просмотра событий windows.

 

Когда я сказал "выложите соответствующий код", я не имел в виду весь код, я имел в виду, что вы изменили или добавили в него с момента последнего успешного запуска? Я предполагаю, что вы не писали 72 страницы прямого кода без какого-либо тестирования по пути ...

 

Что я изменил: я перенес CreateHistory() из init() в start().

Текущая ситуация выглядит следующим образом:

Когда я вызываю CreateHistory() в start без задержки: работает нормально.

Когда я вызываю CreateHistory() в start с задержкой >= 1 сек: MT4 зависает.

Однако зависает не CreateHistory(), а функция start().

Вот код для start() :

int start()
  {     
   int TFInd;
   int k;  
   
   if (CheckDebug(DebugStart, 2))
      {
         DebugStr = "DebugStart: " + "begin ---------------------------------------: ";
         PrintDebug(DebugFile, DebugStr);
      }

      
   for (IndexCount = 1; IndexCount <= MaxIndices; IndexCount++)
      {
         if (CheckDebug(DebugStart, 2))
            {
               DebugStr = "DebugStart: " + "in loop +++++++++++++: "+ "IndexCount: "+ IndexCount;
               PrintDebug(DebugFile, DebugStr);
            }              
      
         if (MyCurrencyIndices[IndexCount] == 0)
            break;

         CurrencyIndex = MyCurrencyIndices[IndexCount];             

         CurrencyIndexStr = Prefix + CurrencyNames[CurrencyIndex];
                 
         if (!HistoryCreated[CurrencyIndex] && (TimeLocal() >= IndiStartTime + 0))                                                  // yyy
            {                     
               FileSeek(FileHandle[CurrencyIndex, TimeFrameM15] , HeaderFilePointer[CurrencyIndex, TimeFrameM15] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameH1] , HeaderFilePointer[CurrencyIndex, TimeFrameH1] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameH4] , HeaderFilePointer[CurrencyIndex, TimeFrameH4] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameD1] , HeaderFilePointer[CurrencyIndex, TimeFrameD1] , SEEK_SET);

               CreateHistory();
               HistoryCreated[CurrencyIndex] = true;    
            }                           
      }  

   if (CheckDebug(DebugStart, 2))
      {
         DebugStr = "DebugStart: " + "returning ...";
         PrintDebug(DebugFile, DebugStr);
      }
                          
   return(0);
  }

Ниже приведены 2 лог-файла:

один для кода выше с TimeLocal() >= IndiStartTime + 0 (работает нормально), другой для кода выше с TimeLocal() >= IndiStartTime + 1 (зависает).

В последнем случае CreateHistory() работает и возвращается правильно.

Она вызывается только один раз внутри start().

Больше ничего не делается в start(), тем не менее start() больше никогда не вызывается MT4, и MT4 зависает, съедая CPU.

CreateHistory() вызывает 80% моего кода.

Я не могу его опубликовать.

лог-файл для задержки 0 сек:

2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 Debug Init() begin:
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 Debug Init() return:
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1 <----------- CreateHistory() вызывается немедленно
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 Отладка CreateHistoryTimeFrame(), старт: CurrencyIndex: 1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0
2013.12.04 12:34:10 Test reduced: USDJPY M15 Debug CreateHistoryTimeFrame(), final return: CurrencyIndex: 1 TF: 1
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:34:10 Тест уменьшен: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: begin ---------------------------------------: <------------ start() срабатывает неоднократно
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:34:11 Тест уменьшен: USDJPY M15 DebugStart: возврат ...

лог-файл для 1 секунды задержки:

2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 Debug Init() begin:
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 Debug Init() return:
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: в цикле +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Тест уменьшен 0: USDJPY M15 DebugStart: возврат ...
2013.12.04 12:32:18 Тест уменьшен 0: USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:18 Тест уменьшен 0: USDJPY M15 Debug CreateHistoryTimeFrame(), start: CurrencyIndex: 1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0 <----------- через 1 сек CreateHistory() вызывается
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 Debug CreateHistoryTimeFrame(), final return: CurrencyIndex: 1 TF: 1
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: returning ... <---------- start() is never triggerd again

 
Мне хочется поиграть в прятки. Сейчас я очень подозреваю, что ваша функция CreateHistory() неоднократно записывает в живые .hst файлы. Я прав?
 

CreateHistory() создает автономные графики, записывая их в файлы .hst.

Она НЕ записывает в живые файлы .hst.

 
mt4forum:

CreateHistory() создает автономные графики, записывая их в файлы .hst.

Она НЕ записывает в живые файлы .hst.

Как убедиться, что это именно так?
 
RaptorUK:
Как убедиться, что это именно так?

   CurrencyIndexStr = "CI_EUR";  

   FileName = CurrencyIndexStr + ThePeriod + ".hst";
   FileHandle = FileOpenHistory(FileName, FILE_BIN|FILE_WRITE);  

В MT4 нет инструмента с именем CI_EUR.

 
mt4forum:

В MT4 не существует инструмента с именем CI_EUR.

OK