Изучаем и пишем вместе на MQL5 - страница 26

 

Из Справочника:

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

...Очередь событий имеет ограниченный размер.  

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

Ну так мне кто-нибудь поможет или нет? На 25 странице 2 советника...

Ругать - ругали. Теперь помогите разобраться. То обвиняли, что не достаточно данных даю для анализа проблемы. Куда уж больше. Что хотите, то и проверяйте.

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

Кстати, кто-то еще помнит, как тема ветки называется....?  

 
Yedelkin:

Из Справочника:

Несколько раз уже заходил разговор про очередь событий, а вот про её точный размер - не нашёл. Какая глубина у очереди событий?  64? 256? ... событий?
Прям с языка снял, тоже хотел спросить что будет если очередь событий начнёт накапливаться и захлебнётся? новые события будут игнорироваться или те что уже есть в очереди сбросятся? ну и конечно когда это произойдёт (на каком по очереди событии)?
 
Urain:
Прям с языка снял, тоже хотел спросить что будет если очередь событий начнёт накапливаться и захлебнётся? новые события будут игнорироваться или те что уже есть в очереди сбросятся? ну и конечно когда это произойдёт (на каком по очереди событии)?

уже отвечали

https://www.mql5.com/ru/forum/1621/43941#comment_43941

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

Думаю что пояснения всё же нужны, там есть ответ но он размазаный, на мои вопросы нет и намёка.

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

Так что лучше всё же уточнить этот момент.

 
Khomtchenko:

Ну так мне кто-нибудь поможет или нет? На 25 странице 2 советника...

Ругать - ругали. Теперь помогите разобраться. То обвиняли, что не достаточно данных даю для анализа проблемы. Куда уж больше. Что хотите, то и проверяйте.

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

Кстати, кто-то еще помнит, как тема ветки называется....?  

У вас в mql4 стоит проскальзывание 50, а в mql5 10. Попробуйте поставить одинаковое проскальзывание возможно ситуация выровняется тк много приказов с таким слипажем может просто попадать на реквот.

ЗЫ А лучше в обоих вариантах поставьте проскальзывание на размер спреда.

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

Я повторю вопрос:

Как правильно удалить все ордера с определенным мэджиком?

...

Необходимо перебирать список ордеров сверху вниз, например так:

Я попробовал сделать, как вы сказали, но проблема осталась - отложенный ордер сначала удаляется, потом отправляется еще один запрос на удаление того же ордера. Вот пример строк из журнала:

2011.05.12 16:42:57 Trades '726238' : cancel order #4388299 buy stop 0.02 EURUSD at 1.41700 done                       - ордер удалился успешно
2011.05.12 16:42:57 Trades '726238' : cancel order #4388299 buy stop 0.02 EURUSD at 1.41700                               - отправляется еще один запрос
2011.05.12 16:42:58 Trades '726238' : failed cancel order #4388299 buy 0.00 at 0.00000 [Invalid request]                  - уже почему то buy, а был buy stop

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

 Спасибо за ответы, и ваше желание помочь.

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

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

  То, что сервер переквалифицировал ордер buy stop в просто buy, по-видимому, ошибка сервера, он не различает эти ордера в случае ошибки запроса. Это на заметку разработчикам.

  Как можно избежать повторных запросов ? Я думаю, есть только два пути:

     1. После успешного удаления, анализировать последнюю историю, ожидая появления в ней удалённого ордера, потом продолжить.

     2. Просто ввести задержку, скажем, секунды две, после выполнения удаления. Одной может не хватить.

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

 

У вас в mql4 стоит проскальзывание 50, а в mql5 10. Попробуйте поставить одинаковое проскальзывание возможно ситуация выровняется тк много приказов с таким слипажем может просто попадать на реквот.

ЗЫ А лучше в обоих вариантах поставьте проскальзывание на размер спреда

Я попробую, но вряд ли ситуация улучшится в разы. 

 

А в программировании проблемы у меня есть или все прекрасно? 

 
Urain:

Думаю что пояснения всё же нужны, там есть ответ но он размазаный, на мои вопросы нет и намёка.

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

Так что лучше всё же уточнить этот момент.

1) "складывает в общую очередь" - ошибка в документации. Очередей на самом деле много. На данный момент у каждой mql5 программы и каждого чарта очереди свои. Размеры очередей разные и в целом не маленькие, переполнение очереди для корректно написанной программы маловероятно. Точный размер каждой очереди, их количество, и прочее подробное описание внутренней реализации мы документировать не будем. Причина тут вполне очевидная - внутренняя реализация может меняться.

2) Пропускаться будут любые новые события, для которых не хватило места в данной конкретной очереди.

Напоминаю, что события новый тик и изменение чарта могут существовать в очереди входящих событий mql5 программы только в единственном экземпляре. Генерацию событий создания и удаления графических объектов на чарте можно включать/отключать.

 

Подскажите, что значат внизу эти зеленые полосы. В МТ4 они значили объем лота и их рисовали, когда лот менялся. А тут зачем? Или у меня лот меняется? Вроде я его не меняю. 

 

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