Данное уведомление обязательно к ознакомлению всеми участниками торгов на срочном рынке Московской биржи.
Сообщаем, что Московская биржа уведомила участников торгов о важных изменениях в новой версии торговой системы срочного рынка. Ключевым нововведением является увеличение размерности идентификатора заявок и сделок: после обновления торговой системы идентификатор будет занимать до 19 десятичных знаков. В промышленной системе данное изменение запланировано на 14 сентября 2020 года: https://www.moex.com/n29676
Уведомляем Вас, что старые версии терминалов QUIK не поддерживают полноценную работу с 19-значными номерами. Это ОЧЕНЬ ВАЖНО! Если Вы работаете со скриптами QLUA, обязательно выполните все нижеописанные рекомендации.
Сообщаем о мерах, которые необходимо предпринять для корректной работы с 19-значными номерами заявок и сделок в QLUA:
1. Для корректной работы с 19-значными номерами в QLUA потребуется обновление терминала QUIK до версии 8.5 или более новой. Для получения с сервера Вашего брокера новой версии терминала для ОС Windows, перейдите в торговом терминале QUIK в пункт меню Система / О программе / Проверить обновление программы.
Мы настоятельно рекомендуем получать обновление торгового терминала именно с сервера брокера, с которым Вы работаете, однако, если Ваш брокер еще не выложил соответствующее обновление на свои сервера, с целью отладки скриптов на QLUA, Вы можете скачать новую версию торгового терминала QUIK с нашего FTP: ftp://ftp.quik.ru/public/updates/8.7/quik_8.7.1_upd.zip
ВАЖНО!Перед обновлением обязательно сделайте резервную копию папки, в которой у Вас установлен торговый терминал QUIK.
2. В связи с необходимостью поддержки 19-значных номеров, в терминале версии 8.5 выполнено изменение версии LUA c 5.1 до 5.3. В связи с этим:
Выполнение скриптов, скомпилированных под версию Lua 5.1, будет невозможно на новой версии терминала QUIK, для решения проблемы потребуется повторная компиляция под версию Lua 5.3.
На нашем сайте в разделе «файловый архив» (https://arqatech.com/ru/support/files/) выложены новые версии индикаторов на Lua, которые совместимы как с Lua 5.3, так и с Lua 5.1. Если Вы использовали примеры этих скриптов в работе, их следует заново скачать, и обновить.
У меня есть скрипты на QLUA, однако эти скрипты не используются для работы с данными срочного рынка Московской биржи, я хочу обновить терминал до версии 8.5, должен ли я проводить повторную компиляцию скриптов, а также их отладку на версии 8.5?
Ответ:
Да, если Вы планируете обновлять терминал до версии 8.5, это надо сделать обязательно, даже если Вы не работаете на срочном рынке Московской Биржи.
2. Вопрос:
У меня есть скрипты на QLUA, однако эти скрипты не используются для работы с данными срочного рынка Московской биржи, на срочном рынке Московской Биржи я не торгую и не планирую торговать, надо ли мне обновляться до версии 8.5, проводить повторную компиляцию скриптов, а также их отладку или же можно остаться на старой версии терминала?
Ответ:
Если Вы не используете Ваши скрипты для работы с данными срочного рынка Московской биржи и не торгуете на этом рынке, то Вы можете какое-то время оставаться на версии терминала 8.4 (или более старой), повторная компиляция и отладка скриптов в этом случае не потребуется; однако эту процедуру все же потребуется выполнить, если Вы в последующем решите обновить терминал до версии 8.5 или более новой.
3. Вопрос:
У меня есть скрипты на QLUA, я используют эти скрипты для регистрации/снятия заявок на срочном рынке Московской биржи, что произойдет, если я не обновлю терминал до версии 8.5, не проведу отладку скриптов и не выполню их повтор компиляцию?
Ответ:
После внедрения 19-значных номеров заявок и сделок в промышленной системе срочного рынка Московской Биржи Ваши скрипты высоковероятно перестанут работать, Вам необходимо обязательно запланировать обновление терминала до версии 8.5, а также провести повторную компиляцию и отладку скриптов.
4. Вопрос:
Я не использую скрипты QPILE и QLUA, должен ли я выполнять какие-либо дополнительные действия перед обновлением терминала до версии 8.5?
Ответ:
Если Вы не используете скрипты QPILE и QLUA, то выполнение каких-либо дополнительных действий не потребуется.
5. Вопрос:
У меня нет скриптов на QLUA, но есть скрипты на QPILE, алгоритм которых никак не связан со срочным рынком Московской Биржи, должен ли я обновлять терминал до версии 8.5, и выполнять какие-либо дополнительные действия?
Ответ:
Если у Вас нет скриптов на QLUA, то выполнение каких-либо дополнительных действий при обновлении терминала до версии 8.5 не потребуется; если Ваши скрипты QPILE не работают с данными срочного рынка Московской Биржи, то их повторная отладка не потребуется.
6. Вопрос:
У меня нет скриптов на QLUA, но есть скрипты на QPILE, которые выставляют/снимают заявки на срочным рынке Московской Биржи; должен ли я обновлять терминал до версии 8.5, и выполнять какие-либо дополнительные действия?
Ответ:
После внедрения 19-значных номеров заявок и сделок в промышленной системе срочного рынка Московской Биржи Ваши QPILE скрипты высоковероятно перестанут работать, Вам необходимо обязательно запланировать обновление терминала до версии 8.5, а также реализовать Ваш алгоритм на языке QLUA.
7. Вопрос:
Будет ли корректно работать функция tostring с большими числами?
Ответ:
Да, будет.
8. Вопрос:
Поменяются ли типы данных у параметров таблиц и параметров функций, которые с ними работают?
Ответ:
Нет, не поменяются.
9. Вопрос:
Что делать если возникает ошибка вида "version mismatch in precompiled chunk"?
Ответ:
Это означает что у Вас используется скомпилированный lua проект созданный на версии Lua 5.1. Необходимо провести повторную компиляцию на Lua 5.3.
10. Вопрос:
Почему транзакция отвергается с ошибкой "Число не может содержать знак разделителя дробной части"?
Ответ:
Причина в неверном преобразовании из числа (например цены или количества) в строку. Начиная с Lua 5.3, для вещественных типов данных, при переводе из числа в строку функцией tostring, у целых чисел добавляется в конце ".0" Для решения проблемы, следует вместо функции tostring использовать другой метод, например: function tostringEX(x) return tostring(math.tointeger(x) or x) end
11. Вопрос:
Мои скрипты используются как на старых версиях так и на новых, как избежать создания отдельных скриптов для каждой версии?
Ответ:
Вы можете добавить в скрипт проверку версии терминала на соответствие. Например так: isValidVersion = (tonumber(string.sub(getInfoParam ("VERSION"), 1, 3)) or 8.5 >= 8.5) Переменная isValidVersion будет иметь значение true если терминал версии 8.5 или выше. В зависимости от значения этой переменной использовать те или иные функции. Кроме того, существует возможность проверки версии самого ядра Lua через встроенную константу _VERSION
12. Вопрос:
Что означает ошибка вида "bad header in precompiled chunk"?
Ответ:
Означает что у Вас используется скомпилированный lua проект созданный на х32 версии версии Lua. Необходимо провести повторную компиляцию на х64 Lua. В данном пункте версия Lua не играет роли, только разрядность
13. Вопрос:
Что делать если при подключении своей DLL к Lua скрипту возникает ошибка вида "too many C levels (limit is 200) in main function near some.dll"?
Ответ:
Необходимо вместо функции require использовать package.loadlib Например так: package.loadlib(getScriptPath() .. "\\some.dll", "luaopen_somemetod")() Где вместо some.dll указать имя Вашей DLL, а вместо luaopen_somemetod указать имя Вашего метода.
6. Проблемы работы с длинными номерами в QLUA (на любых версиях терминала на момент публикации данного уведомления). Для решения проблем пп. 5-6 следует установить версию терминала QUIK, которая на момент публикации данного уведомления еще не вышла, но планируется к выпуску до того, как данное изменение в торговой системе будет внедрено.
В связи с вышеизложенным настоятельно рекомендуется проверить работоспособность своих скриптов с 19-значными номерами заявок и сделок.
Настоятельно рекомендуем проверить тем, что еще не вышло и неизвестно как будет реализовано...
Более подробно распишите, как сделать эту волшебную операцию, Вы же не можете в открытую издеваться над пользователями?
Добрый день.
Цель данного оповещения - раннее предупреждение о грядущих изменениях, чтобы пользователи уже сейчас начинали работать в данном направлении. По поводу выхода соотв. версии рекомендуем следить за обновлениями в данной ветке форума.
В связи с вышеизложенным настоятельно рекомендуется проверить работоспособность своих скриптов с 19-значными номерами заявок и сделок.
Настоятельно рекомендуем проверить тем, что еще не вышло и неизвестно как будет реализовано...
Более подробно распишите, как сделать эту волшебную операцию, Вы же не можете в открытую издеваться над пользователями?
Добрый день.
Цель данного оповещения - раннее предупреждение о грядущих изменениях, чтобы пользователи уже сейчас начинали работать в данном направлении. По поводу выхода соотв. версии рекомендуем следить за обновлениями в данной ветке форума.
Если вы хотя бы в общих чертах опишите грядущие изменения, то мы начнем работать. Подтвердите информацию: 1. Lua обновляется до версии 5.3 2. Тип полей во всех текущих функциях, которые в качестве параметров требуют ввода номера заявки или сделки или возвращают номер заявки или сделки, НЕ поменяется. 3. Функция tostring будет корректно работать в новыми большими числами. 4. Какие еще возможные изменения могут быть?
Александр М написал: 2. Тип полей во всех текущих функциях, которые в качестве параметров требуют ввода номера заявки или сделки или возвращают номер заявки или сделки, НЕ поменяется.
По-моему, весь смысл перехода на 5.3 в том, чтообы тип этих полей поменялся. В NUMBER больше 51 бита не впереть даже на 5.3.
Александр М написал: 2. Тип полей во всех текущих функциях, которые в качестве параметров требуют ввода номера заявки или сделки или возвращают номер заявки или сделки, НЕ поменяется.
По-моему, весь смысл перехода на 5.3 в том, чтообы тип этих полей поменялся. В NUMBER больше 51 бита не впереть даже на 5.3.
Там хитрее сделано. Пока идёт работа только с целыми числами, используются все биты как в стандартной целочисленной арифметике в других языках, а вот при смешивании целых чисел и double получается результат double. Например, для перевода целого числа x в double рекомендуют делать что-то типа x = x + 0.0
Т.е. если, напр, из большой целочисленной переменной вычесть другую переменную, которая нечаянно окажется double, то результат будет тоже double и в итоге потеря точности?
Александр М написал: 2. Тип полей во всех текущих функциях, которые в качестве параметров требуют ввода номера заявки или сделки или возвращают номер заявки или сделки, НЕ поменяется.
По-моему, весь смысл перехода на 5.3 в том, чтообы тип этих полей поменялся. В NUMBER больше 51 бита не впереть даже на 5.3.
выдержка из Lua 5.3: "Стандартный Lua использует 64-битные целые (integer) и вещественные числа двойной точности (double 64-bit)"
Александр М написал: вещественные числа двойной точности (double 64-bit)
Только там под мантиссу 52 бита оставлено, откуда и все нынешние проблемы. Там еще старший бит неявный, подразумевается всегда единица, а если это не так, получается денормализованное число и т.д. и т.п., в общем в даблы 64 бита не влезают хоть тресни. Более того, никакие ухищрения вроде *reinterpret_cast<unsigned long long *>(&dbl) = 0xFFFFFFFFFFFFFFFFULL надежными не будут, дабл всегда может заехать в сопроцессор без уведомления, а тот его "подправит" под ожидаемый формат, да и сишный рантайм тоже ожидает дабл в виде дабла и может что-нибудь с ним сделать под ковром.
Александр М написал: вещественные числа двойной точности (double 64-bit)
Только там под мантиссу 52 бита оставлено , откуда и все нынешние проблемы. Там еще старший бит неявный, подразумевается всегда единица, а если это не так, получается денормализованное число и т.д. и т.п., в общем в даблы 64 бита не влезают хоть тресни. Более того, никакие ухищрения вроде *reinterpret_cast<unsigned long long *>(&dbl) = 0xFFFFFFFFFFFFFFFFULL надежными не будут, дабл всегда может заехать в сопроцессор без уведомления, а тот его "подправит" под ожидаемый формат, да и сишный рантайм тоже ожидает дабл в виде дабла и может что-нибудь с ним сделать под ковром.
Александр М написал: Зачем его в double переводить?
Значит, я исходный посыл не так понял. Конечно не нужно переводить. Главное, как выше написали, как-нибудь неожиданно для себя не перевести:
Цитата
In a conversion from integer to float, if the integer value has an exact representation as a float, that is the result. Otherwise, the conversion gets the nearest higher or the nearest lower representable value. This kind of conversion never fails
Уважаемые клиенты, исходное сообщение данной темы дополнено следующей информацией:
Цитата
Сообщаем о мерах, которые необходимо предпринять для корректной работы с 19-значными номерами заявок и сделок в QLUA: 1. Для корректной работы с 19-значными номерами в QLUA потребуется обновление терминала QUIK. На момент публикации данного уведомления версия с поддержкой 19-значных номеров в QLUA еще не вышла, но планируется к выпуску до того, как данное изменение в торговой системе будет внедрено. Новость о выпуске версии терминала QUIK будет размещена на соответствующей странице нашего сайта (https://arqatech.com/ru/about/news/), кроме того, мы сообщим об этом в данной ветке форума. 2. В связи с необходимостью поддержки 19-значных номеров, в терминале новой версии запланировано изменение версии LUA c 5.1 до 5.3. Это, в свою очередь, означает следующее: - Выполнение скриптов, скомпилированных под версию Lua 5.1, будет невозможно на новой версии терминала QUIK, для решения проблемы потребуется повторная компиляция под версию Lua 5.3; - Lua 5.3 частично обратно не совместим с версией Lua 5.1, поэтому мы настоятельно рекомендуем провести повторную отладку скриптов на новой версии терминала, и убедиться в их работоспособности; более подробную информацию о совместимости Lua 5.1 и 5.3 можно получить по ссылкам: https://www.lua.org/manual/5.3/manual.html#8 https://www.lua.org/manual/5.2/manual.html#8 https://www.lua.org/manual/5.1/manual.html#7
На нашем сайте в разделе «файловый архив» (https://arqatech.com/ru/support/files/) выложены новые версии индикаторов на Lua, которые совместимы как с Lua 5.3, так и с Lua 5.1. Если Вы использовали примеры этих скриптов в работе, их следует заново скачать, и обновить (это можно и нужно сделать, не дожидаясь выхода новой версии терминала QUIK с поддержкой Lua 5.3).
Ответы на часто задаваемые вопросы:
Вопрос:
Будет ли корректно работать функция tostring с большими числами?
Ответ:
Да будет.
Вопрос:
Поменяются ли типы данных у параметров таблиц и параметров функций, которые с ними работают?
Кстати! Уважаемые разработчики Квика! У вас же всяко-разно есть уже бета (или может даже релиз-кандидат) 8.5 версии с этими доработками.
Учитывая, так сказать, текущую конъюнктуру биржевых (и не только) реалий, почему бы вам не выложить предварительную версию (на ftp), разумеется с соответствующей декларацией-предупреждением (ну как это обычно делается). Проявить, так сказать, заботу о своих дорогих пользователях, дав им больше времени на проверку и адаптацию своих систем. Заодно получить обратную связь по апробации всего этого дела.
Понятно, что вам захочется сразу в ответ дать категоричное Нет. Но, большая просьба, попытаться донести это предложение до принимающих такие решения. Нормальная же, современная практика. Глядишь, и будет позитив... :)
Latrop написал: Кстати! Уважаемые разработчики Квика! У вас же всяко-разно есть уже бета (или может даже релиз-кандидат) 8.5 версии с этими доработками.
Учитывая, так сказать, текущую конъюнктуру биржевых (и не только) реалий, почему бы вам не выложить предварительную версию (на ftp), разумеется с соответствующей декларацией-предупреждением (ну как это обычно делается). Проявить, так сказать, заботу о своих дорогих пользователях, дав им больше времени на проверку и адаптацию своих систем. Заодно получить обратную связь по апробации всего этого дела.
Понятно, что вам захочется сразу в ответ дать категоричное Нет. Но, большая просьба, попытаться донести это предложение до принимающих такие решения. Нормальная же, современная практика. Глядишь, и будет позитив... :)
Добрый день.
Версию обязательно предоставим, потерпите ещё немного пожалуйста.
Хотелось бы получить официальный ответ, можно ли начинать тестирование. Также я увидел, что там 2 dll и версии lua 5.1 и версии 5.3 Какая основная и вообще по какому принципу они используются при запуске lua-скриптов?
Александр М написал: увидел, что там 2 dll и версии lua 5.1 и версии 5.3 Какая основная
Можно предположить, что 5.1 оставили для какой-то там совместимости, 5.3 экспортирует все то же самое (с поправкой на версию луа). Пока не обнаружил, чтобы что-нибудь крэшнулось без 5.1 (просто убрал ее).
Александр М написал: увидел, что там 2 dll и версии lua 5.1 и версии 5.3 Какая основная
Можно предположить, что 5.1 оставили для какой-то там совместимости, 5.3 экспортирует все то же самое (с поправкой на версию луа). Пока не обнаружил, чтобы что-нибудь крэшнулось без 5.1 (просто убрал ее).
Не хочется просто так экспериментировать. Я все-таки подожду официальный ответ. В Документации тоже ни слова, что кстати странно, как минимум должны были именно в Документации озвучить, что версия lua меняется и ссылку дать на различия в версиях.
Александр М написал: В Документации тоже ни слова, что кстати странно, как минимум должны были именно в Документации озвучить, что версия lua меняется и ссылку дать на различия в версиях.
Справедливости ради, при первом запуске 8.5 выкинул диалог с как раз этим предупреждением о смене версии и ссылкой куда-то, как бы не сюда.
Собираем с 5.1, запускаем в 8.3, получаем три сообщения: ctor, dtor, Exception caught. Все правильно, lua_error генерирует эксепшены и это прекрасно. Теперь собираем с 5.3, запускаем в 8.5, получаем ДВА сообщения: ctor, dtor. Эксепшен не пойман. Допустив, что мой рантайм не обязательно совпадает с арковским, повторил упражнение на чистом SEH. То же самое, нет там эксепшена. Вариант "собирали gcc + dwarf" отметаю как малореальный. Остается вариант...
...луа с лонгджампами собрали? Это же жесть. Может, пока (почти) никто не видел, пересобрать по-тихому? )
Александр М написал: увидел, что там 2 dll и версии lua 5.1 и версии 5.3 Какая основная
Можно предположить, что 5.1 оставили для какой-то там совместимости, 5.3 экспортирует все то же самое (с поправкой на версию луа). Пока не обнаружил, чтобы что-нибудь крэшнулось без 5.1 (просто убрал ее).
Что касается совместимости с 5.1 (видимо для этого там lua5.1.dll), то она несовместимая пока получается.
Например, Квик просто весь падает при попытке запустить Lua Socket (версия для lua51, x64 отлично работавшая под Quik 8.4). Копия lua5.1.dll в lua51.dll (необходимая для станд сборки Lua Socket) делалась.
Latrop написал: Что касается совместимости с 5.1 (видимо для этого там lua5.1.dll), то она несовместимая пока получается.
Подтверждаю, вышеописанная длл из одной функции тоже падает, если собрать под 5.1 и запустить в 8.5. Причем если ошибка не генерируется, падает только скрипт и квик пишет access violation, если генерируется - падает весь квик без дампа. Если убрать lua5.1.dll, разрушения меньше, скрипт просто не может загрузить длл. Так что присутствие ее остается загадкой.
Хотелось бы получить официальный ответ, можно ли начинать тестирование. Также я увидел, что там 2 dll и версии lua 5.1 и версии 5.3 Какая основная и вообще по какому принципу они используются при запуске lua-скриптов?
Собираем с 5.1, запускаем в 8.3, получаем три сообщения: ctor, dtor, Exception caught. Все правильно, lua_error генерирует эксепшены и это прекрасно. Теперь собираем с 5.3, запускаем в 8.5, получаем ДВА сообщения: ctor, dtor. Эксепшен не пойман. Допустив, что мой рантайм не обязательно совпадает с арковским, повторил упражнение на чистом SEH. То же самое, нет там эксепшена. Вариант "собирали gcc + dwarf" отметаю как малореальный. Остается вариант...
...луа с лонгджампами собрали? Это же жесть. Может, пока (почти) никто не видел, пересобрать по-тихому? )
Добрый день,
Действительно, lua53.dll собрана с отличной от lua5.1.dll конфигурацией. Мы исправим конфигурацию в ближайшем обновлении ПО.
А у меня и без dll скрипты разваливаются при использовании coroutine
Посреди скрипта вызов getScriptPath() начинает вдруг возвращать вместо тип string тип function. При старте скрипта возвращает правильно. Внешние библиотеки все убрал на время теста. На 5.1 работает все на ура.
А вот с индикаторами пролем не заметил, и при использовании внешних библиотек тоже. Видимо, рубильник между вызовами oncalculate работает исправно, да и корутин нет.
Здравствуйте. Помогите собрать dll под QUIK 8.5, не собирается. Под QUIK 8.0 ранее собрал, но она не подключается в lua скрипте. Использую require, а QUIK в ответ Critical error ACCESS_VIOLATION in script
Файлы из архива заменил, но не собирается. Ошибки: Ошибка 1 error C2079: "ls_lib" использует неопределенный struct "ls_lib" Ошибка 2 error C2078: слишком много инициализаторов Ошибка 3 error C3861: luaL_openlib: идентификатор не найден 4 IntelliSense: недопустимый неполный тип (это она ls_lib ругается) 5 IntelliSense: идентификатор "luaL_openlib" не определен
Собираем с 5.1, запускаем в 8.3, получаем три сообщения: ctor, dtor, Exception caught. Все правильно, lua_error генерирует эксепшены и это прекрасно. Теперь собираем с 5.3, запускаем в 8.5, получаем ДВА сообщения: ctor, dtor. Эксепшен не пойман. Допустив, что мой рантайм не обязательно совпадает с арковским, повторил упражнение на чистом SEH. То же самое, нет там эксепшена. Вариант "собирали gcc + dwarf" отметаю как малореальный. Остается вариант...
...луа с лонгджампами собрали? Это же жесть. Может, пока (почти) никто не видел, пересобрать по-тихому? )
Добрый день,
Описанная в данном инциденте ошибка была исправлена в версии 8.5.2 терминала QUIK. Рекомендуем вам обновить версию программы.
Александр М написал: Хороший ответ, поясняющий. Зачем в дистрибутиве, по которому официально обьявлено, что он переведен на lua 5.3 нужен файл lua5.1.dll?
Ответ уже был дан, просто так надо. Потом может удалим.
Александр М написал: Зачем в дистрибутиве, по которому официально обьявлено, что он переведен на lua 5.3 нужен файл lua5.1.dll?
Как зачем? Терминал же теперь поддерживает две версии 5.1 и 5.3, не?
С чего вы это взяли? Читайте внимательно официальное сообщение:
"В связи с необходимостью поддержки 19-значных номеров, в терминале версии 8.5 выполнено изменение версии LUA c 5.1 до 5.3. В связи с этим:
Выполнение скриптов, скомпилированных под версию Lua 5.1, будет невозможно на новой версии терминала QUIK, для решения проблемы потребуется повторная компиляция под версию Lua 5.3.
Imersio Arrigo написал: поддерживает две версии 5.1 и 5.3, не?
По крайней мере для пользовательских скриптов это малореально в принципе. Ну то есть героически порешать может и можно, только зачем. Скорей всего какой-то из плагинов тоже на луа завязан и его до сих пор не переписали. Как перепишут, так и 51 выкинут.