Что приходит в OnTransReply ?

Страницы: 1
RSS
Что приходит в OnTransReply ?
 
Допустим есть у меня Lua-скрипт. В нём отправляется заявка, далее ждём результат в OnTransReply.
Вопрос: в OnTransReply в моём скрипте гарантированно придёт только информация о моей последней отправленной заявке в этом же скрипте ? Либо что-то ещё ? Когда я буду ждать ответа в OnTransReply, может ли туда прилететь что-то ещё ? Например от других, параллельно работающих Lua-скриптов, которые также отправляют заявки ? Либо от trc-файлов, библиотеки trans2quik.dll или ручного ввода заявки ?
 
Здравствуйте,

в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись.
И это правильное поведение.

Если нужно фильтровать ответы на транзакции только LUA скрипта, отправляйте транзакции с каким-нибудь особенным TRANS_ID
и в OnTransReply уже фильтруйте ответы по параметру trans_id
 
Цитата
Sergey Gorokhov пишет:
в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись.
Ерунда! OnTransReply не приходят на транзакции, поданные вручную.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель пишет:
Цитата
Sergey Gorokhov пишет:
в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись.
Ерунда! OnTransReply не приходят на транзакции, поданные вручную.
Да, действительно следует уточнить .
Туда едут ответы на все транзакции имеющие trans_id, не важно от куда они до этого отправлялись.
Транзакции поданные через интерфейс не имеют  trans_id и соответственно в колбэк не попадут
 
Предположим, у нас работает параллельно два скрипта, отправляющих транзакции, и ответ на транзакцию, отправленную 1-м скриптом, будет получен функцией OnTransReply 2-го скрипта.
Получит ли в таком случае ответ на эту же транзакцию и 1-й скрипт в своей функции OnTransReply?
 
Цитата
Дмитрий пишет:
Предположим, у нас работает параллельно два скрипта, отправляющих транзакции, и ответ на транзакцию, отправленную 1-м скриптом, будет получен функцией OnTransReply 2-го скрипта.
Получит ли в таком случае ответ на эту же транзакцию и 1-й скрипт в своей функции OnTransReply?
в общем случае да, так как всем скриптам приходят одинаковые ответы на колбэки.
 
Подскажите, где можно посмотреть информацию по:
status NUMBER Статус

(расшифровку статусов)
 
ifuse(`transaction',`status',`
function transaction.status(reply)
return ({ [0] = "Транзакция отправлена серверу",
[1] = "Транзакция получена на сервер QUIK от клиента",
[2] = "Отсутствует подключение шлюза ММВБ",
[3] = "Транзакция выполнена",
[4] = "Транзакция не исполнена",
[5] = "Транзакция не прошла проверку сервера QUIK",
[6] = "Транзакция не прошла проверку лимитов сервера QUIK",
[10] = "Транзакция не поддерживается торговой системой",
[11] = "Транзакция не прошла проверку электронной подписи",
[12] = "Нет ответа на транзакцию",
[13] = "Кросс-сделка"
})[reply.status]
end
')

С одним маленьким но.

Код 12 придется эмулировать самому.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
наверное я не договорил, Статус из OnTransReply
А эти, по крайней мере, те, что попадались, не совпадают.
поэтому пож-та дайте правильные.
 
Цитата
Юрий пишет:
А эти, по крайней мере, те, что попадались, не совпадают.
Сможете привести пример? Будет интересно
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Сегодня биржа не работает и не могу точно указать № статуса, но фраза (я по ней фильтрую, т.к. не знаю расшифровки всех номеров) "Не найдена активная заявка для перестановки" (скорее всего №4)
 
а при перестановке заявки статус№3 - Заявка успешно переставлена (фраза не точная) с указанием номера заявки.
Может статус зависит от вида транзакции. Вот приходится гадать, а нужна верная информация.
Если все-таки зависит от вида транзакции, то меня интересуют: маркет ордера, лимитные, перестановка и снятие заявок.
Разработчики пожалуйста выдайте. Ждемс.
 
Разработчики пожалуйста выдайте информацию.
 
Цитата
Юрий пишет:
Разработчики пожалуйста выдайте информацию.
Добрый день.

Готового списка у нас нет, но мы можем зарегистрировать пожелание на дополнение документации в данном месте. Регистрируем?
 
да  конечно регистрируйте
 
Цитата
Юрий пишет:
да конечно регистрируйте
Здравствуйте!

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Юрий пишет:
да конечно регистрируйте
Добрый день,

Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
 
Укажите, пожалуйста, возможные значения параметра status в OnTransReply для транзакций, поданных посредством QLua-скриптов.

Пример:
status = 0 - транзакция отправлена серверу - не имеет смысла, поскольку приход колбэка OnTransReply уже говорит о том, что транзакция получена сервером QUIK (status = 1)
Надо делать так, как надо. А как не надо - делать не надо.
 
Добрый день.

Подниму старую тему.

Есть тестовый сервере (подключал тестовый период через заявку на доступ к учебному серверу QUIK компании ARQA Technologies сроком на один месяц). Т.е. это не брокер, как я понимаю.

Проблема в том, что на фондовой секции, заявки типа BUY по рынку (price = 0) не вызывают OnTransReply. Те же заявки на SELLнормально возвращают колбек.

Еще проблема в очень долгом появлении отправленных заявок в таблице заявок и сделок.
Отлаживать алгоритм становится невозможным.

На срочной секции таких проблем не наблюдается.
 
Nikolay,

Проверьте в таблице транзакций терминала QUIK нет ли ошибки при отправке транзакций.
Дело в том что рыночные заявки на покупку могут быть запрещены.
Если так то в таблице транзакций Вы увидите сообщение об этом.
Сообщите Ваш UID чтобы мы могли проверить права.
 
Цитата
Sergey Gorokhov написал:
Nikolay  ,

Проверьте в таблице транзакций терминала QUIK нет ли ошибки при отправке транзакций.
Дело в том что рыночные заявки на покупку могут быть запрещены.
Если так то в таблице транзакций Вы увидите сообщение об этом.
Сообщите Ваш UID чтобы мы могли проверить права.
Добрый день.
ID U0120866

Не уверен, что есть ошибки, т.к. если убрать обработку ожидания  while trans_Status == nil do sleep(1) end, то все работает.
Получается, что если ждать когда придет OnTransReply - зависает скрипт, т.к. ответа нет.
Убираю ожидание все проходит без ошибок.

Как я и говорил выше, на срочной сеции этот же код работает нормально.
 
Цитата
Nikolay написал:
Цитата
Sergey Gorokhov   написал:
Nikolay  ,

Проверьте в таблице транзакций терминала QUIK нет ли ошибки при отправке транзакций.
Дело в том что рыночные заявки на покупку могут быть запрещены.
Если так то в таблице транзакций Вы увидите сообщение об этом.
Сообщите Ваш UID чтобы мы могли проверить права.
Добрый день.
ID U0120866

Не уверен, что есть ошибки, т.к. если убрать обработку ожидания  while trans_Status == nil do sleep(1) end, то все работает.
Получается, что если ждать когда придет OnTransReply - зависает скрипт, т.к. ответа нет.
Убираю ожидание все проходит без ошибок.

Как я и говорил выше, на срочной сеции этот же код работает нормально.
Полагаю, что у Вас  неправильное представление о работе с колбеками.
При использовании  колбеков нет надобности ждать.
Колбеки для этого и создаются.
Т е все события у нас асинхронные, поэтому их не надо ждать, а надо на них реагировать.
Если событий нет, то система бездельничает и ничего не ждет, так как нам заранее неизвесно когда и какое событие будет.
Подумайте над этим и смените логику скриптов.
--------------------------
В качестве совета.
Не надо делать кучу скриптов, пишите свои торговые стратегии в одном, так как все колбеки вызываются последовательно и им передается одно и тоже, то нет смысла множить копии колбеков в разных скриптах.
 
Цитата
Полагаю, что у Вас  неправильное представление о работе с колбеками.
При использовании  колбеков нет надобности ждать.
Колбеки для этого и создаются.
Т е все события у нас асинхронные, поэтому их не надо ждать, а надо на них реагировать.
Если событий нет, то система бездельничает и ничего не ждет, так как нам заранее неизвесно когда и какое событие будет.
Подумайте над этим и смените логику скриптов.
--------------------------
В качестве совета.
Не надо делать кучу скриптов, пишите свои торговые стратегии в одном, так как все колбеки вызываются последовательно и им передается одно и тоже, то нет смысла множить копии колбеков в разных скриптах.
Добрый день. Списибо за ответ.

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

Да, конечно, предсказать когда придет ответ невозможно. Тем более, что сервер может быть загружен.

У меня в данном случае возникает вопрос по логике работы функции main.
Скажем я выставил заявку, далее я должен отреагировать на ее выполнение. Т.к. я ограничен потоком функции main, там у меня бесконечный цикл.
Если я его прерву, то прервется скрипт. Получается мне надо именно в функии main делать отдельную проверку прихода колбэка или некой переменной записанной в коллбэк. Не важно где написана обработка коллбэка. Именно из-за этого бесконечного потока логика скрипта становится несколько извращенной.

Если я правильно понимаю, более менее правильный вариант - это в функции main делать проверку, если она не пришла, направлять код на очередныю итерацию, пока не придет ответ. Правда придется все же ограничивать время такого ожидания, т.к. можно проверять бесконечно.
 
Сам же себе и отвечу.

Если пишем систему в реальном времени, то функция main должна просто что-то инициализировать и все.
Далее все должно выполняться в коллбэках. Если их нет, то и нечего анализировать получается.
Пришла свечка - отвечаем на событие, решили, что надо сделать транзакцию, отправили ее. Ждем ответа о ее завершении.

А вот в функции main, видимо, надо как раз анализировать ситуации когда ответа нет. Скажем, нет ответа на транзакцию, значит перебери ордера, чтобы понять, может она прошла. Видимо, так. Я пока не все еще продумал, т.к. не очень знаком с организацие вызовов в qlua, но, наверно, есть ситуации неуловимые коллбэками.

А вот если система не реального времени, а по расписанию, то, как я понимаю, все надо реализовывать в бесконечном цикле main.
Скажем, цикл, перебирающий список бумаг каждые 15 минут и рассчитывающий что-то. Правда в этом месте возникает вопрос, а нельзя ли при инициализации скрипта назначить один и тот же коллбэк на получение данных разных инструментов, разных интервалов? Тогда и здесь можно было бы все в этом одном коллбэке делать не утилизируя функцию main. Судя по описанию нельзя. Т.е. я вынужден каждые 15 минут заново перибирать список инструментов, получать данные, считать. А если бы в коллбэк приходил не только индекс, но признак чей это индекс, то можно было бы сохранив ранее DS каждого инструмента, отреагировать именно на него.
 
Цитата
Nikolay написал:
ID U0120866
Проверили, права есть.

Цитата
Nikolay написал:
Не уверен, что есть ошибки, т.к. если убрать обработку ожидания  while trans_Status == nil do sleep(1) end, то все работает.
Больше интересует вопрос что именно "работает"? Т.е. заявка по факту ставится или нет?
В качестве примера, сообщите точное время (по МСК) когда была попытка выставить такую заявку.
 
Проверил еще раз. На фондовой секции приходит OnTransReply. Вопрос снимается. Это уже вопрос организации алгоритма как обрабатывать событие.
Цитата
Sergey Gorokhov написал:
Больше интересует вопрос что именно "работает"? Т.е. заявка по факту ставится или нет?
В качестве примера, сообщите точное время (по МСК) когда была попытка выставить такую заявку.
 
Цитата
Nikolay написал:
Сам же себе и отвечу.

Если пишем систему в реальном времени, то функция main должна просто что-то инициализировать и все.
Далее все должно выполняться в коллбэках. Если их нет, то и нечего анализировать получается.
Пришла свечка - отвечаем на событие, решили, что надо сделать транзакцию, отправили ее. Ждем ответа о ее завершении.

А вот в функции main, видимо, надо как раз анализировать ситуации когда ответа нет. Скажем, нет ответа на транзакцию, значит перебери ордера, чтобы понять, может она прошла. Видимо, так. Я пока не все еще продумал, т.к. не очень знаком с организацие вызовов в qlua, но, наверно, есть ситуации неуловимые коллбэками.

А вот если система не реального времени, а по расписанию, то, как я понимаю, все надо реализовывать в бесконечном цикле main.
Скажем, цикл, перебирающий список бумаг каждые 15 минут и рассчитывающий что-то. Правда в этом месте возникает вопрос, а нельзя ли при инициализации скрипта назначить один и тот же коллбэк на получение данных разных инструментов, разных интервалов? Тогда и здесь можно было бы все в этом одном коллбэке делать не утилизируя функцию main. Судя по описанию нельзя. Т.е. я вынужден каждые 15 минут заново перибирать список инструментов, получать данные, считать. А если бы в коллбэк приходил не только индекс, но признак чей это индекс, то можно было бы сохранив ранее DS каждого инструмента, отреагировать именно на него.
Колбеки нельзя перегружать кодом, можешь завесить Квик. Процесс main это один поток, рядом в потоке сам квик с колбеками. В одном OnTransReply анализируй все. Сначала отфильтруй повторный вызов колбека, потом фильтруй по бумаге если нужно, потом фильтруй по своим ID.
Страницы: 1
Читают тему
Наверх