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

 

Yedelkin:

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

В смысле?

В эксперте нет OnTick(), а события NewTick в очередь становятся?

Как узнали, чем анализировали очередь? )

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

Не нашёл способа отключить при необходимости поток тиков (события NewTick) для символа, к графику которого прикреплён эксперт.


Чувствуется что отработал с воскресенья по пятницу без отдыха... :))

 
komposter:

В смысле?

Как узнали...?

Да узнал двумя способами. Сначала знакомился со связкой EventChartCustom - OnChartEvent на примере простого сбора экспертом сигналов индикаторов с чужих символов. При этом эксперт с тиками своего символа не работал, функция Ontick() в коде эксперта была закомментирована. Когда запустил эксперт в тестере, то обнаружилось, что время прохода различается в зависимости от того, к какому символу прикрепляется эксперт. См., например, пример ниже. При одних и тех же параметрах оптимизации время проходов заметно различается.

OE      0       Tester  15:35:25        Experts\Ye00-01-0Event.ex5 on USDRUR,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
CH      0       Tester  15:35:25        complete optimization started
LO      0       Core 1  15:35:25        agent process started
HK      0       Core 1  15:35:25        connecting to 127.0.0.1:3000
OK      0       Core 2  15:35:25        agent process started
DO      0       Core 2  15:35:25        connecting to 127.0.0.1:3001
DG      0       Core 2  15:35:26        connected
EK      0       Core 1  15:35:26        connected
NQ      0       Core 1  15:35:26        authorized (agent build 384)
QK      0       Core 2  15:35:26        authorized (agent build 384)
DI      0       Core 1  15:35:26        pass 0 started
LM      0       Core 2  15:35:26        pass 1 started
QK      0       Core 1  15:35:27        common synchronization completed
FD      0       Core 2  15:35:27        common synchronization completed
GR      0       Core 2  15:36:08        pass 1 returned result 10000.00 in 42 sec
RH      0       Core 2  15:36:08        pass 2 started
ON      0       Core 1  15:36:09        pass 0 returned result 10000.00 in 43 sec
ID      0       Core 1  15:36:09        pass 3 started
GK      0       Core 2  15:36:21        pass 2 returned result 10000.00 in 13 sec
QQ      0       Core 2  15:36:21        pass 4 started
PH      0       Core 1  15:36:21        pass 3 returned result 10000.00 in 12 sec
IR      0       Core 1  15:36:21        pass 5 started
ED      0       Core 2  15:36:34        pass 4 returned result 10000.00 in 13 sec
ON      0       Core 2  15:36:34        pass 6 started
MQ      0       Core 1  15:36:34        pass 5 returned result 10000.00 in 13 sec
GK      0       Core 1  15:36:34        pass 7 started
KN      0       Core 2  15:36:46        pass 6 returned result 10000.00 in 12 sec
ND      0       Core 2  15:36:46        pass 8 started
CJ      0       Core 1  15:36:47        pass 7 returned result 10000.00 in 13 sec
EP      0       Core 1  15:36:47        pass 9 started
PG      0       Core 2  15:36:59        pass 8 returned result 10000.00 in 13 sec
QO      0       Core 1  15:36:59        pass 9 returned result 10000.00 in 12 sec
MD      0       Tester  15:36:59        optimization finished, total passes 10
HS      0       Tester  15:36:59        optimization passed in 1 minutes 34 seconds
CE      0       Core 1  15:36:59        connect closed
PI      0       Core 2  15:36:59        connect closed
ON      1       Tester  15:37:20        genetics turned off because 10 passes, to use genetics increase amount of optimized parameters
RQ      0       Tester  15:37:20        Experts\Ye00-01-0Event.ex5 on EURGBP,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
FL      0       Tester  15:37:20        complete optimization started
QM      0       Core 1  15:37:20        connecting to 127.0.0.1:3000
MG      0       Core 2  15:37:20        connecting to 127.0.0.1:3001
MN      0       Core 1  15:37:20        connected
LR      0       Core 2  15:37:20        connected
FH      0       Core 1  15:37:20        authorized (agent build 384)
QR      0       Core 2  15:37:20        authorized (agent build 384)
DF      0       Core 1  15:37:20        pass 0 started
LJ      0       Core 2  15:37:20        pass 1 started
JR      0       Core 1  15:37:20        common synchronization completed
EK      0       Core 2  15:37:20        common synchronization completed
IK      0       Core 1  15:38:35        pass 0 returned result 10000.00 in 75 sec
KQ      0       Core 1  15:38:35        pass 2 started
QG      0       Core 2  15:38:36        pass 1 returned result 10000.00 in 76 sec
FM      0       Core 2  15:38:36        pass 3 started
JD      0       Core 1  15:39:16        pass 2 returned result 10000.00 in 41 sec
MN      0       Core 1  15:39:16        pass 4 started
QP      0       Core 2  15:39:17        pass 3 returned result 10000.00 in 41 sec
FJ      0       Core 2  15:39:17        pass 5 started
KM      0       Core 1  15:39:56        pass 4 returned result 10000.00 in 40 sec
CG      0       Core 1  15:39:56        pass 6 started
DJ      0       Core 2  15:39:57        pass 5 returned result 10000.00 in 40 sec
LP      0       Core 2  15:39:57        pass 7 started
IF      0       Core 1  15:40:37        pass 6 returned result 10000.00 in 41 sec
FL      0       Core 1  15:40:37        pass 8 started
DS      0       Core 2  15:40:38        pass 7 returned result 10000.00 in 41 sec
GI      0       Core 2  15:40:38        pass 9 started
KP      0       Core 1  15:41:18        pass 8 returned result 10000.00 in 41 sec
NH      0       Core 2  15:41:19        pass 9 returned result 10000.00 in 41 sec
MS      0       Tester  15:41:19        optimization finished, total passes 10
OJ      0       Tester  15:41:19        optimization passed in 3 minutes 59 seconds

 

komposter:

В эксперте нет OnTick(), а события NewTick в очередь становятся?

 Для проверки ответа на этот вопрос (второй способ) я модифицировал код эксперта таким образом:

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }
т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по символу, к которому прикреплён эксперт, поступают регулярно:
DS      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PO      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
QI      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PD      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
IG      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PR      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
LO      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PI      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
DE      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PQ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LR      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HO      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DH      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PD      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LQ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HR      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DO      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PK      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LD      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HQ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DR      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PN      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LK      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HD      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DQ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PM      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LN      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
EJ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
LE      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
PP      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LM      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HN      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DK      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PG      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LP      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HM      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DN      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PJ      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LG      0       Ye00-01-0Event (EURGBP,M1)      20:29:36        Ye00-01-0Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38

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

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

 
sergeev:

Чувствуется что отработал с воскресенья по пятницу без отдыха... :))

Судя по реплике, Вы знаете правильное решение? - Подскажите!
 
Yedelkin:
т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по

символу, к которому прикреплён эксперт, поступают регулярно:


вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?

-------------

если

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }


вставить в простой эксперт и пустить в тестер, то она не активируется.

у вас есть другие функции, которые вызывают OnChartEvent.?

 
sergeev:

у вас есть другие функции, которые вызывают OnChartEvent.?

Да, конечно. Так как эксперт при помощи связки EventChartCustom - OnChartEvent  собирает сигналы индикаторов с чужих символов, то каждый такой индикатор имеет свой экземпляр функции EventChartCustom(). Первым параметром у каждого экземпляра функции EventChartCustom() указан идентификатор графика, к которому прикреплён наш эксперт; вторым параметром - нуль.

sergeev:

если вставить в любой эксперт, то она не активируется.

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

sergeev:

вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?

 Нет, немного не так. Я хотел посмотреть, поступают ли тики по символу, к графику которого прикреплён эксперт, в момент обработки функцией OnChartEvent() пользовательских событий, поступающих от индикаторов с чужих символов. Видно, что тики по EURGBP поступают. Исходя из справочника прихожу к выводу, что при поступлении новых тиков по символу генерируется и событие NewTick.

 

Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.

NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.

В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.

 
sergeev:

Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.

NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.

В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.

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

 

 Что касается реплик про "гадание на гуще" и "искусственность механизмов отслеживания очереди", - то я изначально и не предлагал разбираться в коде и искать ответ на вопрос "почему так происходит?". Как можно видеть из моего предложения, ответ для себя я уже нашёл. Но давайте рассмотрим проблему с более абстрактной точки зрения, без отвлечения внимания на код конкретного эксперта.

sergeev:

NewTick - напрямую никак не связан с OnChartEvent.

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

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

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

sergeev:

В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.

 Для справки. Эксперт навешивает экземпляры одного и то же индикатора с одними и теми же параметрами и с одним и тем же "механизом связок" на соседние символы, на одном и том же временном промежутке. Связка одна и та же: EventChartCustom - OnChartEvent.

 Правильно ли я понял, что Вы согласны с утверждением, что "если в эксперте нет OnTick(), то события NewTick в очередь вообще не выставляются"?

 

а зачем гадать и придумывать гипотезы?

ваша просьба   "ввести функцию-переключатель, позволяющую программно запрещать генерацию события NewTick для символа, к графику которого прикреплён эксперт. "   ясна.

Напишите в сервисдеск.

все остальное - борьба с ветряными мельницами.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
sergeev:

а зачем гадать и придумывать гипотезы?

все остальное - борьба с ветряными мельницами.

Да не скажите :) Кто-то привык работать вслепую, а кто-то стремится побольше узнать о явлении, которое предстоит обуздать. Гипотезы же появляются на фоне отсутствия той или иной информации. Благодарю за участие в обсуждении.

В СД написал. Не знал, что туда можно адресовать предложения. 

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