Функция OrderSendAsync() - страница 8

 
TheXpert:
Потому что битые пакеты, обрывы связи и т.п. хрень. Ненадежно. Ненадежно -- надо отвязываться.

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

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

 
TheXpert:
Потому что битые пакеты, обрывы связи и т.п. хрень. Ненадежно. Ненадежно -- надо отвязываться.

Давай мухи отдельно, котлеты отдельно.

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

Но парсить историю на каждом Trade слишком дорогое удовольствие. Приход Trade ведь штатная ситуация и должна обрабатываться малозатратно.

 
Urain:
Делай как знаешь, я никого никуда не агитирую.
 
TheXpert:
Здрасьте. Вкурсе вообще что такое асинхронность?

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

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

Кроме того, непонятно, как оценивать из советника: был ли торговый приказ потерян при передаче данных, либо он столь долго ожидает своей очереди на сервере? А значит, будут ошибки с дублированием торговых приказов, что приведет к нарушению ММ и, как следствие, увеличению рисков. По-моему, мнению, любому профессиональному трейдеру (советнику) необходимо убедиться, что его торговый приказ принят к исполнению сервером. Более того, чтобы в последующем однозначно идентифицировать состояние конкретно данного торгового приказа (в функции OnTrade()), необходимо некое уникальное значение, полученное от сервера, чтобы по нему строилась дальнейшая обработка (до момента совершения сделки (открытия/закрытия позиции)).

По аналогии с сетевой моделью OSI. Не надо лезть в канальный или физический уровень исполнения торгового приказа. Пусть эту транспортную функцию выполняет клиент (MT5). Работайте на прикладном уровне.

 
voix_kas:

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

За счет отсутствия ожидания результатов запроса. В целом да. Т.е. для отложек и маркет исполнении может быть очень полезно.

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

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

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

Тогда вам асинхронный вариант не подходит. Все решаемо.

 

TheXpert

Давайте еще раз, на пальцах. Грубо структурируем задержки:

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

2. Время передачи пакета данных, содержащего торговый приказ, от клиента до сервера.

3. Время получения торгового приказа сервером и постановка в пул обработки и отправки на клиент уникального идентификатора данного тикета.

4. Время предварительной обработки корректности торгового приказа и размещение на торговой площадке.

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

Для дальнейшей дискуссии необходимо ответить на два вопроса:

1. Пропорциональное отношение задержек. Т.е. в среднем, сколько времени в процентах занимает каждый из четырех вышеуказанных пунктов. Если распределение будет, к примеру, "0,5%-1,0%-1,0%-97,5%", то овчинка выделки не стоит.

2. Тайм-аут и его влияние на торговую стратегию. Честно говоря, не могу назвать ни одной ТС, которая бы не требовала четкого понимания: приказ был отправлен на серверн или нет. Это актуально и для долгосрочников, и для мультивалютного арбитража. Т.е. гарантия исполнения торгового приказа не может быть поставлена под сомнение. Приведите, пожалуйста, контрпример, если Вы не согласны.

 
papaklass:
По моему, самый простой способ решить проблему исполнения при разрыве - не создавать очередь исполнения (аннулировать исполнение) и при реконнекте сообщить пользователю об аннулировании. В этом случае будет меньше двойственных ситуаций.

Нужно возвращать тикет сервера. Это и будет гарантией того, что приказ дошел до сервера и принят им к обработке.

Громоздя хитрые пулы ожидания на стороне клиента - не то что неизящное решение, я бы назвал это грубой ошибкой проектирования клиент-серверной архитектуры MT5. 

 
voix_kas:

Громоздя хитрые пулы ожидания на стороне клиента - не то что неизящное решение.

Это то, что просили. Никто не заставляет пользоваться, если не нужно.

voix_kas:

TheXpert

Давайте еще раз, на пальцах. Грубо структурируем задержки:

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

2. Время передачи пакета данных, содержащего торговый приказ, от клиента до сервера.

3. Время получения торгового приказа сервером и постановка в пул обработки и отправки на клиент уникального идентификатора данного тикета.

4. Время предварительной обработки корректности торгового приказа и размещение на торговой площадке.

3 лучше разделить

3.1 постановка

3.2 отправка уида

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

Да.

Я же выступаю за обязательное наличие первых трех.

А если пинг полсекунды? Пипец асинхронность. Смысл тогда вообще этот режим использовать?

 
TheXpert:
Это то, что просили. Никто не заставляет пользоваться, если не нужно.

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

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

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

Не вопрос -- портфельный трейдинг + маркет исполнение.