Станислав написал: Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Как это сделать? Можно поподробней.
Напишите макрос для post-build события сборки, который будет переименовывать файл. Готового решения у меня нет.
Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Если использовать источником данных 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
OnTransReply не всегда содержит поле с номером заявки order_num (параметр указан со звездочкой в руководстве). Номер заявки обычно поступает в одном из последних вызовов OnTransReply. Лучше всего номер заявки получать из таблицы заявок по trans_id транзакции.
Станислав написал: А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
Не видел торговых систем на их основе Подключать к КВИКУ не планирую. Вполне устраивает Lua, MQL5 и C.
PineScript, TradingView, терминал Тинькофф.
Да я и не прошу его подключать к квик. Сейчас молодежь со школы учат программировать на python, наверное, это был бы самый востребованный вариант в будущем. (сам не программирую на нем)
Производительность не бывает лишней. Как вариант можно тестировать стратегию на истории прямо внутри квик ( т.к. появляется возможность запустить задачу в отдельном потоке)
Subscribe_Level_II_Quotes заказывает с сервера поток котировок (далеко не быстрая процедура) Естественно getQuoteLevel2 вернет значения только для уже заказанных ранее стаканов (или открытых в quik)
Причина данной проблемы установлена и будет устранена в одной из ближайших версий библиотеки qlua. В качестве временного решения рекомендуем перед вызовом ds:Close() для закрытия таблицы устанавливать пустую функцию обратного вызова с помощью ds:SetEmptyCallback().
Столкнулся с данной проблемой в терминале версии 10.0.1.18, ds:SetEmptyCallback() перед ds:Close() не решает проблему. Есть еще идеи как это обойти на данный момент?
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
индикаторов по всем доступным инструментам QUIK по всем доступным ТФ
Квик и при 20 графиках еле работает, если в него добавить все возможные инструменты со всеми возможными таймфреймами и на эти графики наложить 3 индикатора, то он будет запускаться дольше, чем длится основная сессия.
Если рассчитывать индикаторы самому, то это конечно улучшит ситуацию, однако, подписка на сотню тысяч источников наверняка его прикончит.
Есть еще 3 вариант, следить за значением в OnParam() / getParamEx(). Поле "LAST" Цена последней сделки. Я бы именно так и делал, если не требуется анализ свечей.
Не редко, после включения терминала я вижу некорректные данные в таблице текущих параметров, эти данные не обновляются автоматически. На приведенном скриншоте видно, что статус сессии для инструментов отображается как "открыта", хотя инструменты не торгуются в дополнительную сессию.
Единственной способ получить актуальные данные это перезаказать их через меню "система->заказа данных->перезаказать данные", после этой процедуры они отображаются корректно. (скриншот 2). Как я понимаю, это косвенно подтверждает, что брокер транслирует актуальные данные.
Выбран неверный подход. Вам нужно организовать очередь (массив) и обработчик (в Main). После события запись добавляется в массив с указанием времени добавления, в main периодически (с заданным интервалом) проверяется, извлекается и обрабатывается. При таком подходе скрипт никогда не будет "спать" и сможет параллельно обрабатывать события от разных колл-беков.
Такой подход к организации ожидания события не дает права на ошибку и при любом некорректном входном параметре или ошибки выполнения getParamEx навсегда "повесит" скрипт
Космонавт написал: Станислав, вопрос не про скорость процессора, а про количество ядер. Если при 4 ядрах загрузка ниже 50%, какой смысл держать 4 ядра, может можно понизить до 3?
Зависит от того как реализована многопоточность в квике. Но все же повышение нагрузки с 30 до 50% на ядро, говорит о том, что некие задачи теперь работают последовательно, а раньше разбрасывались параллельно по ядрам.
Более быстрый процессор решит любую математическую задачу быстрее чем его медленный собрат. Однако, для конкретной задачи это может быть очень не существенно, что там за математика предшествует коллбекам неизвестно, поэтому кроме как тестированием это не проверить.
тот самый написал: я уже приводил 3 примера: чем больше на графиках наложено индикаторов - тем дольше выполняется скрипт (вне зависимости от того, что он мол де - находится "в майне") чем больше открыто графиков и окон в квике - тем дольше выполняются скрипты. ЭТО ПОЗОРНЫЙ ФАКТ о котором так любят умалчивать так называемые "разработчики" стОит поводить окном любой таблицы или графика в QUIK-е - скрипты - ожидаемо начинают притормаживать.
Выходит что луа машина в квике крутится в потоке его gui? Но это же очень плохо как для самого квика так и для сриптов...
Алексей Орешкин написал: А как вообще соединить LUA и Visual Studio Code ? Скачал расширение для Lua но толку никакого, подозреваю что делаю что то не так. есть у кого опыт?
Просмотреть -> Extensions В поиске вбить Lua Установить Lua language support for Visual Studio Code.
Вполне реально осуществить такое на Lua, для взаимодействия можно использовать файл с транзакциями или с дополнительными библиотеками именованные каналы, сокеты.