Пробую такие транзакции на срочном рынке в MODE=1.
1) в OnTransReply перестал работать бит, определяющие куплю или продажу - (tr.flags>>17&1). В ответе на NEW_ORDER это работает. Просьба доработать. Уверен, при перестановке цены на данном этапе уже известно, купля это или продажа. Если нет, просьба не оставлять его незаполненным, а копировать из перемещаемого ордера. Считая по умолчанию, что ордер не меняет свою "ориентацию". По умолчанию это лучше, чем пустое поле.
2) Если SECOND_ORDER_NUMBER = nil , то, по хорошему, сервер должен игнорировать SECOND_ORDER_NEW_PRICE и SECOND_ORDER_NEW_QUANTITY, даже если они заполнены. Но есть подозрение, что они могут переопределять соответствующие FIRST в этом случае.. Прошу разъяснить.
3) Если заполнены все поля FIRST и SECOND, то должно прийти 2 OnTransReply? Это вообще просто способ сократить кол-во sendTransaction, а так эти поля совершенно независимы и аналогичны 2м sendTransaction (для MODE=1)?
А собственно ордер и не меняет ориентацию. Если цена перешагивает барьер, он просто исполняется по рынку. Так что направление в onTransReply однозначно определено.
1) Можете привести пример описанного поведения? Желательно с фрагментом кода
2) SECOND_ORDER_NUMBER = nil, но для второй заявки указана цена/количество, то sendTransaction вернет соответствующую ошибку
3) Нет, только один. Это одна транзакция, в которой переставляются две заявки.
1) Код здесь будет лишним. Просто делаю { ACTION = "MOVE_ORDERS", MODE = '1',.. }., Ордер переставляется. А в колбеке flag имеет не праильный признак направления (покупка\продажа). За это отвечет вот такой бит (tr.flags>>17&1) у вас.Он не корректен для MOVE_ORDERS.
3) Очень странные вещи вы говорите. А как же тогда интерпретировать все поля OnTransReply(TABLE trans_reply) ? Они расчитаны на передачу данных по одному ордеру данной транзакции. Например order_num.
1) Прошу прощения, в прошлый раз немного поторопился с ответом. На данной транзакции (MOVE_ORDERS) в принципе нет признака направления. Соответственно, во флагах Вы его и не увидите.
3)
Цитата
Андрей написал: И судя по описанию происходит именно 2 транзакции на бирже
Не совсем понимаем, о каком описании идет речь? Это одна транзакция вида MOVE_ORDERS, соответственно, ответ по ней так же будет один. В данном случае рекомендуем получать номер и прочие поля, относящиеся к заявке из OnOrder().
1) Прошу прощения, в прошлый раз немного поторопился с ответом. На данной транзакции (MOVE_ORDERS) в принципе нет признака направления. Соответственно, во флагах Вы его и не увидите.
3)
Цитата
Андрей написал: И судя по описанию происходит именно 2 транзакции на бирже
Не совсем понимаем, о каком описании идет речь? Это одна транзакция вида MOVE_ORDERS, соответственно, ответ по ней так же будет один. В данном случае рекомендуем получать номер и прочие поля, относящиеся к заявке из OnOrder().
Послушайте, мы тут делаем предложения по улучшению, а вы даете ответы в стиле "этого нет и такого функционала не предусмотрено". Я вам говорю, что он нужен и легко реализуем. 1) Признак направления заявки есть в самой заявке и он не меняется. Ничто не мешает для унификации его проставлять во flags так же, как для других транзакций. Чтобы в реплае понимать, реплай это на покупку или на продажу. Польза этого сомнений не вызывает, стоимость реализации низкая. 3) В описании про заявки, да. Перестановка заявок на рынке FORTS выполняется по следующим правилам:
Если MODE=0, то заявки с номерами, указанными после ключей FIRST_ORDER_NUMBER и SECOND_ORDER_NUMBER, снимаются. В торговую систему отправляются две новые заявки, при этом изменяется только цена заявок, количество остается прежним;
Если MODE=1, то заявки с номерами, указанными после ключей FIRST_ORDER_NUMBER и SECOND_ORDER_NUMBER, снимаются. В торговую систему отправляются две новые заявки, при этом изменится как цена заявки, так и количество;
Если MODE=2, то заявки с номерами, указанными после ключей FIRST_ORDER_NUMBER и SECOND_ORDER_NUMBER, снимаются. Если количество инструментов в каждой из снятых заявок совпадает со значениями, указанными после FIRST_ORDER_NEW_QUANTITY и SECOND_ORDER_NEW_QUANTITY, то в торговую систему отправляются две новые заявки с соответствующими параметрами.
Что же тогда считается успешной одной транзакцией, если успех принятия заявок может быть различным? И, как сказал, информативности в реплае максимум наполовину. OnOrder ему не замена, он может и не прийти. В такой ситуации механизм sendTransaction(MOVE_ORDERS) + onTransReply явно недоработан. Продумайте как полноценно доносить информацию в реплае. Мое предложение - отправлять 2 реплая, с еще одним битом во флаге с указанием на какую заявку из двух каждый. Обоснуйте, почему это не будет улучшением.
Андрей написал: 1) Признак направления заявки есть в самой заявке и он не меняется. Ничто не мешает для унификации его проставлять во flags так же, как для других транзакций. Чтобы в реплае понимать, реплай это на покупку или на продажу. Польза этого сомнений не вызывает, стоимость реализации низкая.
Речь идет про транзакцию, а не про заявку. Повторимся, на биржевойтранзакцииMOVE_ORDERS нет поля "Направление". Направление не уходит в транзакции и не возвращается биржей.
Цитата
Андрей написал: В торговую систему отправляются две новые заявки
Транзакции и заявки это две совершенно разные вещи. В данном случае, транзакция одна, а заявки две, все верно.
Цитата
Андрей написал: Что же тогда считается успешной одной транзакцией, если успех принятия заявок может быть различным?
Если указан номер одной заявки и эта заявка была успешно заменена, либо, если указаны номера двух заявок и обе заявки были успешно заменены. В иных случаях будет ошибка.
Цитата
Андрей написал: Мое предложение - отправлять 2 реплая, с еще одним битом во флаге с указанием на какую заявку из двух каждый. Обоснуйте, почему это не будет улучшением.
Можем предложить зарегистрировать пожелание на возможность получения в OnTransReply номеров обеих заявок. Такой возможности на данный момент действительно нет.
Если указан номер одной заявки и эта заявка была успешно заменена, либо, если указаны номера двух заявок и обе заявки были успешно заменены. В иных случаях будет ошибка.
Цитата
Андрей написал: Мое предложение - отправлять 2 реплая, с еще одним битом во флаге с указанием на какую заявку из двух каждый. Обоснуйте, почему это не будет улучшением.
Реплай отправляется биржей по достаточно понятной логике - 1 транзакция = 1 реплай. Можем предложить зарегистрировать пожелание на возможность получения в OnTransReply номеров обеих заявок. Такой возможности на данный момент действительно нет.
1) Нужно по реплаю однозначно понимать статус по обеим заявкам (по отдельности). 2) Добавьте тогда как минимум эти поля по второй заявке (если она есть): sec_code, price, quantity, order_num. 3) Желательно добавить сюда и направление заявок. Даже если этого нет в биржевом интерфейсе, там нет и многих других полей, которые есть в реплае. Вы обогощаете ими. Так включите сюда же и направление 0\1. Например битом, по аналогии как оно заполняется для обычных транзакций (см выше). Но теперь это нужно тоже по обеим заявкам в одном реплае. Поэтому может и отдельным полем сделать. И дублировать его как все вышеуказанные в п.2 для второй заявки, если она есть.
1) Обе заявки успешно изменены, либо не изменена ни одна, либо ошибка. Это уже можно понять по реплаю.
2) sec_code не может отличаться у двух данных заявок. Регистрируем пожелание на возможность получения price, quantity и order_num второй заявки?
3) Мы не добавляем в транзакцию поля, которые отсутствуют в биржевом интерфейсе. Так как для данной транзакции в принципе отсутствует направление, добавить его в реплай возможности нет. Сама задача в принципе не ясна. Данной транзакцией нельзя изменить направление заявки. Зачем необходимо его получать в onTransReply?
На данный момент, рекомендуем получать номер второй заявки из поля result_msg. Всю прочую информацию же можно получить из таблицы заявок по данному номеру.
1) Обе заявки успешно изменены, либо не изменена ни одна, либо ошибка. Это уже можно понять по реплаю.
2) sec_code не может отличаться у двух данных заявок. Регистрируем пожелание на возможность получения price, quantity и order_num второй заявки?
3) Мы не добавляем в транзакцию поля, которые отсутствуют в биржевом интерфейсе. Так как для данной транзакции в принципе отсутствует направление, добавить его в реплай возможности нет. Сама задача в принципе не ясна. Данной транзакцией нельзя изменить направление заявки. Зачем необходимо его получать в onTransReply?
На данный момент, рекомендуем получать номер второй заявки из поля result_msg. Всю прочую информацию же можно получить из таблицы заявок по данному номеру.
Это новость про либо обе, либо ни одна. Об этом хорошо бы написать в документации. Насчет направления и "из таблицы заявок по данному номеру": На момент onTransReply нет еще onOrder и записи в заявках. Но в onTransReply есть почти вся смысловая информация о новой заявке. Не хватает только направления и именно для MOVE_ORDERS. И тогда не нужно вести свою базу заявок, ожидающих подтверждения. Ради этого одного поля.
Еще вопрос. Чем обусловлено наличие MODE=0 и MODE=1? Неужели неизменность количества позволяет как-то по особому, заметно эффективнее и т.п. релизовать? Настолько, что даже выделили отдельный режим, а не в рамках частного случая с заданием кол-в MODE=1.
Андрей написал: Это новость про либо обе, либо ни одна. Об этом хорошо бы написать в документации.
Это уже указано в документации к биржевому протоколу. Так как результат возвращает биржа и, соответственно, он в любой момент может поменяться, мы не считаем правильным фиксировать его в нашей документации.
Цитата
Андрей написал: На момент onTransReply нет еще onOrder и записи в заявках
Если в OnTransReply вернулся номер заявки(ок), это значит, что новая заявка была зарегистрирована, что приведет к срабатыванию OnOrder и появлению соответствующей записи в таблице заявок. Зарегистрировали пожелание на добавление полей price, quantity и order_num для второй заявки. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО. Касательно направления на данной транзакции, с данным пожеланием рекомендуем обратиться на биржу.
Цитата
Андрей написал: Еще вопрос. Чем обусловлено наличие MODE=0 и MODE=1? Неужели неизменность количества позволяет как-то по особому, заметно эффективнее и т.п. релизовать? Настолько, что даже выделили отдельный режим, а не в рамках частного случая с заданием кол-в MODE=1.
Данный вопрос также следует адресовать специалистам биржи.
Roman Azarov написал: Обе заявки успешно изменены, либо не изменена ни одна, либо ошибка. Это уже можно понять по реплаю.
Не совсем так:
Цитата
Если при сдвиге пары заявок одна из них наткнулась на кросс-сделку (сведение с заявкой от того же ИНН, либо клиентского регистра), она откатывается, а другая заявка сдвигается.
Андрей написал: На момент onTransReply нет еще onOrder и записи в заявках
Если в OnTransReply вернулся номер заявки(ок), это значит, что новая заявка была зарегистрирована, что приведет к срабатыванию OnOrder и появлению соответствующей записи в таблице заявок.
OnOrder сработает потом когда-нибудь, а информация по новой заявке нужна уже сейчас в OnTransReply.
Цитата
Roman Azarov написал: Зарегистрировали пожелание на добавление полей price, quantity и order_num для второй заявки.
Незнайка написал: Не совсем так: Цитата - Если при сдвиге пары заявок одна из них наткнулась на кросс-сделку (сведение с заявкой от того же ИНН, либо клиентского регистра), она откатывается, а другая заявка сдвигается.
Да, действительно. Большое спасибо, что поправили.
Здравствуйте, В MOVE_ORDERS появился mode=3? По крайней мере квик этот режим принимает и не выкидывает ошибку. Он как в плазе работает? Описание от туда: Установить объемы заявок равными присланным за вычетом сведенной части заявки (не меньше 0). Если присланный объем меньше сведенной части заявки, удаляются обе заявки.
Дополните документацию квика тогда, а то там нет такого режима.
Андрей написал: Это новость про либо обе, либо ни одна. Об этом хорошо бы написать в документации.
Это уже указано в документации к биржевому протоколу. Так как результат возвращает биржа и, соответственно, он в любой момент может поменяться, мы не считаем правильным фиксировать его в нашей документации.
Цитата
Андрей написал: На момент onTransReply нет еще onOrder и записи в заявках
Если в OnTransReply вернулся номер заявки(ок), это значит, что новая заявка была зарегистрирована, что приведет к срабатыванию OnOrder и появлению соответствующей записи в таблице заявок. Зарегистрировали пожелание на добавление полей price, quantity и order_num для второй заявки. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО. Касательно направления на данной транзакции, с данным пожеланием рекомендуем обратиться на биржу.
Цитата
Андрей написал: Еще вопрос. Чем обусловлено наличие MODE=0 и MODE=1? Неужели неизменность количества позволяет как-то по особому, заметно эффективнее и т.п. релизовать? Настолько, что даже выделили отдельный режим, а не в рамках частного случая с заданием кол-в MODE=1.
Данный вопрос также следует адресовать специалистам биржи.
Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Незнайка написал: Не совсем так: Цитата - Если при сдвиге пары заявок одна из них наткнулась на кросс-сделку (сведение с заявкой от того же ИНН, либо клиентского регистра), она откатывается, а другая заявка сдвигается.
Да, действительно. Большое спасибо, что поправили.
Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Столкнулся с неожиданным поведением MOVE_ORDERS и OnTransReply. Пришел reply с номером заявки '0'. Скрипт передвигал заявки, всё шло штатно, как вдруг, откуда ни возьмись, появился
Цитата
Перестановка заявок завершена успешно. New Order1 ID: 0, new Order2 ID: 1892958324056452578.
Скрипт, получив от OnTransReply status 3, запоминает номера заявок и пытается их передвинуть, что у него, естественно, не получается. Это повторяется дважды в течение трёх минут. Отсюда два вопроса: 1). Это как пониматьвашу, господа разработчики? 2). Такое поведение вашего продукта возможно только на учебном quik, или на боевом также может произойти такой пердюмонокль?
Это был единственный случай, или подобное поведение воспроизводится регулярно? Просим уточнить используемую версию Рабочего места QUIK, а также дату, когда наблюдалась данная ситуация.
Anton Belonogov, произошло это однажды, два раза за 3 минуты, но удивило то, что передвинулась только одна заявка, вопреки утверждениям в руководстве и на этом форуме: https://forum.quik.ru/messages/forum10/message56834/topic6588/#message56834 Поэтому и возник вопрос № 2: на "боевом" такое возможно? Нужен "костыль" в коде, или там не бывает подобных нежданчиков? Версия QUIK 10.1.2.2. Только зачем она Вам, или сервер по-разному обрабатывает заявки терминалов разных версий? Случилось это 14 числа.
Уточним, что такой ответ возвращает именно торговая система Срочного рынка МБ.
Для подробного изучения ситуации требуется информация со стороны серверной части QUIK - к сожалению, такая информация за 14.10 уже недоступна. На нашей конфигурации не удалось воспроизвести такую ситуацию.
Если проблема повторится, просим сообщить время воспроизведения и номера исходных заявок. Для более оперативной реакции предлагаем написать на нашу почту quiksupport@arqatech.com.