Пожалуйста добавьте возможность получения доходности облигаций в функцию getQuoteLevel2, в стаканах в самой программе она есть, но по видимому ее забыли добавить в getQuoteLevel2.
Дублируются пользовательские сообщения из скрипта lua
Пользователь
Сообщений: Регистрация: 30.05.2016
27.09.2023 10:50:54
Порядок прихода сделок по возрастанию номера не гарантирован.
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
Пользователь
Сообщений: Регистрация: 30.05.2016
20.09.2023 10:57:21
OnTrade как правило приходит раньше OnOrder.
Сама по себе сделка содержит номер транзакции, номер заявки и цену исполнения.
После получения всех сделок, информация о состоянии заявки, нам больше не нужна.
Все еще интереснее, если снять эту заявку, то в таблице не обновляется значение, а по другой бумаге значение устанавливается в "-1" Вот скриншот, активных заявок нет. Была снята стоп-заявка POLY, в результате имеем AGRO "-1"
После выставления стоп-заявки (тейк-профит) признак ее наличия (колонка стоп-заявки) в таблице "состояние счета" отображается для совсем другой бумаги, для бумаги для которой в реальности выставлен стоп - не отображается. После перезаказа данных локальных справочников и перезапуска терминала отображение корректное.
Сейчас переменной присваивается значение 0 на каждой итерации цикла while. Очевидно, что инициализацию переменной нужно вынести за его пределы.
Дублируются пользовательские сообщения из скрипта lua
Пользователь
Сообщений: Регистрация: 30.05.2016
09.06.2023 17:32:58
Функции обратного вызова вызываются по нескольку раз и это обычное поведение. Вызываются они не только после изменения свойств входящего параметра доступных внутри луа, но и свойств которые остаются "за кадром".
Последовательность обработки функций обратного вызова
Пользователь
Сообщений: Регистрация: 30.05.2016
02.06.2023 17:06:15
Не нужно вставлять задержки в main, организуйте очередь задач и обрабатывайте их последовательно, возвращаясь к незавершенным (требующим ожидания) задачам уже после.
Последовательность обработки функций обратного вызова
Пользователь
Сообщений: Регистрация: 30.05.2016
02.06.2023 15:58:05
Согласен, коллбеки нужно обслуживать максимально быстро, т.к. во время обслуживания копится очередь из других коллбеков.
В идеале нужно записывать данные в таблицу с индексом и сразу возвращать управление, всю обработку производить уже в main.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
Все так как и должно быть. Просто вы не учитываете, что процедура Subscribe_Level_II_Quotes выполняется асинхронно и требует значительного времени на выполнение.
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
написал: Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Как это сделать? Можно поподробней.
Напишите макрос для post-build события сборки, который будет переименовывать файл. Готового решения у меня нет.
Выгрузка библиотек
Пользователь
Сообщений: Регистрация: 30.05.2016
13.05.2023 11:21:17
Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Как узнать доступность облигаций для неквалифицированных инвесторов, неквалифицированный инвестор офз
Пользователь
Сообщений: Регистрация: 30.05.2016
05.05.2023 11:48:06
Еще можно по параметру "QUALIFIED" в таблице текущих торгов.
Как узнать доступность облигаций для неквалифицированных инвесторов, неквалифицированный инвестор офз
ЗЫ: а его можно явно вызвать? Он же вроде сам приходит когда считает нужным?
collectgarbage()
Запаздывание свечей. Что не так.?
Пользователь
Сообщений: Регистрация: 30.05.2016
14.04.2023 14:45:57
Предположу, что процессор Ryzen, а компьютер вышел из гибернации.
Функция getCandlesByIndex() и закрытие свечки
Пользователь
Сообщений: Регистрация: 30.05.2016
12.04.2023 14:55:46
Если использовать источником данных DataSource, то использовать SetUpdateCallback для получения информации о том, что появилась новая свеча можно.
При появлении новой свечи в OnDataSourceUpdate изменится index и время свечи, пример:
-- Функция вызывается при изменении свечки в таблице data_source -- OnDataSourceUpdate(TABLE data_source, STRING class_code, STRING sec_code, NUMBER interval, STRING param, NUMBER index) function OnDataSourceUpdate(ds, class_code, sec_code, interval, param, index) ... local datetime = ds:T(index)
end
...
local ds, error = CreateDataSource(class_code, sec_code, interval, param) if ds ~= nil then ds:SetUpdateCallback(function (...) OnDataSourceUpdate(ds, class_code, sec_code, interval, param, ...) end) end
Снятие заявки, server check failed
Пользователь
Сообщений: Регистрация: 30.05.2016
04.04.2023 10:09:45
OnTransReply не всегда содержит поле с номером заявки order_num (параметр указан со звездочкой в руководстве). Номер заявки обычно поступает в одном из последних вызовов OnTransReply. Лучше всего номер заявки получать из таблицы заявок по trans_id транзакции.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
Пользователь
Сообщений: Регистрация: 30.05.2016
30.03.2023 20:40:24
PineScript указал просто как пример. Рано или поздно он начнет выполняться на сторонних серверах как уже произошло с графиком.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
написал: А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
Не видел торговых систем на их основе Подключать к КВИКУ не планирую. Вполне устраивает Lua, MQL5 и C.
PineScript, TradingView, терминал Тинькофф.
Да я и не прошу его подключать к квик. Сейчас молодежь со школы учат программировать на python, наверное, это был бы самый востребованный вариант в будущем. (сам не программирую на нем)
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
Пользователь
Сообщений: Регистрация: 30.05.2016
30.03.2023 14:23:27
Производительность не бывает лишней. Как вариант можно тестировать стратегию на истории прямо внутри квик ( т.к. появляется возможность запустить задачу в отдельном потоке)
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
Пользователь
Сообщений: Регистрация: 30.05.2016
30.03.2023 13:11:43
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
can_buy из подтаблицы "Купить/Продать" таблицы "Клиентский портфель", Как мне получить can_buy при для фондового рынка?
Пользователь
Сообщений: Регистрация: 30.05.2016
28.03.2023 20:49:31
Попробуйте использовать CalcBuySell
bid_count возвращает 0, при этом в стакане есть заявки.
Пользователь
Сообщений: Регистрация: 30.05.2016
28.03.2023 11:06:44
Subscribe_Level_II_Quotes заказывает с сервера поток котировок (далеко не быстрая процедура) Естественно getQuoteLevel2 вернет значения только для уже заказанных ранее стаканов (или открытых в quik)
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
Пользователь
Сообщений: Регистрация: 30.05.2016
28.03.2023 10:59:46
Впечатляет! Т.е улучшение производительности в 20 раз? В таблице не хватает теста с Lua 5.4.1
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
Пользователь
Сообщений: Регистрация: 30.05.2016
26.03.2023 11:26:39
Очень интересно, поздравляю с успехом коллега!
Не понимаю, где была инициализирована переменная nk1?PS: К сожалению, не являюсь программистом на C/C++.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
Пользователь
Сообщений: Регистрация: 30.05.2016
16.03.2023 10:56:15
Выше написано все верно. От себя могу добавить что для обмена еще можно использовать сокеты (socket).
Мало кто об этом знает.
Пользователь
Сообщений: Регистрация: 30.05.2016
12.03.2023 10:26:42
А что если каждые 100 элементов вызывать сборку мусора? collectgarbage()
После вызова ds:Close() не работает callback при перезаказе данных
Причина данной проблемы установлена и будет устранена в одной из ближайших версий библиотеки qlua. В качестве временного решения рекомендуем перед вызовом ds:Close() для закрытия таблицы устанавливать пустую функцию обратного вызова с помощью ds:SetEmptyCallback().
Столкнулся с данной проблемой в терминале версии 10.0.1.18, ds:SetEmptyCallback() перед ds:Close() не решает проблему. Есть еще идеи как это обойти на данный момент?
Отладка QUIK 9.3
Пользователь
Сообщений: Регистрация: 30.05.2016
05.12.2021 19:11:05
Ошибка в getPortfolioInfo и getPortfolioInfoEx воспроизводится и на чистом луа без внешних библиотек и при единственном запущенном скрипте.
Дополнительные скрипты запущенные параллельно ВЛИЯЮТ на частоту появления ошибки, так и на возвращаемое значение этой функции.
Всем, кто использует getPortfolioInfo в своих программах не советую обновляться до 9 версии.
Отладка QUIK 9.3
Пользователь
Сообщений: Регистрация: 30.05.2016
29.11.2021 21:40:18
Странно, но не смог воспроизвести проблему на другой машине. Возможно ошибка связана с подключаемыми библиотеками.
Отладка QUIK 9.3
Пользователь
Сообщений: Регистрация: 30.05.2016
27.11.2021 16:07:05
В 9 версии сломали функцию getPortfolioInfoEx
Код
function main()
local pf = getPortfolioInfoEx("SPBFUT000000","SPBFUT000nw",0) -- некорректный код счета (обязательно)
PrintDbgStr(type(pf))
PrintDbgStr(tostring(pf))
end
Рабочий квик ВТБ
В версии 9.2.3.15 и LUA 5.4 данный код вызывает ошибку ACCESS VIOLATION at address 00007FF9F3D71FB4 В версии 9.2.3.15 и LUA 5.3 падение терминала
Демо квик
В версии 9.3.1.11 и LUA 5.4
[6500] string [6500] а‹fb <- эти символы всегда разные
В версии 9.3.1.11 и LUA 5.3 ACCESS VIOLATION at address 00007FF9F057CC05
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
Пользователь
Сообщений: Регистрация: 30.05.2016
19.11.2021 16:38:50
Цитата
индикаторов по всем доступным инструментам QUIK по всем доступным ТФ
Квик и при 20 графиках еле работает, если в него добавить все возможные инструменты со всеми возможными таймфреймами и на эти графики наложить 3 индикатора, то он будет запускаться дольше, чем длится основная сессия.
Если рассчитывать индикаторы самому, то это конечно улучшит ситуацию, однако, подписка на сотню тысяч источников наверняка его прикончит.
Получение статуса выполненных/снятых заявок
Пользователь
Сообщений: Регистрация: 30.05.2016
02.08.2021 01:39:05
Есть еще 3 вариант, следить за значением в OnParam() / getParamEx(). Поле "LAST" Цена последней сделки. Я бы именно так и делал, если не требуется анализ свечей.
Получение статуса выполненных/снятых заявок
Пользователь
Сообщений: Регистрация: 30.05.2016
29.07.2021 21:11:31
Да, вся информация доступна до конца дня. Таблицы брать используя функцию SearchItems.
Код
TABLE SearchItems(STRING table_name, NUMBER start_index, NUMBER end_index,
FUNCTION fn [, STRING params])
Названия таблиц (table_name): "orders", "stop_orders", "trades"
Получение статуса выполненных/снятых заявок
Пользователь
Сообщений: Регистрация: 30.05.2016
25.07.2021 14:02:04
Номер заявки внутри дня уникален. Искать нужно по следующей цепочке:
Уникальный номер транзакции (создаем сами) -> ищем заявку (по номеру транзакции) -> ищем сделки (по найденному номеру заявки)
По найденным сделкам рассчитываем среднюю.
таблица текущие торги, пропали первый столбец без имени и часть следующего столбца
Пользователь
Сообщений: Регистрация: 30.05.2016
05.04.2021 20:50:01
Редактировать -> Поставить галку "транспонировать", нажать да. Затем в обратном порядке. Ширина столбцов после такой процедуры будет сброшена.
Некорректные данные в таблице текущих параметров
Пользователь
Сообщений: Регистрация: 30.05.2016
05.04.2021 20:24:51
Не редко, после включения терминала я вижу некорректные данные в таблице текущих параметров, эти данные не обновляются автоматически. На приведенном скриншоте видно, что статус сессии для инструментов отображается как "открыта", хотя инструменты не торгуются в дополнительную сессию.
Единственной способ получить актуальные данные это перезаказать их через меню "система->заказа данных->перезаказать данные", после этой процедуры они отображаются корректно. (скриншот 2). Как я понимаю, это косвенно подтверждает, что брокер транслирует актуальные данные.
как сделать паузу?
Пользователь
Сообщений: Регистрация: 30.05.2016
20.04.2017 14:10:48
Выбран неверный подход. Вам нужно организовать очередь (массив) и обработчик (в Main). После события запись добавляется в массив с указанием времени добавления, в main периодически (с заданным интервалом) проверяется, извлекается и обрабатывается. При таком подходе скрипт никогда не будет "спать" и сможет параллельно обрабатывать события от разных колл-беков.
or и цикл while
Пользователь
Сообщений: Регистрация: 30.05.2016
01.02.2017 16:02:19
Такой подход к организации ожидания события не дает права на ошибку и при любом некорректном входном параметре или ошибки выполнения getParamEx навсегда "повесит" скрипт
Ядра процессора
Пользователь
Сообщений: Регистрация: 30.05.2016
10.01.2017 15:44:36
Цитата
Космонавт написал: Станислав, вопрос не про скорость процессора, а про количество ядер. Если при 4 ядрах загрузка ниже 50%, какой смысл держать 4 ядра, может можно понизить до 3?
Зависит от того как реализована многопоточность в квике. Но все же повышение нагрузки с 30 до 50% на ядро, говорит о том, что некие задачи теперь работают последовательно, а раньше разбрасывались параллельно по ядрам.
Ядра процессора
Пользователь
Сообщений: Регистрация: 30.05.2016
10.01.2017 14:17:43
Более быстрый процессор решит любую математическую задачу быстрее чем его медленный собрат. Однако, для конкретной задачи это может быть очень не существенно, что там за математика предшествует коллбекам неизвестно, поэтому кроме как тестированием это не проверить.
Подключение библиотеки Trans2QUIK.dll
Пользователь
Сообщений: Регистрация: 30.05.2016
22.12.2016 14:41:20
В скриптах на Lua эта библиотека вообще не нужна, она используется для отправки транзакций внешними приложениями.