local stopped, id
function OnStop(flag)
stopped = true
DestroyTable(id)
end
function main()
id = AllocTable()
CreateWindow(id)
SetTableNotificationCallback(id, function(t_id, msg, par1, par2)
if msg == QTABLE_CLOSE then
OnStop()
end
end)
repeat
sleep(16)
until stopped
end
Надо делать так, как надо. А как не надо - делать не надо.
Контекстное меню в Lua-таблицах
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
06.12.2019 14:47:00
Это не пожелание, а баг-репорт, как и
Надо делать так, как надо. А как не надо - делать не надо.
Контекстное меню в Lua-таблицах
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
06.12.2019 11:24:58
Если задана SetTableNotificationCallback (как для ячеек так и для заголовков) по событиям QTABLE_RBUTTONDOWN, QTABLE_RBUTTONDBLCLK, QTABLE_RBUTTONUP, то контекстное меню, в том виде, в котором сейчас есть (не настраиваемое) не нужно!
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
06.12.2019 00:22:00
Код
function main()
local id = AllocTable()
AddColumn(id, 1, 'QTABLE_STRING_TYPE', true, QTABLE_STRING_TYPE, 30)
AddColumn(id, 2, 'QTABLE_INT_TYPE', true, QTABLE_INT_TYPE, 25)
CreateWindow(id)
local row = InsertRow(id, -1)
SetCell(id, row, 1, 'задано')
SetCell(id, row, 2, '0', 0)
row = InsertRow(id, -1)
SetCell(id, row, 1, '')
row = InsertRow(id, -1)
SetCell(id, row, 2, '')
end
Как сделать, чтобы условие «задано» корректно работало для числовых ячеек?
Надо делать так, как надо. А как не надо - делать не надо.
Контекстное меню в Lua-таблицах
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
05.12.2019 19:55:09
QUIK 8.2.0.78 При клике правой кнопкой мыши в Lua-таблице появляется контекстное меню. Как убрать?
Надо делать так, как надо. А как не надо - делать не надо.
Метки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.10.2019 18:47:49
Надо делать так, как надо. А как не надо - делать не надо.
Метки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.10.2019 14:59:03
Раньше можно было настроить прозрачность вручную. Зачем убрали?
Надо делать так, как надо. А как не надо - делать не надо.
Метки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.10.2019 11:41:58
Где теперь устанавливается прозрачность метки и фона?
Надо делать так, как надо. А как не надо - делать не надо.
Не срабатывает колбек OnTrade
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.10.2019 12:02:35
Значения глобальных переменных, таких как, Status_Order, State_Order, Num_Order, удалять надо перед началом нового цикла.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица всех сделок
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.10.2019 16:45:26
Отправил на почту архив сделок alltrade.dat В таблице такие данные: и по многим другим бумагам.
Надо делать так, как надо. А как не надо - делать не надо.
table.ssort, зависает терминал при выполнении table.ssort в main
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.10.2019 13:59:11
Похоже, SetCell ждёт код возврата и не может его получить, поскольку основной поток "заморожен"
Надо делать так, как надо. А как не надо - делать не надо.
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.
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.10.2019 13:04:04
Регистрируем
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.10.2019 18:35:55
В настройках шрифтов («Программа» / «Шрифты») указан шрифт Tahoma. При выборе условного форматирования эти настройки игнорируются, стоит по-умолчанию другой шрифт (Arial). Приходится дополнительно ещё указывать нужный шрифт и размер.
Надо делать так, как надо. А как не надо - делать не надо.
Клиентский портфель, Настройки обновления
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.10.2019 14:47:39
Цитата
Система / Настройки / Основные настройки… раздел «Торговля» / «Клиентский портфель»
Влияют ли эти настройки на значения, получаемые из Lua, например, getPortfolioInfo, getPortfolioInfoEx и др.?
Надо делать так, как надо. А как не надо - делать не надо.
Дробное значение balance
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.10.2019 13:31:30
Цитата
Sergey Gorokhov написал: ответ зависит еще и от версии сервера.
Не внимательно прочитал. Т.о., для российских площадок в версиях клиента (>= 7.24 and < 8) можно умножать balance на 100, не зависимо от версии сервера?
Надо делать так, как надо. А как не надо - делать не надо.
Дробное значение balance
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.10.2019 12:45:23
Цитата
Sergey Gorokhov написал: Если сервер выше 8.0 то количество требуется отображать с учетом точности инструмента, однако, на российских рынках как правило нет инструментов с дробным количеством, так что можно также умножать на 100.
Можно поподробнее? В версии 8.1.0.30 balance отображается целым числом, зачем ещё умножать?
Надо делать так, как надо. А как не надо - делать не надо.
Дробное значение balance
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.10.2019 09:00:06
Сотрудники ARQA Technologies, просвятите, пожалуйста, В какой версии была добавлена ошибка? В какой версии ошибка устранена? Проблема на всех рынках? В версиях, где ошибка присутствует, чтобы получить корректное значение снятого остатка, достаточно balance умножить на 100, или размер лота, или другое значение? Или всё сложнее?
Надо делать так, как надо. А как не надо - делать не надо.
Дробное значение balance
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.10.2019 10:15:36
В какой версии была добавлена ошибка? 7.16 - это последний релиз 7 версии, где нет этой ошибки?
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder, снятие заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.09.2019 14:24:58
uid и canceled_uid будут равны при выставлении/снятии заявки от имени одного логина как пользователем так и скриптом. Увы, но при отсутствии OnTransReply это не поможет.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder, снятие заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.09.2019 12:03:10
Вопрос можно поставить так: Можно ли из Lua-скрипта определить, что заявка снята по транзакции этого скрипта, если OnTransReply не получен?
Надо делать так, как надо. А как не надо - делать не надо.
Так и знал, что кто-нибудь из зевак будет задавать кучу вопросов. Ну, например, для реализации функции для фондовой и валютной секций, аналогичной "MOVE_ORDERS" на срочке. Заявку может снять пользователь, но скрипт не сразу об этом узнает, особенно, когда биржа тормозит, и колбеки приходят с задержкой в несколько секунд. OnTransReply - один из колбеков, доставка которого не гарантируется, ну так сложилось. Рассуждения "кто, зачем и почему" не интересуют.
Интересует ответ на вопрос в темы с учётом особенностей архитектуры ИТС QUIK.
Надо делать так, как надо. А как не надо - делать не надо.
Доска опцинов из QLUA
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.09.2019 08:31:49
Код
getParamEx(class, sec, "optiontype")
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder, снятие заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.09.2019 17:21:16
Цитата
s_mike@rambler.ru написал: если этот колбек к вам не пришел, значит, нужно исправлять аппаратную часть.
По секрету: проблема может быть не на стороне клиента, чью аппаратную часть будете исправлять?
Надо делать так, как надо. А как не надо - делать не надо.
depo_limit.currentbal в лотах на демо
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.09.2019 12:27:02
к разработчикам: Если это - "та самая" функция, можете её легализовать или сделать публичную версию, чтобы можно было использовать её в своих проектах, не опасаясь, что в будущем эта функция будет упразднена.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder, снятие заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.09.2019 11:57:13
Скрипт отправляет транзакцию на снятие заявки. Допустим, OnOrder получен раньше или OnTransReply вообще не пришел. Есть возможность установить инициатора снятия: сам скрипт, пользователь (вручную) или, может, другой бот?
Надо делать так, как надо. А как не надо - делать не надо.
error loading module 'luasql.sqlite3' from file: Не найдена указанная процедура.
Надо делать так, как надо. А как не надо - делать не надо.
Работа с таблицами Квика
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
14.09.2019 13:38:12
Цитата
Alexey Ivannikov написал: Действительно, описываемое поведение некорректно. IsWindowClosed() возвращает TRUE только в случае, если окно таблицы было закрыть "вручную" (т.е. кликом мыши по "крестику"). Ошибка будет исправлена в одной из очередных версий программы.
Главное исправить так, чтобы было понятно, какую таблицу можно повторно открыть с помощью CreateWindow, а кукую нужно создавать заново, чтобы результат работы кода
Код
if IsWindowClosed(id) == true then CreateWindow(id) end
был предсказуем.
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.09.2019 00:26:54
Цитата
Alexander Kopyatkevich написал: Обнаруженная Вами ошибка была исправлена в выпущенной версии Рабочего места QUIK 8.1.
Так а что исправили-то можете объяснить?
Форматирование отличается только галкой "применить ко всей строке". Хотим отформатировать только шрифт, фон оставить, как есть.
В первом случае цвет фона остаётся, т.е. зелёный, как был задан из скрипта. Во втором случае цвет фона из красного перекрашивается в белый.
Надо делать так, как надо. А как не надо - делать не надо.
depo_limit.currentbal в лотах на демо
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.08.2019 18:04:57
Может, да, а может нет. Назвать как угодно можно, а что показывает одному автору известно. Учитывая, что функция появилась в 7.18 и до сих пор , либо это не то, что вы подумали, либо разработка совершенно секретная )))
Надо делать так, как надо. А как не надо - делать не надо.
depo_limit.currentbal в лотах на демо
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.08.2019 15:18:23
Что за функция isLimitsInLots в qlua.dll?
Надо делать так, как надо. А как не надо - делать не надо.
*AllTrade*, новые функции для qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
28.08.2019 11:09:32
Цитата
Sergey Gorokhov написал: важнее с какой скоростью данные поступают и обрабатываются нежели с какой скоростью происходит заказ.
Для сравнения: в день по опционам проходит биржевых сделок около 20 тыс. (±10 тыс.). Чтобы подписаться на сделки по всему классу опционов, нужно дёрнуть info.ini около 150 тыс. раз.
Надо делать так, как надо. А как не надо - делать не надо.
*AllTrade*, новые функции для qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
27.08.2019 10:56:49
Цитата
Sergey Gorokhov написал: Ваши ~500 сек никуда не идут в сравнении с нашими ~20сек.
При каждом вызове CreateDataSource по тикам дергается info.ini: раз 15 повторяется цикл LockFile/ReadFile/UnlockFile/CloseFile и один раз даже WriteFile )) Скорость выполнения такого блока операций сильно зависит от скорости диска, на который установлен QUIK. И, как ни странно, может отличаться в десятки раз.
Ну ещё и сравнивать надо в одинаковых условиях, например, какие были установлены фильтры, что было в файлах info.ini (в частности в секции [ALL_TRADES_DATA]), alltrade.dat до запуска скрипта.
Надо делать так, как надо. А как не надо - делать не надо.
перехват ошибки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.08.2019 12:52:28
Ошибки в колбеках (не только OnCalculate) не останавливают работу скриптов, так и было задумано?
Надо делать так, как надо. А как не надо - делать не надо.
Не завершается main после остановки скрипта
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.08.2019 15:16:56
Цитата
Nikolay Pavlov написал: скрипт висел 5 секунд на строчке SetCell(t_id, 1, 1, tostring(r ))
Так и должно быть?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.08.2019 16:42:45
Я думал "Нет цвета" означает не перекрашивать в белый (или любой другой) цвет. Это не так? Что же тогда?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK 7.25.1.3. Условное форматирование таблиц., Желательно, для ячеек выставить по умолчанию "Нет цвета"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.08.2019 15:41:00
Если условное форматирование применено ко всей строке, то настройка "Нет цвета" не работает.
Надо делать так, как надо. А как не надо - делать не надо.
Не завершается main после остановки скрипта
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.08.2019 13:30:06
Nikolay Pavlov, если вы тестируете на Pentium 100, то, возможно, так и есть. На современных компьютерах время работы функции f() менее 65 мс
Надо делать так, как надо. А как не надо - делать не надо.
Не завершается main после остановки скрипта
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.08.2019 13:02:29
Под "не завершается должным образом" имеется ввиду невыполнение последнего оператора message('Exit') после нажатия кнопки "Остановить"
Надо делать так, как надо. А как не надо - делать не надо.
Где посмотреть описание на флаг в транзакции?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.08.2019 12:57:06
?
Надо делать так, как надо. А как не надо - делать не надо.
depo_limit.currentbal в лотах на демо
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.08.2019 00:46:39
Цитата
Zoya Skvorcova написал: Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Цитата
Stanislav Tvorogov написал: Данная настройка выполняется со стороны сервера QUIK. Получить ее значение из рабочего места QUIK через QLUA на данный момент, к сожалению, нельзя. При реализации ранее зарегистрированного пожелания ответ будет предоставлен в данной ветке форума.
Здравствуйте. Удалось что-нибудь сделать?
Надо делать так, как надо. А как не надо - делать не надо.
Не завершается 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 не завершается (чаще всего) должным образом?
Надо делать так, как надо. А как не надо - делать не надо.
Критерий исполнения заявки OnTrade
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.08.2019 21:14:17
Цитата
Sergey Gorokhov написал: Еще есть параметр ext_order_status, в котором значение 2 соответствует частичному исполнению.
В QUIK 8 параметр ext_order_status всегда равен 0. Это нормально?
Возможна ли ситуация, когда при снятии частично исполненной заявки параметр flag обновится раньше balance?
Надо делать так, как надо. А как не надо - делать не надо.
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
31.07.2019 23:27:11
Цитата
s_mike@rambler.ru написал: пересчитывать итоги каждый раз при попытке извлечь значение по ключ vol
Думаю, будет накладно в общем случае, т.к. надо будет при каждом обращении к vol пробегать по всем элементам таблицы. Хотелось бы более элегантного решения.
Надо делать так, как надо. А как не надо - делать не надо.