Транзакции KILL_ORDER имеют флаг "на ввод заявки", а KILL_ALL_FUTURES_ORDERS - флаг "служебная". QUIK clients support, какой смысл вкладывается в эти понятия?
Незнайка написал: на общем балансе брокера в моменте количество акций меньше, чем вы хотите продать...
Roman Azarov, возможна такая ситуация, когда у одного клиента на счёте +некоторое количество акций, у другого "-" (продано или стоят в заявках на продажу), в итоге суммарное количество доступных акций у брокера меньше, чем у первого клиента в портфеле? Какая в этом случае будет диагностика?
Обычно, если послать транзакцию за несколько секунд до начала или через несколько секунд после окончания торговой сессии, то будет ошибка от шлюза торговой системы: "Сейчас эта сессия не идет."
Цитата
Олег написал: вот с такими данными улетала транзакция фьючерс Si-3.21 12.02.2021;11:30:00;ACTION=NEW_ORDER; TRANS_ID=1612899312; OPERATION=B; QUANTITY=1; PRICE=74366;
Что значит "улетела"?
Цитата
Олег написал: Указанная транзакция по указанному классу не найдена: "SPBFUT"
Это, вроде, как ошибка самого терминала, транзакция на сервер не отправляется.
Незнайка написал: Пока выполняется байткод (в любом потоке) сам QUIK залочен?
Ну да, ваш же тест выше это и подтверждает. Просто это было не так очевидно в скриптах, где байткод перемежается с си-функциями. Не далеко от QPILE ушли
Anton написал: байткод всегда выполняется под локом
Пока выполняется байткод (в любом потоке) сам QUIK залочен?
Цитата
Anton написал: Арке надо было только реализовать lua_lock/lua_unlock
А зачем понадобилось их реализовывать? Ну выполнялись бы потоки параллельно. А то так стопорится скрипт на каждом шаге, переключаясь то на один поток, то на другой.
Anton написал: Сишные функции - любые, из самого луа, из qlua выполняются без лока
Как можно в этом убедиться?
При вызове, скажем сишной функции из самого lua, сначала ставится lua_lock потом выполняется функция, затем lua_unlock или в обратном порядке: lua_unlock - выполнение функции - lua_lock?
Anton написал: байткод всегда выполняется под локом, а когда надо вызвать сишную функцию, лок снимается и после возврата захватывается снова. Арке надо было только реализовать lua_lock/lua_unlock, все остальное уже готово.
Т.е., весь луа-код, в т.ч. и сишные функции из qlua, не может выполняться одновременно в двух потоках? Ну и зачем тогда нужно было городить весь этот огород с двумя потоками, если они всё равно не работают параллельно?
Вопрос к разработчикам: какие преимущества дала такая двухпоточная модель работы Lua-скриптов?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Ни к чему не призываю, сам эту штуку не ставил. Но кому-то может, и пригодятся реализованные автором средства, которых нет изначально в qlua. Вы ведь не думаете, что автор предложил исключительно вам двоим опробовать свой продукт? С таким же успехом можно, пойти, например на форум TSLaba и возмущаться там, зачем мне ваша хрень, я и сам могу тестер написать.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Евгений написал: Что не так с моим оборудованием что 35 меток в формате jpg на одном графике вызывают остановку остальных? Открыто 8 вкладок на каждой в среднем по 3 графика с индикаторами.
Если закрыть все графики, кроме того, на котором метки, как работать будет?
s_mike@rambler.ru написал: Если же вы получили колбек и исходя из этого факта полезли в таблицу - это эта работа уже является полезной, а не бессмысленной.
Но при этом терминал упаковывает и передаёт нам в колбеке табличку, которую мы всё равно не используем. Или если использовать OnAllTrade() без параметров, то он не упаковывает сделку в табличку? Опять же вопрос: что выгоднее перенести таблицу со сделкой в main через потокобезопасные функции или вытащить её в main через getItem?
Anton написал: И дальше две модели - синхронная и асинхронная. Синхронная - это как форум, задал вопрос, через некоторое время зашел, поглядел, что ответили, если ничего - попозже еще зашел и так далее. Асинхронная - это оставил мыло (колбек), как проблему изучили, прислали ответ туда. Тут тоже возможны варианты, можно написать "ответ на ваш вопрос появился на форуме", то есть просто напомнить, что пора пойти и синхронно глянуть, либо прислать ответ целиком, чтобы никуда уже не ходить. В квике есть все эти варианты для разных вопросов. В идеальном мире были бы возможны все варианты для любого вопроса по выбору скрипта. Скажем, мне вот не нужна в OnAllTrade вся эта табличка с трейдом, мне нужен только факт, что туда что-то приехало, а бедный квик каждый раз табличку заполняет, в которую я даже не погляжу. А кому-то табличка нужна.
Что выгодней с точки зрения производительности: постоянно опрашивать размер таблицы
Код
function main()
local last = 0
while run do
local n = getNumberOf("all_trades")
if n > last then
for i = last, n - 1 do
...
end
last = n
else sleep(100) end
end
end
или назначить колбек на получение новых данных?
Код
function OnAllTrade()
a = true
end
function main()
local last = 0
while run do
if a then
local n = getNumberOf("all_trades")
a = false
for i = last, n - 1 do
...
end
last = n
else sleep(100) end
end
end
Незнайка написал: Ув. техподдержка, подскажите, как называется этот параметр в QUIK? Также подскажите, как называются параметры, которые транслируются в потоке FORTS_REFDATA_REPL таблица session
Статус инструмента передается в шлюзе в потоке FORTS_REFDATA_REPL и таблице fut_sess_contents поле state
Цитата
Поле state может принимать следующие значения: 0 Сессия по этому инструменту назначена. Нельзя ставить заявки, но можно удалять по этому инструменту. 1 Сессия по этому инструменту идет. Можно ставить и удалять заявки по этому инструменту. 2 Приостановка торгов по всем инструментам. Нельзя ставить заявки, но можно удалять. 3 Сессия по этому инструменту принудительно завершена. Нельзя ставить и удалять заявки по этому инструменту. 4 Сессия по этому инструменту завершена по времени. Нельзя ставить и удалять заявки по этому инструменту. 5 Приостановка торгов по этому инструменту. Нельзя ставить заявки, но можно удалять по этому инструменту
Ув. техподдержка, подскажите, как называется этот параметр в QUIK? Также подскажите, как называются параметры, которые транслируются в потоке FORTS_REFDATA_REPL таблица session
begin Время начала end Время окончания inter_cl_begin Время начала промежуточного клиринга inter_cl_end Время окончания промежуточного клиринга inter_cl_state Состояние промежуточного клиринга eve_on Признак того, что дополнительная вечерняя сессия будет проводиться eve_begin Время начала дополнительной вечерней сессии eve_end Время окончания дополнительной вечерней сессии state Состояние сессии
Цитата
Поле state может принимать следующие значения: 0 Сессия назначена. Нельзя ставить заявки, но можно удалять. 1 Сессия идет. Можно ставить и удалять заявки. 2 Приостановка торгов по всем инструментам. Нельзя ставить заявки, но можно удалять. 3 Сессия принудительно завершена. Нельзя ставить и удалять заявки. 4 Сессия завершена по времени. Нельзя ставить и удалять заявки.
Владимир, дружочек, если за 40 лет горе-программист ничему не научился, то это о чём-то говорит. Вряд ли кто-то уже сможет вбить знания в его тупую башку. Пациент безнадёжен...
Владимир, замечательно. Теперь если перейти от обыденных примеров к программированию, то тоже самое, какой тип вы в переменную (или ячейку таблицы) положите, тот потом оттуда и достанете. Для вашего случая
Владимир написал: Но я ПОНЯТИЯ НЕ ИМЕЮ по каким соображениям она присваивает данные и передаёт аргументы какого-то типа.
Значит, мало практики ещё. Это вы ещё с вещественными числами мало работали. Когда обнаружите, что 0.1 + 0.2 ~= 0.3 ваш мир перевернётся. Не представляю, как вы это переживёте, если уже на типах вы сыпитесь.
s_mike@rambler.ru написал: Сервер посылает информацию вам с вполне определённой последовательностью в соответствии со своим внутренним алгоритмом.
Но информация делится на пакеты. Пакеты эти уезжают от сервера в сеть и дальше он ими не управляет. Поэтому первый пакет может уехать к вам через Камчатку, а второй через Химки. И вы запросто можете получить второй пакет раньше первого.
Добрый день.
Допустим, произошли две сделки: #1 и #2. Возможно ли, что в результате таких "путешествий" пакет со сделкой #2 приехал к клиенту раньше, чем пакет #1 или это не более, чем домыслы?
В первом приближении ГО можно рассчитать по формуле: Покупка: ГО = ГО_покупателя - (РЦ - Цена_сделки) * Стоимость_шага_цены / Мин_шаг_цены * (1 + R / 100) Продажа: ГО = ГО_продавца + (РЦ - Цена_сделки) * Стоимость_шага_цены / Мин_шаг_цены * (1 + R / 100) где R - радиус валютного курса Для контрактов, шаг цены которых рассчитывается в рублях, R = 0
Судя по значениям, QUIK рассчитывает R для всех контрактов, в т.ч. рублёвых, по формуле, приведённой в сообщении #4. Не знаю, как определить R, но после релиза Спектры 6.0 он точно не рассчитывается по той формуле. Например, на сегодня для USD R = 6% Если считать по формуле для RIU0 получается 5,44%, для BRQ0 -19,7%. Короче, невпопад.
При цене сделки, близкой к верхнему или нижнему лимиту, ГО считается как-то иначе. Как именно, не разобрался ( В методике расчёта ГО не нашёл, плохо искал наверное.
Egor Zaytsev, то ли я плохой рассказчик, то ли вы... плохой читатель. Попробуем ещё раз. Открываем Руководство пользователя QUIK и читаем:
Цитата
Ввод заявок на Срочном рынке FORTS «Объем ГО» – совокупный размер ГО, который блокируется по заявке исходя из количества контрактов и настроек брокера.
Проверяем, ставим заявку и сравниваем со значением Тек. чист. поз. из таб. Ограничения по клиентским счетам. В сообщении #17 привёл скрины с реального счёта, не демо. Даже обвёл красненьким, на что обратить внимание. Видите, циферки не совпадают?
в таблице fut_sess_contents есть поле base_contract_code, информацию по которому можно получить из таблицы fut_vcb. Обе таблицы транслируются в потоке FORTS_FUTINFO_REPL
Цитата
Из таблицы fut_sess_contents получаем base_contract_code = GAZR Далее из таблицы fut_vcb для GAZR получаем SECCODE = GAZP
Т.е., в QUIK нам нужна таблица fut_vcb (таблица содержит справочник базовых контрактов для инструментов). Возможно добавить?
Egor Zaytsev, какая ещё информация необходима, чтобы начать разбор проблемы "QUIK неверно рассчитывает Объем ГО заявки и, => максимальное возможное количество лотов в заявке" ?
Egor Zaytsev написал: В форме ввода заявки ГО рассчитывается, оно не "едет" напрямую из таблицы текущих торгов в форму ввода заявки. Считаете по формуле.
У вас сходится ГО, рассчитанное по этой формуле, с тем, что считает квик?
Проще зайти на страницу Основные параметры срочного контракта, взять оттуда ISIN БА и по нему найти код акции в таблице securities. Или можно составить статическую таблицу соответствий OPTIONBASE кодам акций в скрипте. Но вопрос был
Цитата
Незнайка написал: Как из квика получить код этой бумаги