Пожелания для МТ5 - страница 51

 
Yedelkin:

Пояснение. Если эксперт не предусматривает обработку тиков по символу, к графику которого он прикреплён, то непрерывная генерация событий NewTick для этого символа ведёт к изишнему переполнению очереди событий, обрабатываемых данным экспертом.


https://www.mql5.com/ru/docs/runtime/running

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

Очередь событий имеет ограниченный размер. При переполнении очереди старые события удаляются без обработки для того, чтобы освободить место для вновь поступающих событий. Поэтому крайне рекомендуется писать эффективные обработчики событий и не рекомендуется использовать бесконечные циклы (исключение составляют скрипты, которые обрабатывают одно единственное событие Start).

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Rosh:

https://www.mql5.com/ru/docs/runtime/running

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

Очередь событий имеет ограниченный размер. При переполнении очереди старые события удаляются без обработки для того, чтобы освободить место для вновь поступающих событий. Поэтому крайне рекомендуется писать эффективные обработчики событий и не рекомендуется использовать бесконечные циклы (исключение составляют скрипты, которые обрабатывают одно единственное событие Start).

Таким образом, правило "одно событие NewTick на всю общую очередь" действует всегда, вне зависимости от наличия/отсутствия у эксперта функции OnTick(). Спасибо за разъяснение!

Остаётся вопрос насчёт отключения процесса генерирования ненужных тиков в тестере.

 

Yedelkin:

Остаётся вопрос насчёт отключения процесса генерирования ненужных тиков в тестере.

Не обрабатывайте их там и по логике вещей все будет ОК.

 
Interesting:

Не обрабатывайте их там и по логике вещей все будет ОК.

Это только на первый взгляд " всё будет ОК". Исхожу из того, что тики в тестере генерируются принудительно, за весь период тестирования/оптимизации. Согласны? Если так, то принудительно будут генерироваться тики и по символу, на который прикреплён эксперт, и которые (тики) этим экспертом не обрабатываются. Т.е., несмотря на отсутствие обработки тиков по этому символу (Ваше предложение), тестер будет попусту тратить время на их генерирование. ...Если чего недопонимаю - готов с удовольствием узнать новые вещи.

 
Yedelkin:

Ну я же ещё раз говорю: эксперт вообще не работает с символом, к которому прикреплён. И никаких SL и TP именно по этому символу ему отслеживать не надо. Т.е. тики по данному символу эксперту совершенно не нужны. Прикреплён эксперт к символу только по необходимости, потому что для запуска его надо хоть куда-то прикрепить.

Кхм... А зачем тестировать советника на инструменте, по которому не ведется торговля? Тестируйте на том, по которому нужно торговать.

А если торговать вообще не нужно, то и тестировать не нужно - работайте с историей котировок из запущенного в реальном времени советника.

 
Rosh:

Все возникающие события клиентский терминал складывает в общую очередь. Таким образом события обрабатываются одно за другим в порядке поступления.

Рашид, а что происходит с событиями, которые не обрабатываются советником/скриптом/индикатором? Вопрос же именно в этом был.

Они действительно ставятся в очередь, и удаляются из нее только когда включается обработка события, реакция на которое предусмотрена?

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

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Yedelkin:

Это только на первый взгляд " всё будет ОК". Исхожу из того, что тики в тестере генерируются принудительно, за весь период тестирования/оптимизации. Согласны? Если так, то принудительно будут генерироваться тики и по символу, на который прикреплён эксперт, и которые (тики) этим экспертом не обрабатываются. Т.е., несмотря на отсутствие обработки тиков по этому символу (Ваше предложение), тестер будет попусту тратить время на их генерирование. ...Если чего недопонимаю - готов с удовольствием узнать новые вещи.

Давайте разговаривать за режим "Все тики".

1. Они как я понимаю не просто принудительно генерируются, а по всем символам выбранным и торгуемым в эксперте (без этого никуда).

2. Тики по выбранному в настройках тестера (основной символ) по желанию программиста могут обрабатываться в OnTick или нет (при этом если данный тип события уже обрабатывается или сушествует в очереди он в нее не добавляется).

по крайней мере я так понял логику разработчиков

3.Исходя из описанной Вами задачи мы получаем сведения об тиках на дополнительных символах при помощи пользовательских событий, относящихся к ChartEvent. При ChartEvent попадает в очередь в обязательном порядке и либо выполнится либо при переполнении будет удален.

Исходя из вышесказанного становится ясно что при неэффективном исполнении обработки тиков с "дополнительных символов" (внешних для эксперта) именно обработка ChartEvent станет проблемой и замусорит весь стек очереди событий.

Я возможно не до конца понимаю всю логику именно вашего эксперта, но в данных условиях я бы в таймер помести блок сбора информации о ценах по всем символам и остальной важной информации о дополнительных символах. А при помощи ChartEvent передавал только информацию о возникновении скажем нового бара.

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
komposter:

Рашид, а что происходит с событиями, которые не обрабатываются советником/скриптом/индикатором? Вопрос же именно в этом был.

Они действительно ставятся в очередь, и удаляются из нее только когда включается обработка события, реакция на которое предусмотрена?

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

Насколько я понимаю при отсутствии обработки события находящиеся в очереди "выкидываются" из нее в момент поступления нового события (если очередь переполнена).
 
komposter:

Рашид, а что происходит с событиями, которые не обрабатываются советником/скриптом/индикатором? Вопрос же именно в этом был.

Они действительно ставятся в очередь, и удаляются из нее только когда включается обработка события, реакция на которое предусмотрена?

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

Ответ разработчиков:

Очередь у каждого советника/скрипта/индикатора своя. Естественно, ничего в очереди не зависает, если вдруг нет обработчика. Ну нет и нет - вычитывается и пропускается.

 
komposter:

Кхм... А зачем тестировать советника на инструменте, по которому не ведется торговля?

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

Но в любом случае - спасибо, не без Вашей помощи удалось узнать очень многое. 

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