Ошибки, баги, вопросы - страница 3203

 
Andrey Khatimlianskii #:

Как и предполагалось, сделки не было. Ордер отправлен, его тикет есть. Но по какой цене он реально исполнится, еще не известно.

Хочешь трушный синхронный ордерсенд — запили его сам с помощью предложенного бесконечного цикла.

Тогда почему код ответа 10009 а не

10008

TRADE_RETCODE_PLACED

Ордер размещен

 

В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync() :

|       зона ответственности Биржи        ||                       зона ответственности Брокера                                ||        интернет       ||      клиент     

[биржа (MOEX)] <==> [шлюз Plaza2]   <===>  [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа]  <================>      [Терминал]  - >  true OrderSendSync()    

[биржа (MOEX)] <==> [шлюз Plaza2]   <===>  [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа]  <================>      [Терминал]  - >  true OrderSend()

[биржа ( MOEX)] <==> [шлюз Plaza2]  <===>  [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа]  <================>      [Терминал]  - >  true OrderSendAsync()

Надо?

 
Andrey Miguzov #:

В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync()

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)

fxsaber, 2021.06.03 06:10

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

Очень сильная проверка владения торговой частью MQL5.

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

 
Andrey Miguzov #:

В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync() :

Надо?

наверное, да, как компромисс, что бы не ломать имеющееся, было бы целесообразно ввести полностью синхронную функцию. либо новую, либо качественно обёрнутую разработчиками OrderSend ().

надо.

 

Всё это происходит от того, что существуют 2 базы данных. Один на сервере брокера, другой у вас.

И между ними стоят МТ5. Если обмен данными происходит через интернет, или сервера работают медленно, то всякое может произойти.

У меня раньше из-за OrderSend были и двойные сделки, и обратные сделки.

И поэтому сейчас уже как 4 года использую Стандартную библиотеку CTrade.

Например:  CTrade trade;

trade.Sell(),  trade.Buy(), trade.PositionModify() и  trade.PositionClose()

Они не требуют задать или проверить тип исполнения, политика заполнения и не надо заполнить какие-то структуры;

Это очень просто и работают прекрасно :)

 
fxsaber #:

Есть даже стресс-тест, который трушный синхронный OrderSend не пройдет.

Потому что в MT5 асинхронность повсюду:

  1. Был выставлен BuyLimit1.
  2. Когда цена до него дошла, он был отправлен на исполнение.
  3. В определенный момент в Терминале не стало открытого BuyLimit1, но и Buy1 не появился.
  4. В этой ситуации (отсутствие отложенного ордера и позиции) ТС выставляет новый BuyLimit2, т.к. того требует торговая логика.
  5. Появляется Buy1-позиция.
  6. Выставленный BuyLimit2 отправляется брокером на исполнение и порождает Buy2.
  7. Как итог, был изначально только BuyLimit1, а стало две позиции: Buy1 и Buy2.

По пункту 3:

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

По нему можно понять, что сработал BuyLimit1: нету BuyLimit1, нету Buy1, но есть BuyMarket1, который и породит сделку.

Если ошибаюсь - поправьте.

 
Artyom Trishkin #:

По пункту 3:

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

По нему можно понять, что сработал BuyLimit1: нету BuyLimit1, нету Buy1, но есть BuyMarket1, который и породит сделку.

Если ошибаюсь - поправьте.

Не знаю как на FX (может зависить от брокера)-  а на бирже никакого  маркет-ордера здесь быть НЕ МОЖЕТ!!!
 

Уже говорил, и ещё раз скажу.

Возможно возникновение ситуаций

когда ордера уже нет в выставленных (отправлен в историю) и ещё нет в истории

при открытии позиции: когда ордера уже нет в выставленных, а позиции ещё нет

при закрытии позиции: когда ордера уже нет в выставленных, а позиция ещё есть

Использование CTrade тут не помогает (не помогало, когда пытался использовать, году в 2014) от задвоения позиций и подобных эффектов.

А при использовании асинхронной отправки - и когда ордер отправлен, но его ещё нет, и возможно, не будет.
 
mktr8591 #:
Не знаю как на FX (может зависить от брокера)-  а на бирже никакого  маркет-ордера здесь быть НЕ МОЖЕТ!!!

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

 
Artyom Trishkin #:

Любой отложенный ордер при его срабатывании становится маркет-ордером. И уже маркет-ордер порождает сделку при его исполнении.

Тип ордера никогда не меняется. Поэтому утверждение неверно.

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