ФОРТС: баг "exchange/instant" в размещении ордеров для фьючерса на РТС

 

Подключился к брокеру "Открытие", начал тестировать советника на склейках "Si Splice", "SBRF Splice" и "RTS Splice". Счет реальный, соответственно котировки тоже.

Для сделок по Si Splice "по рынку" использую функцию Sell/Buy стандартного класса CTrade.

Заявки по "Si Splice" и "SBRF Splice" размещаются  с типом "exchange" и все успешно исполняются, а заявки по "RTS Splice" размещаются  с типом "instant" и 40% из них НЕ  исполняются, тестер выдает ошибку "invalid price".  При этом настройки одинаковые, СЛ/ТП равны нулю (не заданы), стратегия одна и та же и т.д.

RTS

Справка МТ5 по данному вопросу совершенно не информативна – в разделе  "Структура торгового запроса (MqlTradeRequest)" сказано только что "Всего предусмотрено семь вариантов отправки торгового запроса:…", при этом информация КАК ПРОГРАМНО задать тип отправки торгового запроса  отсутствует в принципе.

Вероятно, что данный кейс является  багом МТ5, так как по факту фьючерс на РТС это биржевой инструмент и у него должно быть всегда "Exchange Execution". Либо это некие проблемы в описании инструмента на стороне брокера, хотя в визуально-доступном описании символа никаких похожих полей нет.

Прошу тех, кто опытней меня в вопросах работы с инструментами ФОРТС, прокомментировать возникшие вопросы:

1)      как тестер определяет режим exchange/instant , есть ли вообще возможность строго задать режим "Exchange Execution" для всех инструментов?

2)      сталкивался ли кто-либо с проблемой появления "invalid price" при "Instant Execution", как ее можно решить?

 
Баг у Вас в программе. Шаг изменения РТС - 10 пунктов. Поэтому, установить ордер на цену 140901, 140564 и т.п. никак не возможно.
 

Cоветник вызывает функцию СTrade::Sell без указания цены, так как заявки рыночные).

Баг в стандартной библиотеке МТ5 в классе СTrade - в функциях Sell/Buy, которые предназначены для торговли по рынку, оказалось что в них идет заполнение заявки некими ценами. Это в принципе неверно, т.к. если заявка рыночная, то должна уходить на сервер без указания цены.

Более того, выяснилось, что даже если заранее рассчитать округленную цену и указать ее в заявке размещение, то МТ5 тестер сам ее портит - "корректирует" и заменяет на негодную цену!!!

12:30:54.097      Core 1   2014.01.06 11:00:42   Расчетная цена на покупку: 140900.0000

12:30:54.097      Core 1   2014.01.06 11:00:42   price corrected from 140900 to 140891, deviation: 10 (instant buy 7.00 RTS Splice at 140900)(140881 / 140891 / 140881)

12:30:54.097      Core 1   2014.01.06 11:00:42   CTrade::OrderSend: instant buy 7.00 RTS Splice at 140900 [invalid price]

При этом корректировка идет за пределами класса  СTrade, видимо в самой функции OrderSend. Это вообще двойной баг.

 
Сергей Лебедев:


Баг в стандартной библиотеке МТ5 в классе СTrade - в функциях Sell/Buy, которые предназначены для торговли по рынку, оказалось что в них идет заполнение заявки некими ценами. Это в принципе неверно, т.к. если заявка рыночная, то должна уходить на сервер без указания цены.

Баг у Вас в голове.

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

Если Вас устраивает творческая самодеятельность, то поручите свой депозит ПИФу.

Сергей Лебедев:


Более того, выяснилось, что даже если заранее рассчитать округленную цену и указать ее в заявке размещение, то МТ5 тестер сам ее портит - "корректирует" и заменяет на негодную цену!!!

Научитесь пользоваться документацией, прежде, чем гнать остебятину. Про корректное округление см. https://www.mql5.com/ru/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Как же любят псевдо-эксперты указывать на проблемы в чужой голове, бросив типа один взгляд на тему и не разобравшись в сути проблемы. Уверен на 99% у вас даже нет счета на ФОРТС в Открытии/БКС чтобы проверить то, что мной написано выше. Как видимо и нормального опыта биржевой торговли, чтобы судить, что должно быть в рыночной заявке)

1. Во всех классических  системах биржевой торговли – Transaq/Quik/Alfadirect и пр.,  рыночные заявки никогда не сопровождаются указанием "цены". Заявка выводится на рынок, и уже на рынке распадается на ряд сделок, в каждой сделке – своя цена. И брокеру тут ничего "знать" не нужно – нужно просто вывести заявку на рынок.

Для сомневающихся в справке по MQL5 в том же разделе"Структура торгового запроса" ппро это сказано следующее:

"Exchange Execution: Торговый ордер на открытие позиции в режиме Exchange Execution (биржевой режим исполнения торговых приказов). Требуется указание 5 полей:    action,    symbol,   volume,   type,   type_filling".

Так что никакой "цены" в рыночной заявке указывать не нужно и не должно..

Соответственно с классом СTrade все понятно – тут явный баг, который противоречит основам биржевой торговли, и даже содержанию Справки в частности.

2. При исполнении рыночных заявок по рыночным инструментам, коими являются все фьючерсы ФОРТС ММВБ, никаких "requote", "price corrected" быть не должно, как и режима "instant execution" – это все признаки "форекс-кухни". Но даже если у брокера задан такой режим по инструменту, то при тестировании все равно "requote", "price corrected" не должны моделироваться - если заявка рыночная то она должна исполнится по тем объемам, которые смоделировались на тиках.

Таким образом к концу дня вопросы для обсуждения несколько меняются:

1)       "instant execution" по фьючерсу РТС - это баг MT5 или "тайная" фича, которая позволяет брокерам организовать "форекс-кухню" под видом торговли на ФОРТС?

2)      если появление "requote" и "price corrected" с некруглыми значениями для РТС – баги при тестировании биржевых фьючерсов, то как при тестировании в коде задать "exchange execution" вне зависимости от того какой режим у брокера?

 
Сергей Лебедев:

Как же любят псевдо-эксперты указывать на проблемы в чужой голове, бросив типа один взгляд на тему и не разобравшись в сути проблемы. Уверен на 99% у вас даже нет счета на ФОРТС в Окрытии/БКС чтобы проверить то, что мной написано выше. Как видимо и нормального опыта биржевой торговли, чтобы судить, что должно быть в рыночной заявке)

1. Во всех классических  системах биржевой торговли – Transaq/Quick/Alfadirect и пр., в рыночные заявки никогда не сопровождаются указанием "цены". Заявка выводится на рынок, и уже на рынке распадается на ряд сделок, в каждой сделке – своя цена. И брокеру тут ничего "знать" не нужно – нужно просто вывести заявку на рынок.

Для сомневающихся в справке по MQL5 в том же разделе"Структура торгового запроса" ппро это сказано следующее:

"Exchange Execution: Торговый ордер на открытие позиции в режиме Exchange Execution (биржевой режим исполнения торговых приказов). Требуется указание 5 полей:    action,    symbol,   volume,   type,   type_filling".

Так что никакой "цены" в рыночной заявке указывать не нужно и не должно..

Соответственно с классом СTrade все понятно – тут явный баг, который противоречит основам биржевой торговли, и даже содержанию Справки в частности.

2. При исполнении рыночных заявок по рыночным инструментам, коими являются все фьючерсы ФОРТС ММВБ, никаких "requote", "price corrected" быть не должно, как и режима "instant execution" – это все признаки "форекс-кухни". Но даже если у брокера задан такой режим по инструменту, то при тестировании все равно никаких "requote", "price corrected" не должны моделироваться, если заявка рыночная то она должна исполнится по тем объемам, которые смоделировались на тиках.

Таким образом к концу дня вопросы для обсуждения несколько меняются:

1)       "instant execution" по фьючерсу РТС - это баг MT5 или "тайная" фича, которая позволяет брокерам организовать "форекс-кухню" под видом торговли на ФОРТС?

2)      если появление "requote" и "price corrected" с некруглыми значениями для РТС – баги при тестировании биржевых фьючерсов, то как при тестировании в коде задать "exchange execution" вне зависимости от того какой режим у брокера?

Все правильно. МТ5 не дружит с биржей. И походу это устраивает разработчиков.

Стандартную библиотеку для ФОРТС лучше не использовать. Можно использовать только при полном понимании ее работы.

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

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

Потому что все сделки и их время фиксируется на бирже, и вы всегда можете это все проверить. Возможно отсюда и нежелание разработчиков приближать МТ5 к бирже.

 
Сергей Лебедев:

Cоветник вызывает функцию СTrade::Sell без указания цены, так как заявки рыночные).


А вот здесь, поподробнее, пожалуйста.
 
Sergey Chalyshev:

Все правильно. МТ5 не дружит с биржей. И походу это устраивает разработчиков.

Стандартную библиотеку для ФОРТС лучше не использовать. Можно использовать только при полном понимании ее работы.

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

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

Потому что все сделки и их время фиксируется на бирже, и вы всегда можете это все проверить. Возможно отсюда и нежелание разработчиков приближать МТ5 к бирже.

Правильно выше говорили - это некоторые не дружат с отдельными частями своего тела. А связка МТ5 + стандартная библиотека как отлично работала так и продолжает отлично работать с биржей. 
 
Стандартная библиотека отлично работает на ФОРТС - как с отложенниками, так и с рыночниками.
 
Karputov Vladimir:
Правильно выше говорили - это некоторые не дружат с отдельными частями своего тела. А связка МТ5 + стандартная библиотека как отлично работала так и продолжает отлично работать с биржей. 
Dmitriy Skub:
Стандартная библиотека отлично работает на ФОРТС - как с отложенниками, так и с рыночниками.

О наехали.

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

Стандартную библиотеку для ФОРТС лучше не использовать. Можно использовать только при полном понимании ее работы. 

Дмитрий, расскажите лучше (желательно с примером) как установить лимитный ордер, с экспирацией в последний день обращения фьючерса, с помощью стандартной библиотеки.

Барабашку не спрашиваю, он в этом вообще не понимает. 

 

Наезды для форма это в целом нормально.  Тем более что у разных участников разный жизненный опыт и разная способность становиться на место оппонента.  Так у меня более 10 лет торговли на бирже и для меня полный нонсенс, что в рыночной заявке нужно передавать какую-то цену с клиентского места на сервер. А видимо для участников с 10м опытом торговли в  форекс-конторах этот момент удивления совсем не вызывает) ). 

Что касается СTrade – вероятно в большинстве ситуаций библиотека  на ФОРТС сработает нормально, несмотря на указанные выше странности с заполнением цен у рыночных заявок.

Но у меня при тестировании появляется конкретная проблема - выпадают заявки с [invalid price], которые пропадают, т.е. последующая проверка позиции показывает,  что они не выполнились.

Более того выяснилось, такие заявки даже не попадают в список заявок, который по итогам тестирования можно получить с использованием HistoryOrdersTotal. Соответственно без написания специальных функции предварительной регистрации всех вызовов СTrade::Sell/Buy невозможно оценить сколько заявок пропало, и уж тем более понять как их выполнение на бирже повлияло бы на итоговую доходность.

Такого явно быть не должно , т.к. в реальных условиях все рыночные заявки, попавшие на сервер  должны передаться для выполнения на бирже и там выполниться (случаи возникновения реальных технических сбоев терминала/брокера/биржи я тут не рассматриваю, т.к. речь идет о тестировании).

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