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

 

Yedelkin:

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

Судя по вопросу, Вы считаете, что при отключении OnTick() события NewTick не генерируются? Но в справочнике я такой информации не нашёл.

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

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

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

 
komposter:

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

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

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

На мой взгляд, два типа событий (NewTick и Timer) должны обрабатываться отдельно от остальных. верней так - Для каждого типа этих событий должен бы свой поток и соответственно своя очередь.

Скорей всего также следует разнести торговые события (Trade) и события по обработке стакана цен (BookEvent).

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

Lizar, Interesting,

я ошибался в части выводов работы с тестером. Видимо, логи демо принял за логи тестера. Конструкция

void OnChartEvent(const int id,           
                const long& lparam,   
                const double& dparam, 
                const string& sparam  
                )
  {
   if(id==CHARTEVENT_CUSTOM) TesterWithdrawal(1);
  }

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

 
komposter:

Я считаю именно так - если нет обработчика, событие в очередь не ставится.

Хорошо бы, если бы подтвердилась именно эта версия. Но для тестера  тики генерируются по-любому. Даже когда они совершенно не нужны.

komposter:

Это логично, и я не вижу смысла писать об этом в справке.

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

komposter:

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

Вот чтобы гарантированно не обрабатывать событие NewTick,  я и предлагаю сделать фунцию-выключатель. Чтобы экспертописатель сам мог решать, требуется ли ему генерирование терминалом событий  NewTick. У меня эксперт должен работать только с "чужими" сигналами, но присоединить его к какому-нибудь графику всё равно надо. И получается, например, что при тестировании/оптимизации определённая часть времени уходит на генерацию тиков по символу, к которому присоединён эксперт, а эксперту эти тики (и события NewTick) совершенно не нужны.
 
Yedelkin:

Но для тестера  тики генерируются по-любому. Даже когда они совершенно не нужны.

Как это? А проверять срабатывание ордеров (отложенных, СЛ и ТП) он будет по каким ценам?

В тестере нужны тики по всем инструментам, по которым торгует советник. Естественно, чем больше инструментов и чем выше качество моделирования, тем медленнее будет работа.


Yedelkin:

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

Да, но, следуя этой логике, абсолютно так же должны строится в очередь и все остальные события. Это было бы слишком.

 
komposter:

Как это? А проверять срабатывание ордеров (отложенных, СЛ и ТП) он будет по каким ценам?

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

komposter:


Да, но, следуя этой логике, абсолютно так же должны строится в очередь и все остальные события. Это было бы слишком.

Следуя этой логике, все исключения из правил генерации тиков и/или выставления событий в общую очередь должны быть перечислены в справочнике. Пока же нашёл только одно исключение, - на случай, когда (1) имеется функция OnTick(), (2) эта функция обрабатывает предыдущее событие NewTick. К моему случаю это исключение не подходит.

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

Yedelkin:

Следуя этой логике, все исключения из правил генерации тиков и/или выставления событий в общую очередь должны быть перечислены в справочнике. Пока же нашёл только одно исключение, - на случай, когда (1) имеется функция OnTick(), (2) эта функция обрабатывает предыдущее событие NewTick. К моему случаю это исключение не подходит.

Логично предположить, что если OnTick() отсутствует то и обработки тиков для этого графика (по символу этого графика) не ведется.

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

Если учесть то что эксперт обрабатывает тики с других чартов то тут мутить нужно именно с обработкой ВНЕШНИХ тиков.

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

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

 
Interesting:

Если учесть то что эксперт обрабатывает тики с других чартов то тут мутить нужно именно с обработкой ВНЕШНИХ тиков.

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

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

Всё верно говорите, именно этим путём я и пошёл - путём обработки исключительно внешних тиков. Здесь пока вопросов нет.

Interesting:

Логично предположить, что если OnTick() отсутствует то и обработки тиков для этого графика (по символу этого графика) не ведется.

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

Да вот я и зациклился на том, чтобы гарантированно знать, что общая очередь в моём случае не засоряется событиями от "внутренних" тиков. Могу, конечно, ошибаться, но  ведь "отключить" - это должно быть гораздо легче, чем "обеспечить своевременную генерацию тиков, правильную очерёдность событий, синхронизированность с сервером и т.д". ...Пусть "по умолчанию" для большинства всё остаётся  так как есть  на данный момент, а для экстремалов, типа меня, - добавить функцию отключения/переключения. С предостережениями в справочнике, если могут быть какие-нибудь побочные эффекты.
 
Yedelkin:

Всё верно говорите, именно этим путём я и пошёл - путём обработки исключительно внешних тиков. Здесь пока вопросов нет.

Да вот я и зациклился на том, чтобы гарантированно знать, что общая очередь в моём случае не засоряется событиями от "внутренних" тиков. Могу, конечно, ошибаться, но  ведь "отключить" - это должно быть гораздо легче, чем "обеспечить своевременную генерацию тиков, правильную очерёдность событий, синхронизированность с сервером и т.д". ...Пусть "по умолчанию" для большинства всё остаётся  так как есть  на данный момент, а для экстремалов, типа меня, - добавить функцию отключения/переключения. С предостережениями в справочнике, если могут быть какие-нибудь побочные эффекты.

На счет легче это спорный вопрос, да и предлагаемый Вами вариант не менее спорный (на мой взгляд).

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

Вторым вопрос который меня в этой связи будет следующим - все события в одной очереде обрабатываются или для определенных событий (OnTimer, OnTick и OnTrade) свои очереди?

 
Interesting:

На счет легче это спорный вопрос, да и предлагаемый Вами вариант не менее спорный (на мой взгляд).

Согласен; трудно судить, о чём толком не знаешь. Остаётся только высказывать пожелания :) Насчёт спорности именно моего варианта могу сказать, что тут главное - это сама идея "Мне не нужны тики!"; а как она будет реализована - это на усмотрение разработчиков.

Interesting:

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

 Совершенно верно. Для меня тут решение одно - обрубить концы (ввести функцию-переключатель) и гарантированно не париться с вопросом :) Но также следует помнить и про тестер, который вхолостую тратит время на создание (генерирование?) ненужных в принципе тиков. Только потому, что эксперт вынужденно прикреплён к одному из символов.

Interesting:

Вторым вопрос который меня в этой связи будет следующим - все события в одной очереде обрабатываются или для определенных событий (OnTimer, OnTick и OnTrade) свои очереди?

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

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