Есть кейс: ведется торговля на счетах нескольких клиентов. Нужно быстро в три клика снять заявки по одному инструменту одного клиента, не затрагивая другие инструменты и клиентов. Daniil Pozdnyakov, вы отказываетесь регистрировать?
Надо делать так, как надо. А как не надо - делать не надо.
Roman Azarov написал: согласовывать между собой описание и пример (чтобы они относились к одной проблеме)
Описание:
Цитата
Ivan Smirnov написал: при этом почему-то активировалось окно экземпляра Квик другого брокера
Читай: активировалось окно другого экземпляра квик, не того, который запускали.
Цитата
Старатель написал: а вот это надо исправлять: если QUIK уже запущен должно активироваться то окно, которое соответствует запускаемому экзешнику, а не все подряд.
Откройте несколько квиков. Сверните все окна. После запустите info.exe любого из запущенных квиков. В идеале должно было бы развернуться только одно окно. А как на самом деле? Посчитайте сколько окон развернулось.
Что не так?
Надо делать так, как надо. А как не надо - делать не надо.
Откройте несколько квиков. Сверните все окна. После запустите info.exe любого из запущенных квиков. В идеале должно было бы развернуться только одно окно. А как на самом деле? Посчитайте сколько окон развернулось.
Надо делать так, как надо. А как не надо - делать не надо.
Подглядел в другом терминале: с зажатым контролом скрол вниз уменьшает масштаб, скрол вверх - увеличивает. При этом, масштабирование происходит таким образом, что свеча, над которой находится курсор остаётся на месте.
Надо делать так, как надо. А как не надо - делать не надо.
Ivan Smirnov написал: при этом почему-то активировалось окно экземпляра Квик другого брокера
Roman Azarov, а вот это надо исправлять: если QUIK уже запущен должно активироваться то окно, которое соответствует запускаемому экзешнику, а не все подряд.
Надо делать так, как надо. А как не надо - делать не надо.
Daniil Pozdnyakov написал: согласно документации на терминал, снятие заявок из окна котировок происходит независимо от значения торгового счёта в панели торговли.
1. Исправить ошибку, описанную выше. Должны сниматься только заявки по выбранному торговому счёту и коду клиента (если указаны). Если код клиента не указан, то снимаются все заявки для указанного торгового счёта. Если не указан торговый счёт, то снимаются заявки по всем торговым счетам.
2. При открытии формы ввода заявки (стоп-заявки) из стакана (двойной клик, из контекстного меню, F2 и пр.) в поля "Торговый счет" и "Код клиента" должен автоматически подставляться тот торговый счет (и код клиента, если указан), которые выбраны в панели торговли.
Надо делать так, как надо. А как не надо - делать не надо.
Подтверждаю, есть такая проблема. Тоже на одной диаграмме было два инструмента и несколько индикаторов. После замены инструментов через контекстное меню "Заменить инструмент" на одном из графиков стали отображаться сделки с другого инструмента. Подробности, чё в какой последовательности делал не выпытывайте - не вспомню. Перезаказ данных не делал. Помогло создание диаграммы с нуля. Значит, с сервера идут котировки правильные, проблема локальная.
1. Исправить ошибку, описанную выше. Должны сниматься только заявки по выбранному торговому счёту.
2. При открытии формы ввода заявки (стоп-заявки) из стакана (двойной клик, из контекстного меню, F2 и пр.) в поля "Торговый счет" и "Код клиента" должен автоматически подставляться тот торговый счет (и код клиента, если указан), которые выбраны в панели торговли.
Надо делать так, как надо. А как не надо - делать не надо.
Открыто два стакана по одному инструменту. В каждом стакане включена панель торговли. В ней выбран конкретный торговый счёт. Они разные в каждом стакане. Как сделать, чтобы при открытии формы ввода заявки из стакана (двойной клик) в поле "Торговый счет" автоматически подставлялся тот торговый счет, который выбран в панели торговли?
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov написал: проблема - просьба подробно её описать
По-русски же написали в первом сообщении:
Цитата
Елисей Куликовский написал: Уровень 77 100 суммарного объема, как я понимаю, расти не должен, поскольку заявок по нему нет, но уровень вырастает. На уровне 77 105 должен быть рост на 12 заявок, но его нет, но есть "ступенька" на следующем, 77 106, уровне. Далее, на уровне 77 111 заявок нет, но есть значительный рост, похоже, что от вышестоящего уровня 77 113.
Я не знаю, как ещё объяснить. Ещё одну картинку нарисовать? Вот так в квике: А должно быть так:
Надо делать так, как надо. А как не надо - делать не надо.
TGB написал: если у пользователя запущено несколько скриптов, то пока основной поток QUIK выполняется в одном из скриптов, он перестает обслуживать другие скрипты пользователя (в том числе, и созданные им таблицы QUIK)
Таблицы обслуживаются только в одном основном потоке. Доступ к данным - тоже только в одном потоке. Так что все ваши "несколько скриптов" дружно встают в очередь, как только им понадобится что-то вывести в таблицу. И включаются в общую конкурсную массу вмести с другими таблицами и графиками.
Цитата
TGB написал: перенос коротких задач пользователя в колбеки делает скрипт пользователя многопоточным, то есть, при этом пользователю нужно следить за тем, нет ли в его скрипте проблем синхронизации
В данной ветке, наоборот, обсуждение, переноса задачи, выполняемой по таймеру, в основной поток, чтобы не заморачиваться синхронизацией:
Цитата
_sk_ написал: удобно иметь возможность инициировать какой-то коллбэк из потока main, не надо думать про синхронизацию
Надо делать так, как надо. А как не надо - делать не надо.
Кто сказал "нагружать"? Задачи на 0.1-2 мс, без фанатизма. Я даже не понимаю тех, кто в стремлении "разгрузить" основной поток перекидывает простейшие задачи (с временем выполнения менее 2 мс) из колбеков в main (что опять же не бесплатно в плане нагрузки), создавая километровые очереди и забывая об общей производительности.
Надо делать так, как надо. А как не надо - делать не надо.
Anton написал: Когда надо колбек выполнить в квиковском потоке, меняем выделение на вторую строку и вуаля, тут же отрабатывает колбек, чего мы и хотели.
Кста, main будет ждать завершения колбека, поэтому результат его работы сразу можно использовать в main.
Скрытый текст
Код
local run = true
local tid
function OnStop()
run = nil
local t = tid
tid = nil
if t then DestroyTable(t) end
end
local result
local function RunAsCallback()
SetSelectedRow(tid, 2)
local r = result
result = nil
return r
end
function main()
tid = AllocTable()
AddColumn(tid, 1, '1', true, QTABLE_INT_TYPE, 1)
CreateWindow(tid)
InsertRow(tid, -1)
InsertRow(tid, -1)
SetWindowPos(tid, 0, 0, -1000, -1000)
SetSelectedRow(tid, 1)
SetTableNotificationCallback(tid, function(t, m, w)
if QTABLE_SELCHANGED == m then
if w == 2 then
SetSelectedRow(tid, 1)
result = os.date()
end
end
end)
while run do
local date = RunAsCallback()
message(date)
sleep(1000)
end
OnStop()
end
Хотелось бы что-то типа такого "из коробки" без необходимости дёргать GUI.
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback (tid, function (t, m, w, l)
if QTABLE_SELCHANGED == m then
if 2 == w then
SetSelectedRow (t, 1)
message ( '!' )
end
end
end)
Допустимо ли использование SetSelectedRow внутри колбека QTABLE_SELCHANGED, с учётом, что SetSelectedRow - синхронное сообщение?
Надо делать так, как надо. А как не надо - делать не надо.
Daniil Pozdnyakov написал: Концептуальная разница в том, что, выбирая "Заменить заявку" (CTRL+A), Вы сможете поменять абсолютно все поля заявки. То есть по сути, выбирая данный способ замены, Вы убираете одну заявку и выставляете новую. Но выбирая "Замена заявки средствами ТС", Вы сможете изменить в заявке только те поля, которые были найдены ТС в теле транзакции.
Это словоблудие, а не "концептуальная разница".
Концептуальная разница в том, что "Заменить заявку" (CTRL+A) использует две биржевые транзакции: Удаление заявки, Добавление заявки. "Замена заявки средствами ТС", судя по названию, использует одну биржевую заявку: Изменение заявок. Поправьте меня, если ошибаюсь.
Цитата
Старатель написал: Замена заявок средствами ТС вообще доступна для срочной секции МБ и в частности для класса FORTS SPBFUT?
Надо делать так, как надо. А как не надо - делать не надо.
Daniil Pozdnyakov, Замена заявок средствами ТС вообще доступна для срочной секции МБ и в частности для класса FORTS? Потому что в шлюзе SPECTRA Plaza-2 для замены заявки могут использоваться только два варианта: 1) DelOrder + AddOrder или 2) MoveOrder. Это та самая транзакция "Переставить заявки" в Квике. Но вы пишите, что
Цитата
Daniil Pozdnyakov написал: "Переставить заявки" и "замена заявки средствами ТС" отличаются по функционалу.
Так как на самом деле?
Надо делать так, как надо. А как не надо - делать не надо.
Старатель написал: Одной из вероятных причин может быть наличие ещё одного подписанта на эту бумагу (другой скрипт, тиковый график). Т.е., после ручного удаления бумаги из списка, чтобы повторно заказать тики скриптом, нужно сначала закрыть всех подписантов на эту бумагу.
Открыть тиковый график или запустить скрипт. Удалить бумагу из списка. Не закрывая график и не останавливая скрипт, запустить второй скрипт, заказывающий тики по той же бумаге. Убедиться, что бумага не добавляется. QUIK 9.2
Надо делать так, как надо. А как не надо - делать не надо.
Самая правильная мысль в этой ветке, учитывая, что никому это не надо, даже самому разработчику. На самом деле, в большинстве случаев, баги находятся не специально, а в процессе работы. Но часто приходится повозиться, чтобы локализовать проблему.
Надо делать так, как надо. А как не надо - делать не надо.
Daniil Pozdnyakov написал: Касательно быстрого доступа к транзакции. "Переставить заявки" и "замена заявки средствами ТС" отличаются по функционалу. Кардинальное отличие в том, что, используя "Переставить заявки", Вы изменяете две заявки в зависимости от значения, выбранного в поле "Режим". При замене заявки средствами ТС происходит поиск активной заявки, и после нахождения откроется окно ввода заявки, после редактирования которого старая заявка закрывается, и взамен неё выставляется новая с отредактированными полями.
1. В чём отличие от "Заменить заявку" (Ctrl+A) ? 2.
Цитата
Старатель написал: это какая-то другая транзакция, не доступная из "Выполнить транзакцию"?
Надо делать так, как надо. А как не надо - делать не надо.
Коллеги, у кого есть возможность проверить в 9-й версии отпишите о результатах одновременной работы двух скриптов:
Скрипт 1
Скрытый текст
Код
-- Здесь указываем значения для своего счета
-- и код бумаги, позиция по которой имеется в портфеле, нулевая позиция тоже подойдёт
FIRM_ID =
ACCOUNT =
CLIENT_CODE =
CLASS_CODE =
SEC_CODE =
LIMIT_KIND =
local run = true
function OnStop()
run = nil
end
function main()
local mLots
while run do
local tblTotalLot = getDepoEx(FIRM_ID, CLIENT_CODE, SEC_CODE, ACCOUNT, LIMIT_KIND)
if type(tblTotalLot) == "table" then
local TotalLots = tblTotalLot.currentbal
if mLots ~= TotalLots then
message(SEC_CODE .. ": mLots = " .. tostring(mLots) .. "\n" .. tblTotalLot.sec_code .. ": currentbal = " .. tostring(TotalLots), 3)
mLots = TotalLots
end
else
message("getDepoEx error", 3)
end
sleep(1)
end
end
Скрипт 3
Скрытый текст
Код
-- Здесь также указываем значения для своего счета
-- Можно указать ту же бумагу, что и в первом скрипте или другую бумагу
FIRM_ID =
ACCOUNT =
CLIENT_CODE =
CLASS_CODE =
SEC_CODE =
local run = true
function OnStop()
run = nil
end
function main()
while run do
--getBuySellInfoEx(FIRM_ID, CLIENT_CODE, CLASS_CODE, SEC_CODE, 0)
CalcBuySell(CLASS_CODE, SEC_CODE, CLIENT_CODE, ACCOUNT, 0, true, true)
sleep(1)
end
end
У меня довольно часто позиция не определяется и вываливается ошибка "getDepoEx error" в версиях 9.1.1 - 9.2.1 (Lua 5.3, 5.4)
Надо делать так, как надо. А как не надо - делать не надо.
Daniil Pozdnyakov написал: Касательно добавления быстрого доступа к транзакции. Безусловно, данный функционал не доступен в Демо-доступе.
Об этом я и написал. Замена заявки средствами ТС для фьючерсов (класс SPBFUT) вызывает транзакцию "Переставить заявки", которая доступна из из меню "Выполнить транзакцию"? Или это какая-то другая транзакция, не доступная из "Выполнить транзакцию"?
Цитата
Daniil Pozdnyakov написал: Касательно неправильного отображения объёма на последней свече предыдущего дня. Данная проблема, которая была обнаружена в прошлых версиях терминала, была нами проверена на версии Quik 9.1. Она не воспроизвелась, объём последней свечи предыдущего дня отображается корректно
Daniil Pozdnyakov написал: Перепроверили работу скриптов, на которые Вы ссылаетесь, уже с функцией CalcBuySell(). Они исправно выводят правильные данные.
swerg, когда требует ситуация, я публикую и скрипты и скрины и инструкцию. Но не нужно злоупотреблять и писать потом "пришли архив, запили видео". Блин, чё я перед вами "оправдываюсь". Вы сами хоть что-то полезного сделали на форуме или только можете всем хамить, призывая при этом к миру?
Надо делать так, как надо. А как не надо - делать не надо.
swerg написал: Да, я бы хотел пробудить вас к большему конструктив.
По поводу конструктива, раз уж вы напрашиваетесь. В 9-й версии анонсировали возможность замены заявки одной транзакцией вместо двух, если такая транзакция поддерживается ТС. Месяц назад я сообщил о том, что эта функция не работает. Да, вот такой лаконичный баг-репорт. На мой взгляд, этого короткого сообщения более, чем достаточно, чтобы проверить работоспособность новой функции. Спустя месяц, поддержка застряла на выяснении есть ли такое на Демо-доступе (блин, а самому проверить не быстрее было бы) и наименовании класса (как будто на демке, кроме SPBFUT есть другие классы с транзакцией замены заявки).
Я бы на месте поддержки открыл таблицу заявок, поставил бы заявку и вызвал контекстное меню, где и должен быть этот функционал. Что собственно я и сделал, прочитав анонс новой функции. swerg, как вы считаете, сколько времени на это нужно? И считаете ли вы, что описание "не работает" в данном случае полностью описывает суть проблемы или нужно было запилить короткометражный фильм?
Надо делать так, как надо. А как не надо - делать не надо.
Было бы не плохо, научиться читать ветку, чтобы потом не задавать тупых вопросов про "список удаления". Глядишь, и конструктив и польза появятся. Впрочем, я уже повторяюсь.
Старатель написал: невозможно заказать сделки по этой бумаге через скрипт
Одной из вероятных причин может быть наличие ещё одного подписанта на эту бумагу (другой скрипт, тиковый график). Т.е., после ручного удаления бумаги из списка, чтобы повторно заказать тики скриптом, нужно сначала закрыть всех подписантов на эту бумагу. Может, ещё есть какие-то зависимости, не знаю...
Надо делать так, как надо. А как не надо - делать не надо.
swerg, к написанному раннее для вас добавить нечего. Но судя по вашим сообщениям, вы заходите на форум, чтобы просто отметиться в последних активных ветках.
Надо делать так, как надо. А как не надо - делать не надо.