MetaTrader 4. Build 164. - страница 5

 
в тройке у нас было односекундное ограничение на работу эксперта или пользовательского индикатора. и в "особенностях написания пользовательских индикаторов" у нас был специальный топик о том, как преодолевать это ограничение и продолжать расчёт с прерванного места. попытайтесь самостоятельно, в тексте индикатора, поставить аналогичное ограничение с аналогичным продолжением расчёта. либо предотвращайте расчёт индикатора на подкачках.
 
А если они написаны правильно, но требуют достаточно много вычислений?

Значит они все-таки написаны "неправильно". Попробуйте переписать так, чтобы заработало в 10-20-50-100 раз быстрее.
 
А не подскажите, как сроро будет тестер для МТ4, а то уж очень хочется сравнить.
Или хотя бы какие фичи в нем предвидятся.
С уважением.
 
to Slawa and Renat
Сразу бы и отвечали, код который требует много вычислений на MQL4 лучше не писать!
 
Dmitrii 15.04.05 07:47

    to Slawa and Renat
    Сразу бы и отвечали, код который требует много вычислений на MQL4 лучше не писать! 


Оказалось что проблема решается и в MQL в несколько строчек.
Но об этом каждый юзер должен сам позаботиться.
(см. гдето в форуме про функцию Idle)

 
to Slawa and Renat
Сразу бы и отвечали, код который требует много вычислений на MQL4 лучше не писать!

Уважаемый Dmitrii,
К сожалению, должен Вам заметить, рациональность расходования ресурсов никто не отменял.
Если не укладываетесь в рамки времени, то нужно переделывать _свой_ код, а не обвинять других.

Попробуйте переписать так, чтобы заработало в 10-20-50-100 раз быстрее.
И Вы сможете это сделать легко, как только озаботитесь этой мыслью.
Проверено.
 

Уважаемый Dmitrii,
К сожалению, должен Вам заметить, рациональность расходования ресурсов никто не отменял.
Если не укладываетесь в рамки времени, то нужно переделывать _свой_ код, а не обвинять других.

Попробуйте переписать так, чтобы заработало в 10-20-50-100 раз быстрее.
И Вы сможете это сделать легко, как только озаботитесь этой мыслью.

Я говорю про ситуацию когда год и так написан оптимально но всё равно требует много вычислений. Почему вы не оптимизируете MT4 чтобы он работал в 10, 100 … раз быстрей или почему не сделать чтобы MT4 использовал трафик раз в 100 меньше? Да потому что это не возможно.
Но можно сделать так что время затраченное на вычисление не мешало пользователю работать.
 

Оказалось что проблема решается и в MQL в несколько строчек.
Но об этом каждый юзер должен сам позаботиться.
(см. гдето в форуме про функцию Idle)

Что та не нашел, может вы покажете?
 
2Dmitrii, у нас все оптимизировано. И над этим работаем постоянно.

Я говорю про ситуацию когда год и так написан оптимально но всё равно требует много вычислений.

И Вы сможете это сделать легко, как только озаботитесь этой мыслью.
Проверено.
 
Попробуйте вот это:
      ...............
   // Цикл по необсчитанным барам
   for ( int i = limit; i >= 0; i -- )
   {
         .............. // здесь код обсчитывающий бар
      Idle();    // Эта функция отдает управление интерфейсу
   }
}

//  Функция поддержки многозадачности в стиле Win3.11
//   Посылает в очередь сообщений текущего окна пустое сообщение
//   и временно отдает управление интерфейсу.
//   Интерфейс обработав сообщения от мыши и клавиатуры (если они есть)
//   возвращает управление в эту функцию для продолжения
//   работы индикатора.
//
int hwnd = 0;
int Idle()
{
   if (hwnd == 0) hwnd = WindowHandle(Symbol(),Period());
   if (hwnd != 0) SendMessageA(hwnd,0,0,0);
}


После того, как я вставил этот код в индикаторы,
я перестал замечать подвисание терминала.
Подвисает только изредка при подкачке данных на таймфрейм где давно небыл.

Сейчас индикатор подключен на 16 чартах.
Раньше терминал вис на на несколько минут при запуске и не реагировал на мыш.
Теперь этого нет.

Не знаю как сделан терминал,
в принципе с этой конструкцией могут быть проблемы (типа переполнений стека и пр.)
если при запуске начать быстро нажимать на разные кнопки.
Но у меня пока ни разу такое не наблюдалось.

Причина обращения: