Александр написал: Всегда и везде будет кодировка windows-1251 или она зависит от терминала (его языка), ос (наличие кирилицы или нет) или сервека квик?
Вы задаете одни и теже вопросы по кругу. Вам уже дали ответ:
Цитата
Sergey Gorokhov написал: зависит от настроек сервера, но как правило большая часть (или вообще все) используют кодировку ANSI с кодовой таблицей Windows-1251
Александр написал: Странный ответ. При чем здесь lua? Терминал же сохраняет строки для дальнейшего использования в луа?Вот я хочу узнать, что вы туда записываете.
Странный вопрос, Вы же спрашиваете про Lua, а не про терминал QUIK. О tostring нам известно не больше чем то что написано в официальной документации на сайте lua.org Если интересует в какой кодировке сервер QUIK отправляет данные на терминал, то в ANSI.
Александр, Зачем? Нам нет смысла отдельно проводить исследования. Если Вам интересен ответ, Вы можете узнать его самостоятельно, либо попробовать поискать ответ в интернете. Lua разработан не нами, наверняка на форумах которые ему посвящены Вы найдете что то нужно.
Sergey Gorokhov написал: Опишите более развернуто что именно Вы хотите получить
например, что-то подобное... LUA:
Код
function threadfunc ( .. .)
while not CuttentThreadTerminated do
--
end
end
thread = CreateThread(threadfunc, .. .)
thread.TerminateThread ()
thread.Join ()
thread = nil
collectgarbage()
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Автор кода не предусмотрел автосоздания следующих файлов
Код
PositionList = "c:\\TurboMartin\\Position.txt" -- здесь хранятся данные о позиции.
CurrentState = "c:\\TurboMartin\\CurrentState.txt" -- здесь хранятся данные о позиции.
LogFileName = "c:\\Log\\turbomartin_log.txt" -- Технический лог.
Сергей Привалов написал: Метки это рисунок, который лежит в файле. Тоже не нашел возможность как из lua нарисовать прямоугольник на графике. Руками можно а вот из кода как ? Или я плохо искал ? Подскажите, как нарисовать прямоугольник ?
Нужно нарисовать прямоугольник в bmp файле, а потом добавить его на график через функцию AddLabel
Все правильно, число 0 при преобразовании в строку дает "0" И это не баг. Иначе 10 было бы "100" и тогда да это уже был бы баг.
Если нужно "00" то преобразуйте явно с добавлением "0" через условие, если длина строки равна 1 символу, или через функцию string.format("%02d", alltrade.datetime.min)
Виктор, Тогда у Вас кардинально другая проблема и ничего общего у Вас с проблемой автора топика нет. По идее в папке с терминалом должна быть папка dmp, посмотрите в ней файлы, если есть то пришлите нам на quiksupport@arqatech.com
Андрей написал: В итоге когда квик 8.5 с запущенным данным скриптом выедает полностью всю память, память очищается, и сново начинает заполнятся, затем на второй и третий раз полного заполнения памяти квик падает без дампа. Можно использовать sleep(15) тогда просто память медленнее растет. В 7 квике такого сильного роста памяти нет.
Проблема изучается. Постараемся в ближайшее время дать ответ.
Здравствуйте, Сообщение о запрете возвращает сервер QUIK, а не терминал и не lua. Вам нужно обратиться к брокеру для выяснения причин возникновения сообщения.
Андрей написал: 1. При аварийном завершении работы скрипта не удаляется окно(таблица AllocTable()) которое было создано в квике
Пока не вызван DestroyTable таблица не должна удаляться. А он не может быть вызван по причине аварийного завершения работы скрипта. В старых версиях также было.
Цитата
Андрей написал: 2. Не освобождается память по коду ниже, при использовании SetEmptyCallback очищается нормально
Поясните подробней как проводилось исследование, как был сделан вывод?
rst9 написал: и, кстати, арка текнолоджис, у меня вам предложение: может вы сделаете апи для тредов, раз уж вы все равно родили диалект lua под названием qlua?
Опишите более развернуто что именно Вы хотите получить
ISR написал: Так как можно представить дробное число без разделителя дроби? Ведь именно на такой разделитель и ругается квик.
QUIK ругается потому что ему передают дробное число а на инструменте целый шаг цены. ели шаг цены дробный то можно передавать дробное число округленное до шага цены.
Latrop написал: Примитивная dll в OnAllTrade просто дергать напр getInfoParam("VERSION") и больше вообще ничего, никаких эксепшенов, но после коннекта и получения прим 50-100 тыс тиков валится:
Critical error ACCESS_VIOLATION in script...
Что это за беда такая может быть?...
Если в OnAllTrade вообще ничего не делать, пустышка, то не падает. Но такой способ обхода проблемы не очень подходит :)
Добрый день,
К сожалению, нам не удалось по присланным данным воспроизвести ошибку. Если это возможно, пришлите пример кода, работа с которым приводит к сбою.
quio написал: Господа, а у вас вызов функций Квика через lua_call из своих потоков с новым состоянием вообще работет?
Создаю новое состояние через lua_newthread(L), передаю его с свой поток, созданный через _beginthreadex, из этого потока вызываю функцию через lua_call. И ничего не проиходит - на верхушке стека остается название функции. Если вызывать lua_call из потоков Квика (с его состоянием), все в порядке.
Раньше свою длл нужно было с qlua.dll линковать, как раз что-то с потоками было связано. Теперь в ней нет функций, прилинковал свою длл к lua53.dll.
Добрый день,
В Lua машине 5.3.5 нет такой функции как lua_call (). Есть её аналог lua_callk. Используйте ее. Либо добавьте в свой код что то вроде этого: #define lua_call(L,n,r) lua_callk(L, (n), ®, 0, NULL)
rst9 написал: воспроизвести можно так: 1. создаем dll, в ней линкуемся с lua53.dll. 2. в luaopen_... создаем новый инстанс lua vm при помощи luaL_newstate() 3. инициализируем его при помощи luaL_openlibs() получаем исключение "multiple Lua VMs detected. Expected 5.3 instead of 0.0"
что-то вы там не доделали, исправьте, пожалуйста. спасибо.
Добрый день,
Действительно, есть ошибка загрузки lua53.dll в сторонние приложения. Мы исправим её в ближайшем обновлении ПО. Приносим извинения за доставленные неудобства.
Дмитрий написал: Я сразу написал, что у меня нет возможности, потому что я вообще не знаком с Lua. К автору скрипта я то же не могу обратиться, т.к. скачал 2 или больше года назад. Я не сохранял ссылку на место скачки, т.к. не предполагал, что ARQA когда-то и зачем-то захочется внедрить в QUIK другую обратно не совместимую версию Lua
Если нет автора, попросите помощи у людей на форуме, может найдется герой который исправит нужный Вам код за деньги или просто по доброте душевной.
Цитата
Дмитрий написал: И как я вижу все обсуждение закончилось "Ваше письмо получено, проблема изучается".
не путайте темы, вопрос про ".0" вообще никак, от слова совсем, не связан с аварийным завершением работы терминала у пользователя ISR и то что эти два обсуждения попали в одну ветку совершенно не значит что между ними есть что-то общее.
Цитата
Дмитрий написал: Вы, как вижу, прекрасно понимаете, что и где надо поменять. Так может сделаете доброе дело и подправите скрипт? В конце концов, это же Ваша инициатива с заменой версии Lua создала людям проблему.
Написание скриптов для клиентов не является задачей тех поддержки. Мы можем указать на ошибку в коде, и даже указать как именно ошибку исправить, но само исправление должны сделать Вы, ну или человек который готов будет Вам помочь.
Цитата
Дмитрий написал: Не говоря о том, что за столько лет существования QUIK такая базовая функция как автоматическое выставление стопа/тэйка по открытию позиции могла быть имплементирована в сам QUIK без дополнительных костылей.
Эта тема вообще никак не связана с Lua, если хотите доработку в терминале, оформите пожелание в соответствующей ветке форума
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Sergey Denegin написал: Как одно из решений - квик принимает от луа номер в виде текста, а сам отправляет заявку на биржу в нужном формате. Доработка должна быть минимальной, а благодарность от пользователей огромная
Вы не поверите, но QUIK и так принимает от Lua номер в виде текста, и даже более того в документации четко сказано что вообще все параметры в транзакции должны быть в виде текста.
Цитата
foobar написал: 1. Какие изменения будут в trans2quik в связи с этим? Там номер заявки определён как LONG, оно туда поместится?
QUIK
Вы не правы, в trans2quik_api.h мы видим следующее:
EntityNumber nOrderNum где typedef unsigned __int64 EntityNumber;
Согласно открытым источникам (можете погуглить) тип unsigned __int64 ограничен диапазоном от 0 до 18 446 744 073 709 551 615. Что больше 19 символов.
Цитата
foobar написал: 2. Quik For Android, который назван "устаревшим" работает с ключами, а новая программа только с паролем (и SMS, которые я люто не люблю). Будет ли доработана старая версия в связи с этим?
Считайте что нет больше такого ПО. А второй фактор можно отключить обратившись к брокеру.
Цитата
foobar написал: 3. Новая версия, которую я скачал с сайта брокера, ругается на то, что телефон рутованный. На мой взгляд, некорректно, указывать пользователям как они должны настраивать собственное устройство. Можно сделать предупреждение отключаемым?
Если Вы ранее считали безопасным использование своего устройства с root-правами (расширенными), то ничего не мешает считать так и дальше.
Цитата
Sergey Denegin написал: А свалить проблемы разработчиков софта на пользователей, не очень красивых ход для имиджа.
Можете остаться работать на 7й версии, но с некоторыми неудобствами которые всё-таки можно преодолеть. Например, что мешает номер заявки для снятия получать из ответов на транзакции?
Старатель написал: Sergey Gorokhov , Так проблема в самом QUIK, который в getParamEx возвращает строку с дробной частью: "1.000000" вместо "1", а на входе в sendTransaction для того же инструмента требует строку без разделителя.
Вы не правы, в представленном коде SEC_PRICE_STEP используется в математических операциях, так что проблема точно не с ним, а с тем что в результате попадает в tostring
Дополним, как уже было сказано Lua 5.3 при переводе числа с типом float в строк добавляет к строке суфикс ".0" Далее возникает вопрос от куда возник float, если все числа "целые". Lua считает float любое число с разделителем (кстати не только lua). если указать SEC_PRICE_STEP = 1.0 то получите ту же ошибку.
Да getParamEx возвращает строку с дробной частью: "1.000000" Но проблема же не в этом, вернее не только в этом, в конкретно этой ситуации изменение формата SEC_PRICE_STEP помогло бы. Но стоит поменять инструмент на любой другой в котором дробный шаг цены и ошибка опять бы появилась.
По этому правильно форматировать то что попадает непосредственно в параметры транзакции, а не то что было до этого.
Старатель написал: Sergey Gorokhov, Так проблема в самом QUIK, который в getParamEx возвращает строку с дробной частью: "1.000000" вместо "1", а на входе в sendTransaction для того же инструмента требует строку без разделителя.
Вы не правы, в представленном коде SEC_PRICE_STEP используется в математических операциях, так что проблема точно не с ним, а с тем что в результате попадает в tostring
rst9 написал: даже еще веселее: lua_version() для инстанса, передаваемого в luaopen_ возвращает значение 0.0 (должна, очевидно, 5.3), а для создаваемого нового инстанса luaL_newstate() - luaversion() возвращает мусорное значение (должна так же возвращать 5.3).
Здравствуйте! Проблема изучается. Постараемся в ближайшее время дать ответ.
Latrop написал: Примитивная dll в OnAllTrade просто дергать напр getInfoParam("VERSION") и больше вообще ничего, никаких эксепшенов, но после коннекта и получения прим 50-100 тыс тиков валится:
Critical error ACCESS_VIOLATION in script...
Что это за беда такая может быть?...
Если в OnAllTrade вообще ничего не делать, пустышка, то не падает. Но такой способ обхода проблемы не очень подходит :)
Здравствуйте! Проблема изучается. Постараемся в ближайшее время дать ответ.
quio написал: Создаю новое состояние через lua_newthread(L), передаю его с свой поток, созданный через _beginthreadex, из этого потока вызываю функцию через lua_call. И ничего не проиходит - на верхушке стека остается название функции. Если вызывать lua_call из потоков Квика (с его состоянием), все в порядке.
Здравствуйте! Проблема изучается. Постараемся в ближайшее время дать ответ.
Здравствуйте, Начиная с версии 8.5 терминала выполнено обновление ядра Lua до версии 5.3, и об этом мы не однократно всех уведомляли разными способами. Вам следует адаптировать скрипт под новую версию. Если нет возможности сделать это самостоятельно рекомендуем обратиться к автору скрипта. В частности, возникшая у Вас проблема описана на официальном сайте lua:
Цитата
The conversion of a float to a string now adds a .0 suffix to the result if it looks like an integer. (For instance, the float 2.0 will be printed as 2.0, not as 2.) You should always use an explicit format when you need a specific format for numbers. (Formally this is not an incompatibility, because Lua does not specify how numbers are formatted as strings, but some programs assumed a specific format.)
Проще говоря, замените везде функцию tostring на string.format Например тут наши пользователи обсуждали такой же вопрос