Пояснение. Если эксперт не предусматривает обработку тиков по символу, к графику которого он прикреплён, то непрерывная генерация событий NewTick для этого символа ведёт к изишнему переполнению очереди событий, обрабатываемых данным экспертом.
В смысле?
В эксперте нет OnTick(), а события NewTick в очередь становятся?
Да узнал двумя способами. Сначала знакомился со связкой EventChartCustom - OnChartEvent на примере простого сбора экспертом сигналов индикаторов с чужих символов. При этом эксперт с тиками своего символа не работал, функция Ontick() в коде эксперта была закомментирована. Когда запустил эксперт в тестере, то обнаружилось, что время прохода различается в зависимости от того, к какому символу прикрепляется эксперт. См., например, пример ниже. При одних и тех же параметрах оптимизации время проходов заметно различается.
OE 0 Tester 15:35:25 Experts\Ye00-01-0Event.ex5 on USDRUR,M1 from2010.08.0100:00 to 2010.08.0900:00CH 0 Tester 15:35:25 complete optimization started
LO 0 Core 115:35:25 agent process started
HK 0 Core 115:35:25 connecting to 127.0.0.1:3000
OK 0 Core 215:35:25 agent process started
DO 0 Core 215:35:25 connecting to 127.0.0.1:3001
DG 0 Core 215:35:26 connected
EK 0 Core 115:35:26 connected
NQ 0 Core 115:35:26 authorized (agent build 384)
QK 0 Core 215:35:26 authorized (agent build 384)
DI 0 Core 115:35:26 pass 0 started
LM 0 Core 215:35:26 pass 1 started
QK 0 Core 115:35:27 common synchronization completed
FD 0 Core 215:35:27 common synchronization completed
GR 0 Core 215:36:08 pass 1 returned result 10000.00in42 sec
RH 0 Core 215:36:08 pass 2 started
ON 0 Core 115:36:09 pass 0 returned result 10000.00in43 sec
ID 0 Core 115:36:09 pass 3 started
GK 0 Core 215:36:21 pass 2 returned result 10000.00in13 sec
QQ 0 Core 215:36:21 pass 4 started
PH 0 Core 115:36:21 pass 3 returned result 10000.00in12 sec
IR 0 Core 115:36:21 pass 5 started
ED 0 Core 215:36:34 pass 4 returned result 10000.00in13 sec
ON 0 Core 215:36:34 pass 6 started
MQ 0 Core 115:36:34 pass 5 returned result 10000.00in13 sec
GK 0 Core 115:36:34 pass 7 started
KN 0 Core 215:36:46 pass 6 returned result 10000.00in12 sec
ND 0 Core 215:36:46 pass 8 started
CJ 0 Core 115:36:47 pass 7 returned result 10000.00in13 sec
EP 0 Core 115:36:47 pass 9 started
PG 0 Core 215:36:59 pass 8 returned result 10000.00in13 sec
QO 0 Core 115:36:59 pass 9 returned result 10000.00in12 sec
MD 0 Tester 15:36:59 optimization finished, total passes 10
HS 0 Tester 15:36:59 optimization passed in1 minutes 34 seconds
CE 0 Core 115:36:59 connect closed
PI 0 Core 215: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 from2010.08.0100:00 to 2010.08.0900:00FL 0 Tester 15:37:20 complete optimization started
QM 0 Core 115:37:20 connecting to 127.0.0.1:3000
MG 0 Core 215:37:20 connecting to 127.0.0.1:3001
MN 0 Core 115:37:20 connected
LR 0 Core 215:37:20 connected
FH 0 Core 115:37:20 authorized (agent build 384)
QR 0 Core 215:37:20 authorized (agent build 384)
DF 0 Core 115:37:20 pass 0 started
LJ 0 Core 215:37:20 pass 1 started
JR 0 Core 115:37:20 common synchronization completed
EK 0 Core 215:37:20 common synchronization completed
IK 0 Core 115:38:35 pass 0 returned result 10000.00in75 sec
KQ 0 Core 115:38:35 pass 2 started
QG 0 Core 215:38:36 pass 1 returned result 10000.00in76 sec
FM 0 Core 215:38:36 pass 3 started
JD 0 Core 115:39:16 pass 2 returned result 10000.00in41 sec
MN 0 Core 115:39:16 pass 4 started
QP 0 Core 215:39:17 pass 3 returned result 10000.00in41 sec
FJ 0 Core 215:39:17 pass 5 started
KM 0 Core 115:39:56 pass 4 returned result 10000.00in40 sec
CG 0 Core 115:39:56 pass 6 started
DJ 0 Core 215:39:57 pass 5 returned result 10000.00in40 sec
LP 0 Core 215:39:57 pass 7 started
IF 0 Core 115:40:37 pass 6 returned result 10000.00in41 sec
FL 0 Core 115:40:37 pass 8 started
DS 0 Core 215:40:38 pass 7 returned result 10000.00in41 sec
GI 0 Core 215:40:38 pass 9 started
KP 0 Core 115:41:18 pass 8 returned result 10000.00in41 sec
NH 0 Core 215:41:19 pass 9 returned result 10000.00in41 sec
MS 0 Tester 15:41:19 optimization finished, total passes 10
OJ 0 Tester 15:41:19 optimization passed in3 minutes 59 seconds
komposter:
В эксперте нет OnTick(), а события NewTick в очередь становятся?
Для проверки ответа на этот вопрос (второй способ) я модифицировал код эксперта таким образом:
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);
if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
}
т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по символу, к которому прикреплён эксперт, поступают регулярно:
Ну а поскольку в справочнике сказано, что "событие NewTick генерируется при поступлении нового тика по символу, к графику которого прикреплен эксперт", факт поступления новых тиков должен приводить к генерированию событий NewTick.
Судя по вопросу, Вы считаете, что при отключении OnTick() события NewTick не генерируются? Но в справочнике я такой информации не нашёл.
Yedelkin: т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по
символу, к которому прикреплён эксперт, поступают регулярно:
вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?
-------------
если
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);
if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
}
вставить в простой эксперт и пустить в тестер, то она не активируется.
у вас есть другие функции, которые вызывают OnChartEvent.?
у вас есть другие функции, которые вызывают OnChartEvent.?
Да, конечно. Так как эксперт при помощи связки EventChartCustom - OnChartEvent собирает сигналы индикаторов с чужих символов, то каждый такой индикатор имеет свой экземпляр функции EventChartCustom(). Первым параметром у каждого экземпляра функции EventChartCustom() указан идентификатор графика, к которому прикреплён наш эксперт; вторым параметром - нуль.
sergeev:
если вставить в любой эксперт, то она не активируется.
Приведена только часть кода, - из эксперта, который собирает сигналы индикаторов с чужих символов. Если нет индикаторов, то и эта часть кода (функция OnChartEvent) не будет обрабатывать пользовательские события ввиду их отсутствия.
sergeev:
вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?
Нет, немного не так. Я хотел посмотреть, поступают ли тики по символу, к графику которого прикреплён эксперт, в момент обработки функцией OnChartEvent() пользовательских событий, поступающих от индикаторов с чужих символов. Видно, что тики по EURGBP поступают. Исходя из справочника прихожу к выводу, что при поступлении новых тиков по символу генерируется и событие NewTick.
Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.
NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.
NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Речь-то изначально шла о другом. В первом своём сообщении я указал, что "не нашёл способа отключить при необходимости поток тиков (события NewTick) для символа, к графику которого прикреплён эксперт". Вы отреагировали на эту фразу, но способ отключить при необходимости поток тиков по нужному символу так и не указали. Прихожу к выводу, что не только я, но и Вы не знаете такого способа. Поэтому моё предложение остаётся в силе: ввести функцию-переключатель, позволяющую программно запрещать генерацию события NewTick для символа, к графику которого прикреплён эксперт.
Что касается реплик про "гадание на гуще" и "искусственность механизмов отслеживания очереди", - то я изначально и не предлагал разбираться в коде и искать ответ на вопрос "почему так происходит?". Как можно видеть из моего предложения, ответ для себя я уже нашёл. Но давайте рассмотрим проблему с более абстрактной точки зрения, без отвлечения внимания на код конкретного эксперта.
sergeev:
NewTick - напрямую никак не связан с OnChartEvent.
Хорошо, пусть так. Значит, NewTick связан с OnChartEvent ненапрямую, но связан. Об этом я уже сказал в пояснении, но повторюсь. Вы лучше меня знаете, что существует некая "общая очередь событий", в которую складываются все возникающие события, предопределённые и пользовательские. Обрабатываются эти события поочерёдно, в порядке их поступления. Поскольку очередь имеет некий ограниченный размер, то при её переполнении старые события удаляются без обработки. Правильно?
Тогда получается, что если эксперт не предусматривает обработку событий NewTick, а генерирование этих событий продолжается, то моя общая очередь событий попросту забивается ненужными событиями NewTick и появляется риск необработки устаревающих пользовательских событий, которые как раз и должны обрабатываться экспертом. Надеюсь, с этим выводом Вы тоже согласны. Поэтому-то и возникло вышеизложенное предложение.
Разумеется, я не знаю всех тонкостей работы очереди событий и события NewTick. Поэтому могу ошибаться в некоторых выводах и с интересом рассмотрю любые пояснения.
sergeev:
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Для справки. Эксперт навешивает экземпляры одного и то же индикатора с одними и теми же параметрами и с одним и тем же "механизом связок" на соседние символы, на одном и том же временном промежутке. Связка одна и та же: EventChartCustom - OnChartEvent.
Правильно ли я понял, что Вы согласны с утверждением, что "если в эксперте нет OnTick(), то события NewTick в очередь вообще не выставляются"?
ваша просьба "ввести функцию-переключатель, позволяющую программно запрещать генерацию события NewTick для символа, к графику которого прикреплён эксперт. " ясна.
Да не скажите :) Кто-то привык работать вслепую, а кто-то стремится побольше узнать о явлении, которое предстоит обуздать. Гипотезы же появляются на фоне отсутствия той или иной информации. Благодарю за участие в обсуждении.
В СД написал. Не знал, что туда можно адресовать предложения.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Yedelkin:
Пояснение. Если эксперт не предусматривает обработку тиков по символу, к графику которого он прикреплён, то непрерывная генерация событий NewTick для этого символа ведёт к изишнему переполнению очереди событий, обрабатываемых данным экспертом.
В смысле?
В эксперте нет OnTick(), а события NewTick в очередь становятся?
Как узнали, чем анализировали очередь? )
Не нашёл способа отключить при необходимости поток тиков (события NewTick) для символа, к графику которого прикреплён эксперт.
Чувствуется что отработал с воскресенья по пятницу без отдыха... :))
В смысле?
Как узнали...?
Да узнал двумя способами. Сначала знакомился со связкой EventChartCustom - OnChartEvent на примере простого сбора экспертом сигналов индикаторов с чужих символов. При этом эксперт с тиками своего символа не работал, функция Ontick() в коде эксперта была закомментирована. Когда запустил эксперт в тестере, то обнаружилось, что время прохода различается в зависимости от того, к какому символу прикрепляется эксперт. См., например, пример ниже. При одних и тех же параметрах оптимизации время проходов заметно различается.
В эксперте нет OnTick(), а события NewTick в очередь становятся?
Для проверки ответа на этот вопрос (второй способ) я модифицировал код эксперта таким образом:
т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по символу, к которому прикреплён эксперт, поступают регулярно:Ну а поскольку в справочнике сказано, что "событие NewTick генерируется при поступлении нового тика по символу, к графику которого прикреплен эксперт", факт поступления новых тиков должен приводить к генерированию событий NewTick.
Судя по вопросу, Вы считаете, что при отключении OnTick() события NewTick не генерируются? Но в справочнике я такой информации не нашёл.
Чувствуется что отработал с воскресенья по пятницу без отдыха... :))
т.е. вставил строчку, выделенную жёлтым фоном, с целью выявления факта поступления новых тиков по символу. Из результатов видно, что тики по
символу, к которому прикреплён эксперт, поступают регулярно:
вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?
-------------
если
вставить в простой эксперт и пустить в тестер, то она не активируется.
у вас есть другие функции, которые вызывают OnChartEvent.?
у вас есть другие функции, которые вызывают OnChartEvent.?
Да, конечно. Так как эксперт при помощи связки EventChartCustom - OnChartEvent собирает сигналы индикаторов с чужих символов, то каждый такой индикатор имеет свой экземпляр функции EventChartCustom(). Первым параметром у каждого экземпляра функции EventChartCustom() указан идентификатор графика, к которому прикреплён наш эксперт; вторым параметром - нуль.
если вставить в любой эксперт, то она не активируется.
Приведена только часть кода, - из эксперта, который собирает сигналы индикаторов с чужих символов. Если нет индикаторов, то и эта часть кода (функция OnChartEvent) не будет обрабатывать пользовательские события ввиду их отсутствия.
вы проверяли какое событие приводит к вызову OnChartEvent до того, как вы вызываете пользовательское ?
Нет, немного не так. Я хотел посмотреть, поступают ли тики по символу, к графику которого прикреплён эксперт, в момент обработки функцией OnChartEvent() пользовательских событий, поступающих от индикаторов с чужих символов. Видно, что тики по EURGBP поступают. Исходя из справочника прихожу к выводу, что при поступлении новых тиков по символу генерируется и событие NewTick.
Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.
NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Не возможно понять какие ваши используемые функции привели к разным временным результатам. Без полного кода - это гадание на кофейной гуще.
NewTick - напрямую никак не связан с OnChartEvent. Поэтому предложенный вами механизм отслеживания очереди какой-то искусственный. И не уверен что он правильный.
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Речь-то изначально шла о другом. В первом своём сообщении я указал, что "не нашёл способа отключить при необходимости поток тиков (события NewTick) для символа, к графику которого прикреплён эксперт". Вы отреагировали на эту фразу, но способ отключить при необходимости поток тиков по нужному символу так и не указали. Прихожу к выводу, что не только я, но и Вы не знаете такого способа. Поэтому моё предложение остаётся в силе: ввести функцию-переключатель, позволяющую программно запрещать генерацию события NewTick для символа, к графику которого прикреплён эксперт.
Что касается реплик про "гадание на гуще" и "искусственность механизмов отслеживания очереди", - то я изначально и не предлагал разбираться в коде и искать ответ на вопрос "почему так происходит?". Как можно видеть из моего предложения, ответ для себя я уже нашёл. Но давайте рассмотрим проблему с более абстрактной точки зрения, без отвлечения внимания на код конкретного эксперта.
NewTick - напрямую никак не связан с OnChartEvent.
Хорошо, пусть так. Значит, NewTick связан с OnChartEvent ненапрямую, но связан. Об этом я уже сказал в пояснении, но повторюсь. Вы лучше меня знаете, что существует некая "общая очередь событий", в которую складываются все возникающие события, предопределённые и пользовательские. Обрабатываются эти события поочерёдно, в порядке их поступления. Поскольку очередь имеет некий ограниченный размер, то при её переполнении старые события удаляются без обработки. Правильно?
Тогда получается, что если эксперт не предусматривает обработку событий NewTick, а генерирование этих событий продолжается, то моя общая очередь событий попросту забивается ненужными событиями NewTick и появляется риск необработки устаревающих пользовательских событий, которые как раз и должны обрабатываться экспертом. Надеюсь, с этим выводом Вы тоже согласны. Поэтому-то и возникло вышеизложенное предложение.
Разумеется, я не знаю всех тонкостей работы очереди событий и события NewTick. Поэтому могу ошибаться в некоторых выводах и с интересом рассмотрю любые пояснения.
В таком варианте я бы не стал утверждать, что задержки тестов создаются именно NewTick. И думаю что виноваты именно механизмы ваших связок, а не само событие.
Для справки. Эксперт навешивает экземпляры одного и то же индикатора с одними и теми же параметрами и с одним и тем же "механизом связок" на соседние символы, на одном и том же временном промежутке. Связка одна и та же: EventChartCustom - OnChartEvent.
Правильно ли я понял, что Вы согласны с утверждением, что "если в эксперте нет OnTick(), то события NewTick в очередь вообще не выставляются"?
а зачем гадать и придумывать гипотезы?
ваша просьба "ввести функцию-переключатель, позволяющую программно запрещать генерацию события NewTick для символа, к графику которого прикреплён эксперт. " ясна.
Напишите в сервисдеск.
все остальное - борьба с ветряными мельницами.
а зачем гадать и придумывать гипотезы?
все остальное - борьба с ветряными мельницами.
Да не скажите :) Кто-то привык работать вслепую, а кто-то стремится побольше узнать о явлении, которое предстоит обуздать. Гипотезы же появляются на фоне отсутствия той или иной информации. Благодарю за участие в обсуждении.
В СД написал. Не знал, что туда можно адресовать предложения.