Sergey Gorokhov пишет: Информацию о посланных транзакциях Вы можете логировать самостоятельно средствами Lua
В спорной ситуации брокер может просто заявить, что транзакция на сервер не пришла. И эту карту ничем не перебьёшь. К тому же, транзакции выполненные вручную, нельзя "перехватить". Поэтому зарегистрируйте пожелание, чтобы отправленные транзакции также логировались на рабочем месте средствами самой системы.
Надо делать так, как надо. А как не надо - делать не надо.
Данную проблему поднимал почти год назад: Архив графиков. Проблема в том, что на сервере QUIK нет никакого контроля качества принимаемой информации. И, если в результате какого-либо сбоя на одном из узлов передачи данных между шлюзом биржи и сервером QUIK часть данных "потеряется", то это так и останется незаметным для сотрудников брокера, пока (и если) кто-нибудь из бдительных пользователей не сообщит им об этом. Проблема отсутствия части сделок в ТВС, и как следствие - части данных на графиках, - явление не редкое: по одному только инструменту более 2% в год.
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov пишет: Как вариант - учитывать время проведения клиринга в своём алгоритме.
Можно, но есть множество причин, по которым данный вариант не является надёжным. Поэтому давайте сделаем так, чтобы не нужно было гадать: есть данные - транслируем, нет данных - не транслируем. Спасибо.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Это биржа шлёт эти нули или QUIK сам их подставляет?
Добрый день.
Второе.
Очевидно, что, когда принималось решение о такой подставе замене, должно было предусмотреть вариант чтения текущей позиции. Поделитесь, пожалуйста, решением однозначного определения текущей позиции по инструменту, в случае, когда мы видим в таблице ноль. Ну, т.е., по каким признакам можно понять, что размер позиции ещё не определён и нужно ждать колбэка?
Надо делать так, как надо. А как не надо - делать не надо.
NUMBER InsertRow(NUMBER t_id, NUMBER key) Примечание: При добавлении данных в новую таблицу в первую очередь выполните данную функцию с параметром «key» равным «-1». При этом строка добавится в конец таблицы.
Почему при добавлении в новую таблицу key должен быть равен -1? Что произойдёт, если добавлять в новую таблицу с другим, отличным от -1, значением?
Надо делать так, как надо. А как не надо - делать не надо.
В таком случае, можем мы рассчитывать, что это недоразумение будет исправлено в ближайшем обновлении версии терминала в рамках пожелания?
Цитата
Sergey Gorokhov пишет: Дословно оно звучит так "чтобы во всех колбеках возвращающих таблицы, при отсутствии значения параметра передавать nil вместо "0"
Надо делать так, как надо. А как не надо - делать не надо.
Иногда, например во время клиринга, в таблицах QUIK транслируются нули вместо реальных позиций. Эти нули присылает биржа или QUIK сам подставляет их вместо null?
Как можно понять, когда там действительно нули, а когда позиции пока ещё не загружены?
Надо делать так, как надо. А как не надо - делать не надо.
Эко вы завернули Понятно, что для использования в личных целях вы не можете ничего запретить. Здесь же я спрашиваю, могу ли я или кто-то другой по аналогии написать скрипт, который будет выполнять функции, до которых у ваших программистов не доходят руки (и не скоро, наверное дойдут). К примеру, при старте QUIK (или по нажатию "горячих клавиш") открывать окно "Доступные скрипты" (или управлять другими окнами) и свободно распространять его на просторах интернета?
Надо делать так, как надо. А как не надо - делать не надо.
тот самый пишет: т.е. такая ситуация: в данный момент, есть куча проектов, наработок - но их нельзя продавать/распространять из-за страха юридических последствий....
Как можно однозначно определить к какой секции относится тот или иной счёт: фондовой, срочной, валютной?
Цитата
тот самый пишет: пользователям приходиться играть в шерлоков холмсов
Спасибо за ваше "расследование", но тема соответствия номера параметра trdacc_type строковому описанию не раскрыта. Полагаю, справедливо было бы предоставить слово представителям компании разработчика.
Надо делать так, как надо. А как не надо - делать не надо.
тот самый пишет: Тип счета депо Тип депозитарного счета. Возможные значения:
Откуда вы взяли эту таблицу? У меня другая таблица (из того же Руководства, Раздел 5):
Цитата
Тип депозитарного счета. Возможные значения:
«Не определен»;
«Счет владельца»;
«Корреспондентский счет»;
«Счет ДУ»;
«Эмиссионный счет»;
«Клиентский счет»;
«Счет по умолчанию для валютного рынка»;
Только порядок перечисления строковых значений не соответствует числовым значениям параметра trdacc_type таблицы trade_accounts. Нужно именно однозначное соответствие.
Надо делать так, как надо. А как не надо - делать не надо.
Это говорит только о производительности рабочего места Далее появляется объект с неизвестными нам свойствами в виде трассы до сервера QUIK, который не позволяет сделать каких-либо объективных выводов о производительности самого сервера, поскольку не известно, с какой частотой эти транзакции попадали к нему на обработку.
Надо делать так, как надо. А как не надо - делать не надо.
Если речь именно про транзакции, то отправить их можно более 1000 в секунду. Так на тестовом QUIK я отправлял 12-14 тыс. транзакций за одну секунду. Другое дело, что заявки по ним выставляются в течение нескольких секунд. А ответ по всем транзакциям приходит так вообще в течение более минуты.
Надо делать так, как надо. А как не надо - делать не надо.
Да Close() не удаляет параметр из списков. Такова текущая реализация. Ранее мы уже регистрировали от другого пользователя пожелание по данной теме. Можем зарегистрировать еще одно от Вас.
Давайте зарегистрируем. А то в текущем виде смысла нету в :Close(). Это с таким же успехом можно просто удалить сам объект ds = nil.
Надо делать так, как надо. А как не надо - делать не надо.
Антонио пишет: Видим, что потоки в переменных не сохраняются, а какое-то время живут как локальные переменные. При выходе из скрипта потоки не закрываются с помощью DS:close(). Вопрос 1 : Это нормально не хранить и не закрывать после себя потоки ?
А зачем закрывать? Мы потом с этими данными работаем.
При включённой настройке "Исходя из настроек открытых пользователем таблиц" функция CreateDataSource добавляет параметр в списки принимаемых параметров. Метод :Close() не удаляет этот параметр из списков. Таким образом, :Close() не влияет на возможность получения данных при работе с ними через getParamEx.
Это нормальная ситуация?
Надо делать так, как надо. А как не надо - делать не надо.
Если происходит "переворот" позиции, то также блокируются средства на сумму отрицательной вариационной маржи по закрываемой позиции: http://forum.moex.com/viewtopic.asp?t=30125
Надо делать так, как надо. А как не надо - делать не надо.
Сама os.execute вызывает окно командной строки, которое вылазит на первый план и, если, к примеру, вы работаете в полноэкранном приложении, норовит его свернуть.
Надо делать так, как надо. А как не надо - делать не надо.
тот самый пишет: такое ощущение, что кто-то решил написать справку из вопросов и ответов форума по всей QLUA:)))))
Ну, если все зарегистрированные участники этого форума скинутся хотя бы по 100 руб./мес, то я напишу и буду поддерживать в актуальном состоянии расширенную справку по QLua с описаниями особенностей работы некоторых функций, с нормальными примерами по всем функциям и известными багами на сегодняшний день
Надо делать так, как надо. А как не надо - делать не надо.
local status = getParamEx(class_code, sec_code, "tradingstatus")
message(status.param_value)
выводит "0.000000". Но мы уже наученные - понимаем, что ноль в QUIK - это не всегда ноль. Проверяем тип данных, чтобы не был равен 0:
Код
message(status.param_type)
выводит 2. Вроде, нормально. Ан, нет: для параметра "tradingstatus" тип должен быть 4. Значит данный параметр Квиком не получен. И так для многих параметров.
Но надо сделать так, чтобы можно было однозначно определить, без гаданий, получен ли параметр торговой системой или нет.
Надо делать так, как надо. А как не надо - делать не надо.
тот самый пишет: getParamEx и CreateDataSource - абсолютно никак не связаны.
Оказывается, связаны.
Цитата
Sergey Gorokhov пишет: Это работает только если включена настройка "Исходя из настроек открытых пользователем таблиц"
Если включена настройка "Исходя из настроек открытых пользователем таблиц", то CreateDataSource автоматически добавляет бумагу/параметр в список получаемых параметров.
Таким образом, с помощью getParamEx можно будет получить значения параметров. (Выше я был не прав: CreateDataSource всё же не совсем бесполезна в этой ситуации).
Правда, ds:Close() бумагу уже не из списка не удаляет.
Надо делать так, как надо. А как не надо - делать не надо.
Добрый день. В руководстве QLua к QUIK v.7 добавилось описание функции OnConnected, из которого стало ясно, что колбэк, вызываемый при получении нового класса уже существует. Есть ли колбек, вызываемый при получении новой бумаги в существующем классе?
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov пишет: Про nil, его нет и не было, мы зарегистрировали пожелание. Дословно оно звучит так "чтобы во всех колбеках возвращающих таблицы, при отсутствии значения параметра передавать nil вместо "0"
Я бы уточнил: как 0 (ноль), так и "" (пустая строка) - оба значения сейчас могут трактоваться двусмысленно.
Вот в случае этой реализации и может возникнуть дополнительный колбэк, в зависимости от текущей реализации. Если сейчас после колбэка со значением <0 = null (параметра нет)> не отправляется повторный колбэк со значением <0 = 0 (параметр заполнен)>, то при реализации указанного выше предложения будет возникать дополнительный колбэк.
Цитата
Sergey Gorokhov пишет: Да сейчас это действительно так и способ решить проблему уже озвучивался "используйте комментарий"
Уже писал, что часто - это не выход из положения:
Цитата
Sergey Gorokhov пишет: У пользователя может быть куча других роботов, алго-приводов и пр., где параметры транзакций уже давно жёстко заданы производителем.
Цитата
Sergey Gorokhov пишет: Далее, предлагается разделить понятия nil и 0, а именно в базе записывать "0" (как сейчас) а в описанных выше случаях, при приезде сделки отправлять клиенту nil и далее делать поиск правильного trans_id. На что не однократно прозвучал ответ, что в такой реализации для отправки trans_id=0 будет лишний колбэк, которого сейчас нет.
При реализации конкретно этого предложения никаких лишних колбэков возникать не будет. Выше уже показал, когда может возникнуть дополнительный колбэк.
Цитата
Sergey Gorokhov пишет: А лишние колбэки, судя по этой ветке форума, никому не нравятся.
А какая нам теперь разница, сколько колбэков обрабатывать: 3 или 4 или сколько там будет? Для нас важно чёткое понимание получили ли мы интересующие нас данные или ещё нет.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Является ли следующая ситуация сбоем на сервере: когда "сделка приехала раньше ответа на транзакцию" и в этом случае в первом колбеке trans_id=0 даже, если транзакция была подана не через интерфейс ?
Данная ситуация не является сбоем, это "частный случай" Да, в этом случае первым приедет trans_id=0 даже, если транзакция была подана не через интерфейс.
Так какого вы мне тут расписываете на 3-х страницах?!
Я вам говорю, что получив колбек с trans_id=0 (сюда можно вписать название любого другого обновляемого параметра), я не могу быть уверенным, что значением этого параметра действительно является 0 (ноль). И меня (думаю и других пользователей QUIK) не волнует, что эта ситуация маловероятна в условиях штатной работы сервера.
Получив trans_id=0 (сюда можно вписать название любого другого обновляемого параметра), я должен выполнить определённую задачу. А что потом, когда эта "маловероятная" ситуация произойдёт, я буду просить биржу откатить сделки обратно, потому что Sergey Gorokhov сказал мне, что это "маловероятно"?
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov пишет: Частный случай когда сделка приехала раньше ответа на транзакцию тоже возможен.
Мне не понятны ваши трактовки "частный"/"общий" случай.
Является ли следующая ситуация сбоем на сервере: когда "сделка приехала раньше ответа на транзакцию" и в этом случае в первом колбеке trans_id=0 даже, если транзакция была подана не через интерфейс?
Я действительно уже многократно задаю один и тот же вопрос. Но я не получаю на него прямого ответа! Перестаньте уже вилять в конце концов.
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov пишет: Мы можем зарегистрировать пожелание "отличать сделки порожденные транзакцией выставленной через интерфейс от выставленной через Lua" без конкретики озвученной в Вашем предложении. Устроит такой вариант закрытия темы?
Как меня может устроить такой вариант, если в вашем предложении нет никакой конкретики? И потом, почему обязательно Lua? Сервер знает, что транзакция подана через Lua, а не Api или QPILE?
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: OnTrade всегда приходит с заполненным полем trans_id?
Нет не всегда, в частности из-за сбоя на сервере может приехать 0, а потом правильный trans_id или он может вообще не приехать.
Цитата
Старатель пишет: Если trans_id=0 в сделке, означает ли это, что сделка была совершена вручную?
В общем случае да, в частном см. выше.
Вы сейчас извиваетесь, как уж на сковородке. Таким образом, теперь вы сами опровергаете свои же слова о повторной приходе колбека OnTrade необходимостью отправлять дополнительные параметры, в частности uid и trans_id?
Или (задам опять прямой вопрос, на который вы так не хотите давать прямого ответа, хотя вопрос выше был итак достаточно чётким):
Может ли в штатной ситуации trans_id прийти незаполненным (в текущей реализации это означает ноль) в первом колбеке?
На всякий случай, привожу ссылку на ответ более компетентного сотрудника, как это работает в 6-й версии: OnOrder без UID
Надо делать так, как надо. А как не надо - делать не надо.