Сергей (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Статус сессии.
 
Цитата
Sergey Gorokhov написал:
tradingphase
Добрый день. А можно уточнить, где он находится? Поиск по справке quik ничего не дал, в списке доступных параметров ТТТ тоже ничего похожего не встретилось.
Снятие заявки, server check failed
 
Цитата

Сергей,
Дело в том, что на сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK. Серверу, чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз.
Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений.
Можем зарегистрировать Ваше пожелание на добавление для заявок флага "находится в процессе снятия", который бы приходил в первом пакете обновлений по заявке вместе с первым OnOrder при подаче транзакции на снятие заявки.
Регистрируем?
Регистрируем
Синхронизация getNumberOf и getItem
 
Прежде всего, я нигде, вроде, не просил написать скрипт на Луа, или каком-либо еще языке, достаточно было изложить общий принцип организации выборки. Прямой, обратный, с использованием специальных функций, что-то еще. По существу последнего ответа, спасибо, хоть какая-то конкретика, по крайней мере понятно, как организована сортировка в таблице позиций. Уж, как это обработать в скрипте, дело действительно индивидуальное.
Снятие заявки, server check failed
 
Довольно мутное свойство. Почему бы не сделать тогда флаг "находится в процессе снятия", или признак "служебного" ордера?
Синхронизация getNumberOf и getItem
 
Видимо, я не очень доходчиво изложил свою мысль, раз до сих пор нет никакого ответа от разработчиков. Ответов в стиле "все возможно" недостаточно, нужны конкретные рекомендации, как должна быть организована выборка из таблиц квика, чтобы не было повторного чтения. Пока, из сказанного Андреем, можно сделать вывод, что таблицы заполняются терминалом не последовательно, а абы как, и порядок строк может в любой момент произвольно меняться. Если это так, то желательно иметь возможность синхронизировать чтение и обновление таблиц, либо механизмом транзакций, либо блокировками. И под словом "желательно" я подразумеваю, что необходимо зарегистрировать пожелание на доработку.
Снятие заявки, server check failed
 
Раз уж топик про снятие заявок, внесу и свои 5 копеек. Проблем с коллбэками onTransReply не наблюдал, но зато стабильно приходят два коллбэка onOrder, причем флаг снятия ордера поднят только во втором. Получается сначала приходит коллбэк о том, что мы якобы выставили ордер (хотя он уже есть и активен), и только потом, что он снимается. Зачем такая история? Терминал 8.3.2.4, если что.
Снятие заявки, server check failed
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, QApplication.

Цитата
QApplication написал:
1. по какой причине происходит отказ в снятии ордера?  Error code - 8,635,230  что это такое?
Status=5, StatusEx="QUIK server check failed for transaction" и Error code=8635230 означают, что транзакция не прошла проверку сервера QUIK. Возможные причины: снимаемая заявка уже исполнена, уже снята, не принадлежит Вам (например, была допущена ошибка в указании номера заявки при подаче транзакций).
Цитата
QApplication написал:
2. почему не срабатывает  OnTransReply callback если данные в таблицу транзакций приходят?
Наиболее вероятно, речь идёт о транзакциях, отправляемых при помощи trans2QUIK API, QPILE или из *.tri-файла. В этом случае ответ на транзакции не вызывает OnTransReply
Цитата
QApplication написал:
3. почему не срабатывает OnTransReply callback при направлении транзакции на снятие через sendTransaction?
А сама транзакция в таблице транзакций отображается? Если нет - значит с таблице транзакции есть ошибка, из-за которой sendTransaction её не отправила, соответственно ответа на транзакцию нет, и callback не вызывается. В остальном, проверили работу OnTransReplay попытавшись снять активную и уже снятую заявки, в обоих случаях callback сработал. Соответственно, надо либо проверить корректность полей транзакции на снятие заявки и убедиться, что она отправляется в систему и фиксируется в таблице транзакций и что OnTransReply отрабатывает; либо более подробно описать ситуацию, при которой OnTransReaply не срабатывает привести минимальный достаточный для воспроизведения фрагмент используемого скрипта, чтобы был возможен дальнейший анализ ситуации с нашей стороны.
Цитата
QApplication написал:
4. как получить данные из таблицы транзакций средствами QLUA?
Сейчас не предусмотрено возможности получить доступ к таблице транзакций из LUA-скрипта. Можем зарегистрировать Ваше пожелание на такую доработку. Регистрируем?
Конечно регистрировать! Это может быть весьма полезно, если был разрыв соединения, или ошибка скрипта. В таком случае коллбэк может пройти мимо, и узнать статус транзакции будет затруднительно.
Синхронизация getNumberOf и getItem
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Алексей.

Цитата
Алексей написал:
Моя версия, объясняющая такое поведение: изменение таблицы depo_limits между вызовом getNumberOf и getItem. Например, была исполнена заявка на покупку или продажу. Количество строк в depo_limits изменилось и getItem "съехал" на одну строку.Скажите, возможна ли описанная ситуация?
Возможно, зависит от того, как составлен скрипт и как выполняется опрос количества строк, как часто вызываются getNumberOf и getItem.
Цитата
Алексей написал:
Скажите, возможна ли описанная ситуация? Если да, то как можно обнаружить изменение таблицы depo_limits после вызова getNumberOf, чтобы перечитать ее заново?
Можете использовать callback OnDepoLimit, например.
Цитата
Алексей написал:
Может ли функция SearchItems заменить вызов getItem в цикле и исключить возможность изменения таблицы depo_limits во время обхода?
Функция getItem возвращает LUA-таблицу с данными из указанной строки указанной таблицы.
Функция SearchItems возвращает LUA-таблицу с номерами строки указанной таблицы, которые отвечают указанным критериям. Возможность заменить одно другим предлагаем Вам определить для себя самостоятельно исходя из Вашего подхода к составлению скрипта и решаемой им задачи.
Очень содержательные ответы! Почему бы просто не написать, что в нашем мире все возможно? Хочется надеяться, что более детальные комментарии службы поддержки тоже возможны, например, в каких случаях описанные проблемы могут возникнуть и как их избежать.
В чем отличия SearchItems и getNumberOf/getItem?
 
Цитата
Anton написал:
Хотя да, если в строке параметров указать только одно поле (qty), получаем совсем другую картину
   
Таким образом, на вопрос чем SearchItems быстрее, отвечаем - чем меньше полей требуется сравнивать, тем меньше константы.
Тоже была такая мысль, что выигрыш будет в случае указания ограниченного списка полей. Спасибо за интересный разбор:)
В чем отличия SearchItems и getNumberOf/getItem?
 
Цитата
Anton написал:
Линейная у SearchItems сложность. Искал в ТВС. Оси условные.
Да, тоже посмотрел, линейная. Утверждение, что  SearchItems работает быстрее, стало еще более загадочно, с чего бы?
В чем отличия SearchItems и getNumberOf/getItem?
 
Цитата
Anton написал:
Цитата
Сергей написал:
Если SearchItems выполняется в основном контексте, то вызов с тяжелой функцией, скорее всего, заблокирует коллбэки, причем во всех скриптах.
Тут у вас путаница. Каким образом она может выполняться в основном потоке квика? Только будучи вызванной в колбеке каком-то. Так вот сам по себе вызов колбека не даст основному потоку делать что-либо еще, в том числе вызывать другие колбеки, пока вы из колбека этого не вернетесь, независимо от выполняемых в нем действий. Следовательно, без разницы, SearchItems в нем или явный цикл.

По вопросу что лучше - лучше не строить алгоритм так, чтобы приходилось снова и снова что-то искать, это в любом случае повышает сложность (в смысле о большое). Явный цикл имеет линейную сложность. Если, например, пройти по ТВС, на каждом тике вызывая поиск в той же ТВС, получим сложность уже квадратичную. Всегда лучше алгоритм с меньшей сложностью, даже если в нем константы больше, т.к. он остается работоспособным при масштабировании, а полиномиалка начинает тормозить уже с малых размерностей и с какого-то момента вешается навеки. Насчет сложности SearchItems послушал бы из первоисточника.
В чем путаница? Понятно, что если я читаю таблицу из коллбэка, то без разницы, будет это простой перебор, или SearchItems. Но, где написано, что SearchItems не может выполняться в основном контексте квика, будучи запущенной из майна? Определенная логика в этом была бы - меньше затрат на синхронизацию обновления таблиц и чтения из них.
По части сложности алгоритмов, согласен полностью, однако, реализация SearchItems мне не известна, вам, как я понимаю, тоже, вот и хотелось бы получить комментарии разработчиков. Ведь из каких-то соображений эту функцию добавили!
В чем отличия SearchItems и getNumberOf/getItem?
 
Нужна какая-то особая отметка в теме, чтобы поддержка дала свои пояснения?
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Andrey Bezrukov написал:
Александр,

Таблица сделок - это таблица сделок, а не список фирм, и она очищается при смене пользователя, чтобы другой пользователь не получил информацию о сделках, совершённых предыдущем пользователем. Это правило не распространяется на список фирм, о чём было сказано выше.
Соответственно, ожидать что список фирм будет очищен по аналогии с таблицей сделок, при выполнения условия OnCleanUp - ошибочно.
Единственный вариант, при котором вместе с вызовом OnCleanUp очистится список фирм - это очистка/удаление firms.dat из скрипта в вызове OnCleanUp, или вручную.

Соответственно, подключаетесь одним пользователем - получаете список фирм, отключаетесь, меняете пользователя, подключаетесь, очищаются различные таблички, firms.dat не очищается, фронт получает список фирм, не находит в нём новых и не вызывает OnFirm.
Как-то не совсем так. На боевом сервере (СБЕР 8.3.2.4) при начале торговой сессии каждый раз приходит 2000+ коллбэков OnFirm, файл firms.dat никак не очищается, ни скриптом, ни вручную. Значит либо терминал этот файл сам чистит (тогда в каких случаях?), либо процедура не совсем такая, как вы описали.
В чем отличия SearchItems и getNumberOf/getItem?
 
Немного поясню, к чему вопрос. Если SearchItems выполняется в основном контексте, то вызов с тяжелой функцией, скорее всего, заблокирует коллбэки, причем во всех скриптах. Если в контексте вызывающего потока, то одновременный вызов из main и коллбэка может привести к конфликтам.
В чем отличия SearchItems и getNumberOf/getItem?
 
Ну память, если не сохранять промежуточные результаты, сборщик почистит. При SearchItems тоже есть накладные расходы при вызове функции QLua из ядра Quik. Больше интересуют именно возможное блокировки данных/потоков.
В чем отличия SearchItems и getNumberOf/getItem?
 
Добрый день. Кто-нибудь может подсказать, есть какие-то принципиальные отличия, которые бы делали предпочтительным использование SearchItems или цикл getNumberOf/getItem для выбора значений из таблиц Quik? Одно отличие точно есть, это отсутствие трансляции ошибок при использовании SearchItems. Может еще что-то, например, блокировка таблицы, из которой идет выборка, или блокировка коллбэков?
Неверная трансляция балансовых цен!
 
Ниже логи, там видно, что по первой бумаге лимиты с типами 1 и 2 дают одинаковую цену позиции, в втором случае для лимита с типом 1 цена в 10 раз больше, т.е. уже приведена к номиналу.

[8468] {table: 00000252D3AE5D80
[8468]   sec_code="RU000A101PV6",
[8468]   awg_position_price=100.135,
[8468]   wa_position_price=100.135,
[8468]   limit_kind=1,
[8468] }
[8468] {table: 00000252D3AE7130
[8468]   sec_code="RU000A101PV6",
[8468]   awg_position_price=100.135,
[8468]   wa_position_price=100.135,
[8468]   limit_kind=2,

[8468] }
[8468] {table: 00000252D3AE7770
[8468]   sec_code="SU26209RMFS5",
[8468]   awg_position_price=1019.9716,
[8468]   wa_position_price=1019.9716,
[8468]   limit_kind=1,
[8468] }
[8468] {table: 00000252D3AE7F40
[8468]   sec_code="SU26209RMFS5",
[8468]   awg_position_price=101.99716,
[8468]   wa_position_price=101.99716,
[8468]   limit_kind=2,
[8468] }
Неверная трансляция балансовых цен!
 
Все оказалось еще забавнее. Если перебирать позиции по SearchItems('depo_limits'), то приходят позиции как с процентными ценами, так и в деньгах. А вот вызов getDepoEx() возвращает случайный вариант. Видимо, опять косяки с классами инструментов. Может разработчики уже как-то помогут Сберу наладить сервер? А то уже почти месяц прошел, как биржа классы меняла, а у брокера до сих пор терминал глючит!
Неверная трансляция балансовых цен!
 
Добрый день. Терминал Сбербанк, версия 8.3.1.38. Сегодня обнаружился очередной "прикол", по облигациям, часть позиций транслируются с балансовой ценой в рублях, часть в процентах:

[8468] {table: 00000252DD6499A0
[8468]   sec_code="RU000A1018L9",
[8468]   awg_position_price=1008.472857,
[8468]   currentbal=0,
[8468]   locked_buy_value=0,
[8468]   wa_position_price=1008.472857,
[8468]   client_code="",
[8468]   openlimit=0,
[8468]   firmid="MC0002500000",
[8468]   locked_sell_value=0,
[8468]   limit_kind=2,
[8468]   openbal=0,
[8468]   locked_buy=0,
[8468]   locked_sell=0,
[8468]   trdaccid="L01-00000F00",
[8468]   currentlimit=0,
[8468]   metatable=nil
[8468] }
[8468] {table: 00000252D3E50680
[8468]   sec_code="RU000A0JVHH1",
[8468]   awg_position_price=103.050938,
[8468]   currentbal=0,
[8468]   locked_buy_value=0,
[8468]   wa_position_price=103.050938,
[8468]   client_code="",
[8468]   openlimit=0,
[8468]   firmid="MC0002500000",
[8468]   locked_sell_value=0,
[8468]   limit_kind=2,
[8468]   openbal=0,
[8468]   locked_buy=0,
[8468]   locked_sell=0,
[8468]   trdaccid="L01-00000F00",
[8468]   currentlimit=0,
[8468]   metatable=nil
[8468] }

Причем отловить, в каких случаях какая цена придет, не получилось, все меняется случайно при каждом обращении к таблице лимитов по бумагам.
Нужна ли подписка на параметры таблицы Securities?
 
Всем доброго дня. Вопрос такой, надо ли подписываться на те параметры ТТТ, которые уже присутствуют в описании инструментов, получаемых по getItem, либо по getSecurityInfo? Или они уже заполнены корректно при получении клиентом таблицы securities?
Createsource и смена сессии
 
По размышлению возник вопрос, а зачем вообще при дисконнекте закрывать потоки, созданные createdatasource()? Они автоматом разве не закроются? Что вообще произойдет с открытым потоком, если соединение разорвется, а затем восстановится?
Соответствие Кодов клиента и Торговых счетов, Определение соответствия Кодов клиента и Торговых счетов
 
Цитата
nikolz написал:
Цитата
Сергей написал:
Освежу темку.
1. Если фирма для брокера это группа счетов, то зачем в вызовах getDepoEx, getMoneyEx, getFuturesLimit, ... кроме номера счета указывать еще и фирму? Кажется, эта информация избыточна.
2. Практически всегда, номер счета фондового рынка МБ имеет код "L01~00000F00", получается это не счет клиента, и даже не брокера, а .... счет чего?
на бирже торгуют фирмы(брокеры) а не их клиенты
поэтому информация о фирме нужна бирже.  
кроме того в сделке на бирже есть и идентификатор клиента,
но идентификатор клиента(счет)  нужен реально лишь брокеру для разнесения сделок по клиентам во внутренней "амбарной книге"
Информацию о фирме легко получить по номеру счета, судя по тому, что в таблице счетов есть поле с ид фирмы, сопоставление там однозначное.
Соответствие Кодов клиента и Торговых счетов, Определение соответствия Кодов клиента и Торговых счетов
 
Освежу темку.
1. Если фирма для брокера это группа счетов, то зачем в вызовах getDepoEx, getMoneyEx, getFuturesLimit, ... кроме номера счета указывать еще и фирму? Кажется, эта информация избыточна.
2. Практически всегда, номер счета фондового рынка МБ имеет код "L01~00000F00", получается это не счет клиента, и даже не брокера, а .... счет чего?
Не запускается QUIK от Сбербанка
 
В эту же копилку. Выявилась еще одна проблема с таблицей "Состояние счета" в терминале от Сбера. Сегодня при подключении часть позиций в таблице оказалась с инфоклассом, вместо торгового, и отображалась какая-то дичь, вместо реального состояния счета. Разумеется, обновиться до версии 8.6 не получится, поскольку брокер ее не предоставляет.
Createsource и смена сессии
 
Интересно, а подписку на получение параметров ТТТ тоже нужно делать заново при смене сессии?
Не запускается QUIK от Сбербанка
 
Всем доброго. Еще одна проблема от Сбера. После обновления биржей классов облигаций, стал часто вылетать терминал с дампом, помогает только вход с очисткой логов. Путем проб и ошибок выяснилось, что крах наступает при обновлении таблицы "Состояние счета" (покупка/продажа облигаций, либо просто переключение фильтра по режиму торгов). Версия терминала 8.3.1.38. Может кто подскажет, как это можно быстро полечить, например, грохнуть какой-нибудь файл с кэшем инструментов?
Устаревшие данные в стакане
 
Всем хорошего дня. Столкнулся с такой ситуацией: оповещения в скрипт о выполнении транзакции и изменении ордеров (т..е. onTransReply, onOrder) уже пришли, а стакан по getQuoteLevel2 не изменились Как с этим бороться? Ведь это проблема, "свои" заявки в стакане никак не отмечены, и определить, это "еще" объем уже выполненных ордеров, или чьи-то новые заявки, нет никакой возможности!
Couponvalue при вызове getSecurityInfo, Странное значение Couponvalue при вызове getSecurityInfo
 
Спасибо
Couponvalue при вызове getSecurityInfo, Странное значение Couponvalue при вызове getSecurityInfo
 
Комментарии от поддержки будут?
Алго-заявки
 
Вопрос был не в том, как подать, что sendTransaction, это понятно. Вопрос как посмотреть какие заявки в настоящий момент активны/исполнены, и их параметры.
Алго-заявки
 
Вопрос такой, каким образом можно выбрать активные алго-заявки из скрипта qlua? И как их можно снимать/модифицировать?.
Couponvalue при вызове getSecurityInfo, Странное значение Couponvalue при вызове getSecurityInfo
 
Доброго дня.
Не могу понять странное значение couponvalue, возвращаемое функцией getSecurityInfo(). Например, по бумаге "SU29009RMFS6", "TQOB", значение
[23740]   couponvalue=3730, в то время, как функция getParamEx2() с параметром "CPOUPONVALUE" возвращает "37.3". Почему такая разница?
Страницы: 1
Наверх