Nikolay написал: Но как только подключаем OnParam и пишем в очередь
А если какой-нибудь другой колбэк заюзать? Любой достаточно частый.
Работа колбеков
Пользователь
Сообщений: Регистрация: 20.03.2023
25.07.2026 01:35:18
Nikolay, PrintDbgStr является синхронизирующим логгером, поэтому все три скрипта синхронизируются по нему (ЕМНИП, даже тогда, когда нет читателя в виде DebugView). Аналогично все SetCell синхронизированы с главным потоком квика (гуи), поэтому все три скрипта борются за какой-нибудь lock, поэтому сама ТТТ стала тупить. Пробовали заменить SetCell на вывод в файл, расположенный на рамдиске, или иную заглушку? Полезно также сравнить с версией, когда SetCell вызывается прямо в колбэке, т.к. по идее тогда можно избежать синхронизации, ведь квик знает, что вызов идёт из гуёвого потока.
getQuoteLevel2 вроде как может тупить даже в гордом одиночестве - возможно потому, что она почему-то ждёт, когда бэкенд доформирует таблицу полностью, вместо того, чтобы отдать предыдущую сразу же.
Роль big lib не ясна, и она не измеряется тестом.
os.clock() кстати совсем не бесплатная функция, советую убрать из колбэков, если они очень часто вызываются
Я согласен, что тест слишком большой для выделения бага. Если Вам так нравится использовать таблицы qlua вместо сторонних гуи либ, я бы предложил искать баг без колбэков вообще, чисто на SetCell из нескольких скриптов с заданной частотой. Если не воспроизведётся, добавлять колбэки по одному, а в них сначала только писать в очередь, делегируя всю обработку в main, и если и так не воспроизведётся, то переносить частично обработку из main назад в колбэки, пока не станет понятно, что тупит именно из-за содержания колбэков.
Влияние колбэков на производительность
Пользователь
Сообщений: Регистрация: 20.03.2023
24.07.2026 20:59:08
nikolz прямо маркетмейкер по комментариям на этом форуме. Даже не прочёл код скрипта, используемого для теста.
По теме: для моих торговых целей, когда в OnAllTrade приходит максимум 10 тикеров, влияние не значительное, поэтому продолжаю юзать несколько скриптов, каждый из которых имеет OnAllTradeс проверкой по sec_code в таблице.
Меняется ли Size() внутри OnCalculate()?
Пользователь
Сообщений: Регистрация: 20.03.2023
21.07.2026 19:58:00
Версия 12.2.2.8 Я уже переписал свои скрипты так, чтобы ориентироваться только на Size(), доступный при I == 1. Если что, ничего особенного с т.з. апи квика в скрипте не было, математика сложная, но вызывались только C(I) и Size().
Меняется ли Size() внутри OnCalculate()?
Пользователь
Сообщений: Регистрация: 20.03.2023
01.07.2026 22:12:44
Вот три года под квик пишу и не сталкивался ранее, чтобы Size(), вызванный несколько раз внутри одного и того же вызова OnCalculate(), давал разные результаты. Однако он вдруг начал-таки так делать, для всяких не стандартных индикативных тикеров типа class_code FEG, sec_code Gold у БКС, он может внутри вызова OnCalculate(I) выдать сначала I, а потом I + 1. Мне вот интересно, так всегда было, и я не замечал просто, или что-то недавно поменялось?
Актуально для проверок на то, индикатор на истории работает или нет, т.к. проверка I == Size() может отрабатывать не так, как задумано.
Робот, торгующий опционами
Пользователь
Сообщений: Регистрация: 20.03.2023
27.06.2026 23:31:40
Сергей Че, по природному газу, да и по серебру, есть нецелые страйки, тем более по юаню.
Получить список всех опционов для данного фьючерса можно через SearchItems по таблице securities, ориентируясь на base_active_seccode и дату экспирации (exp_date). Можете вытащить все опционы, и потом оставить от них ближайшие по экспирации недельные и/или месячные. Код для определения недельный ли опцион:
Код
local w = t.sec_code:sub(-1)
w = w >= 'A' and w <= 'E'
Код для определения, что это опцион call
Код
local o = -2 + (w and -1 or 0)
local is_call = t.sec_code:sub(o,o) <= 'L'
Страйк хранится в t.option_strike.
Сам проход SearchItems по таблице securities тяжёлый, пол-секунды занимает легко. Я результаты кэширую, написав dll.
Как получить бирживой сбор по инструменту
Пользователь
Сообщений: Регистрация: 20.03.2023
27.06.2026 23:17:58
Сам нашёл - это параметры CL_PAY и EXCH_PAY. Итоговый сбор - сумма этих параметров.
В каком потоке делать финализацию при останове скрипта?
Пользователь
Сообщений: Регистрация: 20.03.2023
27.06.2026 22:45:39
Все делают в main. Исключение: если прогаете GUI неродными для квика таблицами, а через внешнюю dll, то ресурсы если освобождаете (а не скрываете), то в том же потоке, в котором работал гуи (в главном квика - тогда в OnStop, иначе - в main)
Закрывается DataSource при остановке скрипта?
Пользователь
Сообщений: Регистрация: 20.03.2023
27.06.2026 22:33:46
Подтверждаю, у меня тоже ничего на стек не кладёт, хотя по спецификации должно быть boolean
Очередное зависание Lua-скрипта, в функции getDepoEx
Пользователь
Сообщений: Регистрация: 20.03.2023
27.06.2026 22:01:27
Совершенно аналогичным образом виснет getBuySellInfoEx, если нет соединения с сервером квика. И даже если из-под if isConnected() == 1 вызывать, всё равно виснуть будет в момент соединения: почему-то сначала isConnected() становится 1 и только потом внутрянка getBuySellInfoEx инициализируется. По идее в идеале isConnected() должно возвращать 1 только после того, как вызов любой функции QLua может отработать правильно.
Йцукен, можете оформить индикатор с этим же кодом. Тогда квик тупо зависнет на старте, не дав войти даже по паролю. По идее это более весомо для тех поддержки
График RTSI дневной по выходным дням, 2 плоские свечи с марта за выходные
На западе неделя начинается с воскресенья. В Lua даже поле wday таблиц времени равно 1 для воскресенья. Сейчас, конечно, плохо соответствует торгам на мосбирже, где в субботу и воскресенье обычно проводят торги по ДСВД понедельника, т.е. должны относиться к следующей неделе. В любом случае, следует ориентироваться на графики на сайте биржи (куда она будет относить торговые данные выходных, туда по идее и все терминалы должны относить).
Вопрос ко всем, кто знает: какую таблицу возвращает getQuoteLevel2 если нет bid или ask?
Пользователь
Сообщений: Регистрация: 20.03.2023
20.05.2026 02:49:29
Цитата
Йцукен написал: Эта функция отличается от getQuoteLevel2 тем, что вместо строк данных возвращает числовые - не нужно делать лишние преобразования "строка -> число".
где бы это ещё документировано было... я бы не удивился, если бы эта функция брала строки из getQuoteLevel2 и преобразовывала их в числа)))
Zoya Skvorcova, можете подробнее рассказать? В квике начиная в какой-то версии теперь можно каким-то конкретным запросом получить биржевой сбор по инструменту без совершения сделки? Каким?
Если SetUpdateCallback вернул false, предыдущий колбэк снят?
Пользователь
Сообщений: Регистрация: 20.03.2023
16.05.2026 13:55:33
Документация не уточняет этот вопрос, хотелось бы знать. У меня пока всегда true возвращает, не могу проверить.
Не могу понять, что сломано в коде, Взял один старый Измеритель
Пользователь
Сообщений: Регистрация: 20.03.2023
14.05.2026 03:35:34
квик рендерит столько линий, сколько вернулось из Init, то есть return #Settings.line, то есть 2.
Вопрос ко всем, кто знает: какую таблицу возвращает getQuoteLevel2 если нет bid или ask?
то вместо "sec_code" будет nil (по крайней мере для опционов). Однако если делать getItem, то поле "sec_code" будет заполнено правильно. И если вызывать так, то поле тоже будет заполнено правильно:
Это сильно вводит в заблуждение. Везде должно быть названо sec_code, и указание sec_code в строке params в SearchItems должно работать.
Баг SearchItems с datetime.mcs
Пользователь
Сообщений: Регистрация: 20.03.2023
21.04.2026 22:29:16
Ещё один баг: если в указанном примере просить вместо "datetime.sec,datetime.mcs,qty,price" такие параметры "class_code,sec_code,datetime,qty,price", то на стеке окажутся типы ["string", "string", "number", "number"], то есть таблица datetime просто не передастся, и nil вместо неё тоже. А по мне так должна передаваться, ведь table это first-class citizen в Lua. Уважаемая поддержка, задокументируйте все ограничения на параметры SearchItems, пожалуйста. А ещё лучше, исправьте так, чтобы текущая документация отражала реальность.
Вопрос ко всем, кто знает: какую таблицу возвращает getQuoteLevel2 если нет bid или ask?
Так всегда было, формат dat такой. И если юзать CreateDataSource с 4 параметром, и на графике, на котором этот 4-й параметр изображён, нажать F5, то в конец имеющегося датасорса придут все значения по параметру по очереди, как старые, так и новые. И так каждое нажатие F5.
Создание GUI приложений на Lua?
Пользователь
Сообщений: Регистрация: 20.03.2023
30.03.2026 12:49:24
Этот форум посвящён торговой программе QUIK (которая поддерживает скрипты на Lua).
GUI на Lua сложная тема, простых решений нету.
Для себя я переписал библиотеку VCLua
Наиболее живая гуи либа наверно эта
Баг SearchItems с datetime.mcs
Пользователь
Сообщений: Регистрация: 20.03.2023
28.03.2026 23:11:16
Скрипт:
Код
function main()
SearchItems("all_trades", 0, getNumberOf("all_trades") - 1,
function(sec, mcs, qty, price)
PrintDbgStr(tostring(sec))
PrintDbgStr(tostring(mcs))
PrintDbgStr(tostring(qty))
PrintDbgStr(tostring(price))
local ok, err = pcall(function() PrintDbgStr(string.format("%02d\t%06d\t%d\t%f", sec, mcs, qty, price)) end)
if not ok then
PrintDbgStr(err)
return nil
end
return false
end,
"datetime.sec,datetime.mcs,qty,price")
local t = getItem("all_trades", 0)
PrintDbgStr(tostring(t.datetime.sec))
PrintDbgStr(tostring(t.datetime.mcs))
PrintDbgStr(tostring(t.qty))
PrintDbgStr(tostring(t.price))
end
Во-первых, внутри SearchItems почему-то поле datetime.mcs судя по симптомам равно nil, а при получении через getItem оно равно 0. Во-вторых, идёт смещение переданных параметров в функции: поле qty присваивается переменной mcs, поле price присваивается переменной qty, а переменной price ничего не достаётся. В документации написано, что никакого сдвига не должно быть и mcs должно было бы получить nil
Quik 12.2.2.8, брокер БКС, подписка на обезличенные сделки по классу INDX (печатается первая сделка за день по IMOEX2).
Точный расчет комисии при сделке, Точный расчет комисии при сделке
У меня в ежедневных есть строки про "урегулирование сделок". Но там не по каждой сделке, а по площадкам. Типа "вся фонда" за день, "вся валюта" за день. По фьючерсам "биржевые сборы", если по рынку заявки были.
Точный расчет комисии при сделке, Точный расчет комисии при сделке
Пользователь
Сообщений: Регистрация: 20.03.2023
19.03.2026 09:46:40
Я в экселе считаю, но без маржинальных переносов. Брокер вам должен сказать, какая комиссия биржи у него в договоре с биржей. Например, у Финама и БКС разная комиссия биржи списывается (0.03% и 0.02%). И не со всех инструментов (например, родные фонды ликвидности по-другому считаются), не на всех тарифах (на тарифе Инвестор включено в стоимость). И сделки до 10:00 могут по-другому обрабатываться, рыночные заявки на вечерке тоже, айсберг-заявки... Это НЕ просто.
Это общедоступная информация? Где можно посмотреть источник?
Поле is_rest_short_sec в выдаче getBuySellInfoEx не документировано
Пользователь
Сообщений: Регистрация: 20.03.2023
16.03.2026 11:08:47
Oleg Kuzembaev, не правильно, я ничего не пытаюсь отобразить визуально. Я говорю о LUA таблице, которая является результатом выполнения getBuySellInfoEx.
Поле is_rest_short_sec в выдаче getBuySellInfoEx не документировано
Пользователь
Сообщений: Регистрация: 20.03.2023
13.03.2026 11:57:37
Добрый. Я в курсе, т.к. единственный результат поиска по форуму туда и привёл. Но должен он быть задокументирован и для Lua тоже, не только для QPILE и по-другому названной функции.
CalcBuySell и getBuySellInfoEx неправильно считают для фьючерсов с валютой шага цены отличной от SUR
Пользователь
Сообщений: Регистрация: 20.03.2023
13.03.2026 11:54:36
Собственно сабж. Брокер БКС, * со срочным рынком, заявки на 2 млн руб ГО могу выставить в торговую систему как на лонг, так и на шорт, однако функции говорят, что не должен мочь:
Код
maxpos, commis = CalcBuySell(ticker.class, sec, nonfut and "1111111" or "SPBFUTxxxxx", accounts[ticker.class], last, buy, false)
print(maxpos, commis)
debugf(table.tovstring(getBuySellInfoEx("xxxxxxx00000", nonfut and "1111111" or "SPBFUTxxxxx", ticker.class, sec, last)))
Неужели эти функции не умеют до сих пор валютный курс учитывать хотя бы приблизительно?
Поле is_rest_short_sec в выдаче getBuySellInfoEx не документировано
Пользователь
Сообщений: Регистрация: 20.03.2023
13.03.2026 11:00:36
Собственно, сабж. Брокер БКС выдаёт таблицу с этим полем. В документе "Интерпретатор языка Lua.pdf" даже версии 12.8.5 это поле не описано.
Будет ли переход на Lua 5.5?
Пользователь
Сообщений: Регистрация: 20.03.2023
10.02.2026 17:55:14
Надеюсь, что нет, но хотелось бы знать планы разработчиков.
Бесшовная склейка графика
Пользователь
Сообщений: Регистрация: 20.03.2023
20.12.2025 18:05:55
Штатными средствами нельзя. Если знать формат dat файлов из папки archive, то можно. Но нужно ли? Возня лишняя в сравнении с tradingview
Новые фьючерсы на биткойн и эфир, Правильный рассчёт стоимости лота
Пользователь
Сообщений: Регистрация: 20.03.2023
16.12.2025 15:28:33
Да, надо ещё поделить на SEC_PRICE_STEP, который у эфира 0.1
Функции обратного вызова не вызываются одновременно?, Т.е. отследить изнутри OnTrade выполнение другого OnOrder невозможно?
Пользователь
Сообщений: Регистрация: 20.03.2023
15.12.2025 14:39:20
Ни в коем случае нельзя делать sleep внутри колбэков квика, они работают в том же потоке, что и сам квик. Ожидание событий должно быть в main.
Таблица алгоритмических заявок в QUIK для Windows, Не очищается таблица алгоритмических заявок
Пользователь
Сообщений: Регистрация: 20.03.2023
13.12.2025 00:30:27
Это вопрос к брокеру. Явно у него на сервере они остались.
Новые фьючерсы на биткойн и эфир, Правильный рассчёт стоимости лота
Пользователь
Сообщений: Регистрация: 20.03.2023
13.12.2025 00:27:11
Цитата
maxlifter написал: Добрый вечер ,какие параметры использовать в скрипте чтобы по фьючерсам BTZ5 И EHZ5 получалась стоимость 1 лота не 90 000 долл и 3000 долл а 90 и 30 долл ?
getParamEx на STEP_IN_CURRENCY по обоим тикерам возвращает 0.001, ну и далее умножить на цену
Как создать мост QLua-скрипта с другим C++ приложением? Вопрос концепта., Предлагаю такой подход, но есть вопросы.
Пользователь
Сообщений: Регистрация: 20.03.2023
06.12.2025 22:25:18
Цитата
A.T. написал: Причем, мне не критично к скорости, да и к объёму.
Тогда не понятно, чем Вас файлы не устраивают, особенно в RAM диске. Это даже не потребует dll для QLua. А протокол на запрос-ответ понадобится в любом случае.
Ошибка в отображении данных графика объема торгов: Сбербанк, График объема торгов в системе QUIK не соответствует данным с сайта Мосбиржи
Пользователь
Сообщений: Регистрация: 20.03.2023
30.11.2025 00:46:30
Цитата
ДмитрийК написал: Прошу пояснить такое расхождение в данных.
То, что в квике, надо умножать на lotsize, чтобы получить объём сделок в акциях. 06.06.2025 lotsize на сбере был 10 (сейчас - 1). Это объясняет расхождение порядка. Почему на сайте биржи написано 102 026 188 (акций), в tradingview написано 102 022 760, а в Финам (в транзаке) и БКС (квике) указано 10 200 518 лотов (т.е. акций 102 005 180) я не знаю. Может быть по-разному учтён аукцион открытия.
О торговле фьючерсами и ГО
Пользователь
Сообщений: Регистрация: 20.03.2023
19.11.2025 19:36:53
Цитата
Ziveleos написал: Пока позиция +3 ещё не закрыта, деньги под ГО остаются заблокированы, задействовать их под +6 нельзя.
Если бы всё было так просто. Когда я выставляю заявки в обе стороны по одному инструменту, у меня блокируется не сумма ГО покупателя и ГО продавца, а только ГО продавца (как бОльшее из двух). Библиотека расчёта лимитов умеет и такое. Поэтому развернуть позицию может быть и можно без суммы ГО на счету. Это в целом вопрос к брокеру, а не к квику.
О торговле фьючерсами и ГО
Пользователь
Сообщений: Регистрация: 20.03.2023
17.11.2025 23:33:51
Сергей Че, это вы у брокера спросите. У него в расчёте лимитов могла быть ошибка. Но для обращения Вам следует знать точные цены и время заявок, т.к. ГО иногда зависит от цены.
Кто меняет разрешение системного таймера?
Пользователь
Сообщений: Регистрация: 20.03.2023
21.10.2025 20:15:27
Цитата
Serge123 написал: Может быть, Квик ставит разрешение в 1 мс, когда запущены скрипты Луа? Я как раз перед выставлением заявки их запускаю.
квик таймер не меняет, а скрипты могут. У меня почти все скрипты ставят таймер на 0.5мс как раз
Отсутствие сделок в таблице сделок
Пользователь
Сообщений: Регистрация: 20.03.2023
13.09.2025 17:24:47
Izotova Liliya, в архиве версий имеет смысл такие изменения указывать...
Поменяйте вкладки графиков пожалуйста !, Поменяйте вкладки графиков пожалуйста и способ переключения между ними
0 для срочки для рыночной сделки нельзя ставить, на сколько я помню.
Рыночная заявка для торговли фьючерсами
Пользователь
Сообщений: Регистрация: 20.03.2023
28.08.2025 19:59:39
Я использую type="M" и завышенную цену одновременно
Убрать выходные дни с графиков
Пользователь
Сообщений: Регистрация: 20.03.2023
28.08.2025 19:55:13
Цитата
Graf Graf написал: Напишу и в этой ветке. Темы одинаковые. Уважаемые разработчики, когда примите решение и всё-таки датите возможность убрать с графика "торги выходного дня"? Даже в Trading View смекнули, что не надо транслировать этот мусор, и не показывают субботу и воскресенье на графиках наших фьючерсов. Или вам МосБиржа не дает это сделать?
TV на внутридневных тф показывает всё на выходных. А на дневном и выше они по торговым сессиям формируют свечи (то есть открытие по фьючерсам считается от 19:05 предыдущего дня), а не по календарным, поэтому этих дневных свечей там нет.
Графики и данные свеч с сайта MOEX не совпадают с графиками в QUIK
Пользователь
Сообщений: Регистрация: 20.03.2023
16.07.2025 15:00:21
И ещё можете посмотреть, какие графики в мобильном приложении ВТБ