Показывать коды классов в настройках списков заказа данных, Заказ данных -> Поток котировок, Поток обезличенных сделок
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.04.2020 13:42:10
Отображать код класса в указанных окнах
Надо делать так, как надо. А как не надо - делать не надо.
CalcBuySell, Долгая работа функции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
05.03.2020 13:32:25
Среднее время выполнения функции CalcBuySell 6-7 мс. Как-то долго. Может, можно что-то подкрутить в настройках?
Надо делать так, как надо. А как не надо - делать не надо.
Перестают работать события SetTableNotificationCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
24.12.2019 12:54:43
Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY. Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Надо делать так, как надо. А как не надо - делать не надо.
Контекстное меню в Lua-таблицах
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
05.12.2019 19:55:09
QUIK 8.2.0.78 При клике правой кнопкой мыши в Lua-таблице появляется контекстное меню. Как убрать?
Надо делать так, как надо. А как не надо - делать не надо.
Метки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.10.2019 11:41:58
Где теперь устанавливается прозрачность метки и фона?
Надо делать так, как надо. А как не надо - делать не надо.
table.ssort, зависает терминал при выполнении table.ssort в main
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.10.2019 11:38:24
Демонстрационный скрипт:
Код
local AllTrades = {}
function main()
ID = AllocTable()
AddColumn(ID, 1, '1', true, QTABLE_INT_TYPE, 20)
CreateWindow(ID)
row = InsertRow(ID, -1)
while not stoped do
if #AllTrades ~= 0 then
local trade_num = table.sremove(AllTrades, 1).trade_num
table.ssort({0, 0}, function()
SetCell(ID, row, 1, ''..trade_num)
return true
end)
else sleep(1) end
end
end
function OnAllTrade(alltrade)
table.sinsert(AllTrades, alltrade)
end
Через непродолжительное время терминал вешается. Зависание происходит при выполнении инструкции SetCell в main.
Надо делать так, как надо. А как не надо - делать не надо.
Клиентский портфель, Настройки обновления
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.10.2019 14:47:39
Цитата
Система / Настройки / Основные настройки… раздел «Торговля» / «Клиентский портфель»
Влияют ли эти настройки на значения, получаемые из Lua, например, getPortfolioInfo, getPortfolioInfoEx и др.?
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder, снятие заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.09.2019 11:57:13
Скрипт отправляет транзакцию на снятие заявки. Допустим, OnOrder получен раньше или OnTransReply вообще не пришел. Есть возможность установить инициатора снятия: сам скрипт, пользователь (вручную) или, может, другой бот?
Надо делать так, как надо. А как не надо - делать не надо.
Не завершается main после остановки скрипта
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.08.2019 11:35:29
Код
local run = true
local function f()
for i = 1, 2000000 do
local a = 1 + 2 * 3 / 4
end
return run
end
function main()
local t_id = AllocTable()
AddColumn(t_id, 1, "", true, QTABLE_DOUBLE_TYPE, 20)
CreateWindow(t_id)
InsertRow(t_id, -1)
while run do
local r = f()
SetCell(t_id, 1, 1, tostring(r))
sleep(1)
end
message('Exit')
end
function OnStop()
run = nil
message('OnStop')
return 5000
end
Почему после остановки скрипта main не завершается (чаще всего) должным образом?
Надо делать так, как надо. А как не надо - делать не надо.
Обезличенные сделки, Слетают настройки списков инструментов для заказа обезличенных сделок
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
12.07.2019 15:09:17
Старая проблема. Настроен список инструментов для получения информации по обезличенным сделкам. К примеру, получаем сделки по классу FORTS, фильтр инструментов не включен. Открываем новую таблицу ТВС и указываем только один инструмент из класса FORTS для вывода в эту таблицу. В результате настройки сбрасываются, сделки по остальным инструментам прекращают поступать.
Надо исправить: при открытии новой таблицы список инструментов не должен изменяться в сторону уменьшения.
Надо делать так, как надо. А как не надо - делать не надо.
Показывать последнее значение, точность отображения
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.12.2018 00:12:48
Где настройка точности отображения последнего значения на графике?
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
info.exe 7.14.1.7 StratVolat.dll 2.1.61.1 Неверно отображается прибыль при цене БА, равной страйку, на момент экспирации. И как не меняй масштаб, добиться шага цены 100, чтобы страйк попал на одно из делений на шкале, невозможно.
Надо делать так, как надо. А как не надо - делать не надо.
Различаются графики в QUIK и экспорт с Финама
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.06.2017 15:16:12
У кого-нибудь есть свежая история торгов непосредственно с биржи? А то не совпадают данные из QUIK с
Скрытый текст
Как видно на скриншоте идёт смещение на одну минуту. И такая беда по многим бумагам, которые проверил.
Надо делать так, как надо. А как не надо - делать не надо.
QUIK не может установить соединение с сервером.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.06.2017 11:21:07
У меня одного если QUIK работает несколько дней, то иногда после перезагрузки сервера, клиент не может установить соединение с сервером?
Надо делать так, как надо. А как не надо - делать не надо.
История торгов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.06.2017 11:12:53
1. Каким образом происходит обновление графиков при смене (идентификатора) сессии? Путём дозаписи в конец? 2. Если у брокера произошёл сбой, и часть графика за какой-то период не отображается, а затем он положил на сервер корректные данные, как получить корректный график, не потеряв при этом накопленную историю свыше 3000 свечей, которой нет на сервере?
Надо делать так, как надо. А как не надо - делать не надо.
CalcBuySell()
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.05.2017 22:35:28
Функция CalcBuySell() возвращает значение в зависимости от установленной настройки "Исходя только из собственных средств", т.е. ведёт себя непредсказуемо. Предлагаю добавить в функцию опциональный параметр, аналогичный этой настройке.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ обезличенных сделок
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.05.2017 10:51:21
В меню <Система / Заказ данных / Поток обезличенных сделок...> выбран класс целиком. Если теперь создать Таблицу обезличенных сделок и добавить в неё или добавить в раннее открытую таблицу одну бумагу из выбранного класса, то в <Поток обезличенных сделок...> установится фильтр на заказ только одной бумаги из всего класса. Можно сделать так, чтобы открытие или редактирование ТОС не сбрасывало инструменты, заказанные через <Поток обезличенных сделок...>?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.11.0.88, Не подставляется "Кол-во лотов" по умолчанию
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.05.2017 23:40:23
После обновления до 7.11.0.88 игнорируется значение параметра "Кол-во лотов" на вкладке "Торговля"
Надо делать так, как надо. А как не надо - делать не надо.
Падение QUIK при DestroyTable
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.05.2017 13:36:37
Код
run, t_id = true
function main()
t_id = AllocTable()
CreateWindow(t_id)
while run do
sleep(1) -- можно sleep убрать, чтоб наверняка
end
end
function OnStop()
run = nil
DestroyTable(t_id)
end
function OnDisconnected()
OnStop()
end
При разрыве соединения в темной теме QUIK падает. Как временное решение проблемы - поставить небольшую задержку в конце main()
Надо делать так, как надо. А как не надо - делать не надо.
Пропадает глобальная таблица _G
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
27.04.2017 22:44:24
QUIK 7.10.0.76. Иногда при подключении к серверу скрипт падает с ошибкой
Цитата
attempt to call global 'W' (a nil value)
W - это функция, которая крутится в цикле main. Она никак не может быть nil. Вот фрагмент кода:
Код
function OnConnected()
Sort = true
end
function W()
return nil
end
function main()
...
while run do
if Sort then
table.sort({0, 1}) -- сортировка никак не связана с функцией W, но без сортировки проблема не воспроизводится
Sort = nil
elseif not W() then -- тут возникает ошибка
else sleep(100) end
end
end
Целый день убил на поиск проблемы, пока не заглянул в глобальную таблицу _G. А её и нет: когда изменил код так:
Код
function main()
while run do
if Sort then
table.sort({0, 1})
Sort = nil
else
if not _G then message('Ahtung! Not _G', 3)
elseif not W() then
else sleep(100) end
end
end
end
то при подключении скрипт стал однократно выдавать сообщение об отсутствии _G (т.е. впоследствии _G снова обнаруживается) или падать с ошибкой
Цитата
attempt to call global 'W' (a table value) (неожиданно!)
Скрипт использует только функции из qlua.dll, не модифицирует функцию W, и не работает напрямую с глобальной таблицей.
Соответственно, вопрос разработчикам: есть ли в QLua какие-либо механизмы, способные так повлиять на работу?
Надо делать так, как надо. А как не надо - делать не надо.
Не открывается график
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.03.2017 14:00:17
Несмотря на то, что инструменты сохраняются в sec.dat и таблице securities, графики - в кэше archive, по инструментам с истёкшим сроком не открываются графики. Зачем это ограничение?
Надо делать так, как надо. А как не надо - делать не надо.
Гарантийное обеспечение, В руководстве ошибка
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.03.2017 12:02:16
Цитата
Значения параметров функций
54 BUYDEPO NUMERIC Гарантийное обеспечение продавца 55 SELLDEPO NUMERIC Гарантийное обеспечение покупателя
Надо делать так, как надо. А как не надо - делать не надо.
Вопрос к разработчикам: Вы можете предложить надёжный способ убедиться, что getParamEx даёт действительно последнюю цену инструмента, а не её отсутствие?
Надо делать так, как надо. А как не надо - делать не надо.
Самопроизвольная остановка Lua-скриптов, при замене инструментов с истекающим сроком обращения
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
28.02.2017 09:12:15
При замене инструментов с истекающим сроком обращения останавливаются Lua-скрипты. Почему так происходит?
Надо делать так, как надо. А как не надо - делать не надо.
OnStop
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.02.2017 01:31:47
Это верно, что во время работы колбэка OnStop работа потока main приостанавливается? Кроме того, скрипту даётся время на завершение работы, которое отсчитывается не по окончании OnStop (как это показано на вашей схеме), а от начала работы функции OnStop. Т.о., схема должна выглядеть так:
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
getDataSourceInfo
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
27.01.2017 17:34:02
Предлагаю модифицировать функцию getDataSourceInfo: добавить необязательный параметр: STRING Tag и сделать функцию доступной как в индикаторах так и в обычных скриптах. При задании параметра функция будет возвращать параметры графика с идентификатором Tag.
Надо делать так, как надо. А как не надо - делать не надо.
ParamRequest и CreateDataSource не заказывают получение параметров Таблицы текущих торгов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
21.01.2017 12:16:40
Если в настройках получения данных стоит галка "Исходя из настроек открытых пользователем таблиц", то ни ParamRequest ни CreateDataSource не могут заказать получение параметров Таблицы текущих торгов с сервера. При этом они радостно сигнализируют об успехе. Нужно изменить такое поведение.
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
15.12.2016 23:52:42
Код
function func(v)
return v * v
end
s = {
f = function(v)
local r = s.r
if not r then
r = func(v)
s.r = r
end
return r
end
}
print(tostring(s.f(3)))
print(tostring(s.f(3)))
Функция s.f() запоминает вычисленное значение и при повторном обращении возвращает раннее вычисленное значение. Можно ли описать её через setmetatable? PS: возвращать она должна раннее сохранённое значение, независимо от переданного аргумента при повторном вызове.
Надо делать так, как надо. А как не надо - делать не надо.
AddColumn
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
12.12.2016 12:51:59
Цитата
width – ширина в условных единицах.
Что это за условные единицы такие? Они привязаны к шрифту? Если да, то каким образом?
Надо делать так, как надо. А как не надо - делать не надо.
Сделки с вечерней сессии FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.12.2016 18:17:22
Здравствуйте.
Как в коде определить, относится ли вечерняя сделка к текущей торговой сессии?
Надо делать так, как надо. А как не надо - делать не надо.
Редактирование настроек при добавлении индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.12.2016 10:14:03
Куда пропало окно с настройками при первичном добавлении индикатора?
Надо делать так, как надо. А как не надо - делать не надо.
getFuturesHolding()
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
28.10.2016 23:48:39
Скрытый текст
Цитата
getFuturesHolding(STRING form_id, STRING acc_id, STRING sec_code, NUMBER pos_type)
В справке неплохо бы добавить описание параметров. Ну или хотя бы привести имена параметров к общеузнаваемым.
Может ли в таблице "futures_client_holding" с одним набором firmid, trdaccid, sec_code быть несколько строк с разными типами лимита type?
Надо делать так, как надо. А как не надо - делать не надо.
Рассчитать среднюю стоимость позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
27.10.2016 19:39:32
Если рассчитывать среднюю стоимость позиции по прошедшим сделкам, возникает вопрос: Может ли колбэк по сделке прийти позже колбэка OnDepoLimit или OnFuturesClientHolding?
Надо делать так, как надо. А как не надо - делать не надо.
Почему скрипты в QUIK выполняются дольше
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.10.2016 13:12:29
В среде QUIK скрипты выполняются в несколько раз дольше, чем в командной строке. Вот такой скрипт
Код
function main()
print = message or print
local abs = math.abs
local t = os.clock()
for i = 1, 100000000 do abs(-1234.56789) end
t = os.clock() - t
print(string.format('%0.1f', t))
end
if not message then main() end
в командной строке выполняется 3.5 сек, в QUIK - 8.8 сек. В 2.5 раза дольше! Почему так?
PS: ЦП: 2 ядра, 4 логических процессора.
Надо делать так, как надо. А как не надо - делать не надо.
Копирование значения ячейки в таблице
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.09.2016 19:04:37
Добрый день. Добавьте пункт меню "Копировать ячейку" (для копирования кодов бумаг, ISIN и пр.)
Надо делать так, как надо. А как не надо - делать не надо.
Фильтр по кодам клиентов, Доступ к фильтру из QLua
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.05.2016 12:53:15
Добрый день. Предлагаю дать доступ на чтение к фильтру по кодам клиентов из QLua и, соответственно, добавить колбэк при изменении этого поля. Будет полезно для брокеров и управляющих.
Надо делать так, как надо. А как не надо - делать не надо.
SearchItems
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.03.2016 23:10:26
Добавьте в функцию параметр, задающий количество совпадений, после которых прекращать поиск. А то если нужно циклически пройтись по таблице для поиска всего одного значения, то занимает слишком много времени.
Надо делать так, как надо. А как не надо - делать не надо.
OnFuturesClientHolding, session_status
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.02.2016 19:54:57
Добрый день.
Подскажите, по какой причине во время основной сессии (в 14:16) параметр session_status может иметь значение 3?
Надо делать так, как надо. А как не надо - делать не надо.
f_cb = function(t_id, msg, par1, par2)
if msg == QTABLE_LBUTTONDBLCLK then
message("QTABLE_LBUTTONDBLCLK")
elseif msg == QTABLE_LBUTTONUP then
message("QTABLE_LBUTTONUP")
elseif msg == QTABLE_LBUTTONDOWN then
message("QTABLE_LBUTTONDOWN")
end
end
SetTableNotificationCallback(t_id, f_cb)
Есть простой способ отличить двойной клик от одинарного? А то срабатывают сразу все события:
Надо делать так, как надо. А как не надо - делать не надо.
CHANGETIME
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
15.02.2016 14:45:57
Из таблицы "Список возможных идентификаторов параметров":
Цитата
56 CHANGETIME STRING Время последнего изменения
Время последнего изменения чего? Чьё время сюда подставляется?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK v.7.1.0.381, Баги
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.02.2016 01:52:15
Вот такой код:
Код
local t_id = AllocTable()
for i = 1, 12 do AddColumn(t_id, i, "", true, QTABLE_STRING_TYPE, 20) end
CreateWindow(t_id)
for i = 1, 5 do InsertRow(t_id, -1) end
SetWindowPos(t_id, 0, 0, 1270, 120)
Появляется скрол: хотя высоты хватает:
Надо делать так, как надо. А как не надо - делать не надо.
OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.02.2016 19:57:09
Здравствуйте. Добавьте, пожалуйста, опциональную настройку, запрещающую создавать очередь событий OnQuote. Т.е, чтобы с сервера всегда поступало только последнее событие, а не вся очередь. (Такой эффект можно наблюдать в моменты высокой активности на рынке, когда стакан сначала замирает на некоторое время, а затем ускоренно "прокручивает" все пропущенные котировки. В реал-тайм торговле в этом нет особого смысла.)
Надо делать так, как надо. А как не надо - делать не надо.
Выделять объём на тиковом графике цветом в зависимости от направления сделки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.01.2016 20:12:42
Здравствуйте.
Сделайте возможным на тиковом графике выделять разным цветом объёмы покупок и продаж.
Надо делать так, как надо. А как не надо - делать не надо.
OnTransReply, status
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
24.01.2016 10:12:38
Здравствуйте. В каких ситуациях может прийти OnTransReply со статусом 0 или 1? Какие возможные значения может принимать status при выставлении стоп-заявок?
Надо делать так, как надо. А как не надо - делать не надо.
getQuoteLevel2, Приведение данных к корректному виду
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.01.2016 16:34:56
Здравствуйте.
Измените QLua-функцию getQuoteLevel2 таким образом, чтобы она возвращала значения типа number вместо строковых. (Я не могу придумать ни одного варианта, когда было бы необходимо (или даже возможно) использовать данные того формата, что сейчас возвращает функция... Даже в sendTransaction без форматирования эти данные не подойдут.) Конечно, всё форматирование можно написать в своей программе, но форматирование в число занимает гораздо больше времени, чем в C-коде внутри самого терминала. Особенно, если нужно обработать несколько строк бидов и офферов. Это не дело.
Далее, при отсутствии заявок на покупку/продажу "таблицы" bid/offer имеют строковый тип. Логичнее было бы возвращать либо пустую таблицу {}, либо nil.
Надо делать так, как надо. А как не надо - делать не надо.
Изменение/перемещение стоп-заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.01.2016 13:18:03
В QUIK есть условные заявки типа "Со связ. заявкой". При частичном исполнении связанной заявки объем стоп-заявки уменьшается до величины неисполненного остатка лимитированной заявки. Предлагаю на основе данного функционала добавить функцию изменения некоторых параметров (объёма, цены...) любых стоп-заявок без необходимости снятия/выставления новой заявки, т.е. в таблице стоп-заявок это будет та же самая заявка. И также добавление нового вида ("ACTION") транзакции "MOVE_STOP_ORDER", при выполнении которой номер стоп-заявки остаётся прежним.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица транзакций
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
06.01.2016 10:51:09
Таблица транзакций очищается при переключении на другой сервер. Надо бы исправить.
Надо делать так, как надо. А как не надо - делать не надо.
Тейк-профит и стоп-лимит
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
24.12.2015 11:03:12
При наведении курсором на линию условной заявки на графике всплывает подсказка с её параметрами. На обеих линиях отображается параметр "Стоп-цена". Сделайте на тейк-профит линии название параметра "Тейк-цена", чтобы понятней было.
И ещё: я правильно понимаю, что после того как сработал сигнал по тейк-профит и начался расчёт min/max, то стоп-условие уже не рассматривается?
Надо делать так, как надо. А как не надо - делать не надо.
InsertRow
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
05.12.2015 16:50:22
Цитата
NUMBER InsertRow(NUMBER t_id, NUMBER key) Примечание: При добавлении данных в новую таблицу в первую очередь выполните данную функцию с параметром «key» равным «-1». При этом строка добавится в конец таблицы.
Почему при добавлении в новую таблицу key должен быть равен -1? Что произойдёт, если добавлять в новую таблицу с другим, отличным от -1, значением?
Надо делать так, как надо. А как не надо - делать не надо.
Нулевые позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.12.2015 19:25:53
Иногда, например во время клиринга, в таблицах QUIK транслируются нули вместо реальных позиций. Эти нули присылает биржа или QUIK сам подставляет их вместо null?
Как можно понять, когда там действительно нули, а когда позиции пока ещё не загружены?
Надо делать так, как надо. А как не надо - делать не надо.