Нашел баги, если вы будете каждые 10 мск пересчитывать число строк в таблице
Пользователь
Сообщений: Регистрация: 31.03.2016
30.08.2018 09:41:21
А можете код привести, который подтверждает это?
А то уже 5 минут жду, не могу ошибки дождаться.
Или не так считаю количество "строк"?
Скрытый текст
Код
function main()
local t = {
["A"] = 1,
["B"] = 1,
["C"] = 1,
["D"] = 1,
}
local _c
local _t = os.time()
local c_err = 0
while true do
local c = 0
for k,v in pairs(t) do
c = c + 1
end
if not _c then
_c = c
message("c = "..tostring(c),1)
else
if _c ~= c then
c_err = c_err + 1
message( "_c ~= c "..tostring(_c).." ~= "..tostring(c), 3 )
end
end
sleep(10)
local time = os.time()
if time - _t > 10 then
message("Количество неправильных количеств: "..tostring(c_err).." (_c = "..tostring(_c)..")",1)
_t = time
end
end
end
Вид бумаги в OnTrade, получить вид бумаги, по которой произошел трейд
Пользователь
Сообщений: Регистрация: 31.03.2016
20.07.2018 13:55:45
Список param_name для getParamEx:
Скрытый текст
Заголовок ТТП
param_name
% измен.закр.
LASTCHANGE
Bloomberg ID
BSID
CFI
CFI_CODE
CUSIP
CUSIP
ISIN
ISINCODE
RIC
RIC
SEDOL
SEDOL
StockCode
STOCKCODE
StockName
STOCKNAME
Агент по размещ.
AGENT_ID
Ставка
PERCENTRATE
Анон. торг.
ANONTRADE
Базовая валюта
FIRST_CUR
Баз.актив
OPTIONBASE
Баз.курс
BASEPRICE
БГОНП
BGONP
БГОП
BGOP
Бирж.Сессия
TRADINGPHASE
Бумага покупки
BUY_SEC
Бумага прод.
SELL_SEC
Валюта
SEC_FACE_UNIT
Валюта шага цены
CURSTEPPRICE
Верх.гран.
RTH
Верх.гр.риска %
REPOHRATE
Верх.граница руб
RTH_RUB
Волатильность
VOLATILITY
Вр. изм.м.т.ц.
MIN_CURR_LAST_TI
Начало аук.план
PLANNEDTIME
Время изм.
CHANGETIME
Время послед.
TIME
ГО покупателя
BUYDEPO
ГО продавца
SELLDEPO
Дата выпл. куп.
NEXTCOUPON
Дата исп.
EXPDATE
Дата расч.доход
BUYBACKDATE
Погашение
MAT_DATE
Дата изм.лота
LOTSIZECHANGEDAT
Дата посл.торг.
PREVDATE
Дата расч.
SETTLEDATE
Дата расч.1
SETTLEDATE1
Дата торгов
TRADE_DATE_CODE
Дисбаланс ПА
IMBALANCE
Дисконт %
DISCOUNT
Дисконт РЕПО %
REPODISCOUNT
Дисконт1
DISCOUNT1
Дисконт2
DISCOUNT2
Дисконт3
DISCOUNT3
Длит.куп.
COUPONPERIOD
Доход.закр.
CLOSEYIELD
Доход.оц.
YIELDATWAPRICE
Доход.пред.оц.
YIELDATPREVWAPR
Доход.пред.оц.
YIELDATPREVWAPRI
Доходность
YIELD
Дюрация
DURATION
Значение
CURRENTVALUE
Зн.закр.
LASTVALUE
Открытие
OPENVALUE
Капитал. бумаг
ICAPITAL
Квалиф. инвестор
QUALIFIED
Класс баз.актива
OPTIONBASECLASS
Класс покупки
BUY_CLASS
Класс прод.
SELL_CLASS
Код бумаги
CODE
Код класса
CLASS_CODE
Код расч.
SETTLECODE
Кол-во аукц.
AUCTVOLUME
Кол-во послед.
QTY
Общее кол-во
VOLTODAY
Заявки куп.
NUMBIDS
Заявки прод.
NUMOFFERS
Кол-во отк.поз.
NUMCONTRACTS
Кол-во сд.аукц.
AUCTNUMTRADES
Кол-во сделок
NUMTRADES
Комментарий
SEC_COMMENT
Кон.диапазона
QTYEND_RUB
Кот. клиринга
CLPRICE
Котир.валюта
SECOND_CUR
К.верх.гран.
K_H
К.нижн.гран.
K_L
Бумага сокр.
SHORTNAME
Кратность лота
LOT
Предл.
OFFER
Лучш. пред
LOWOFFER
Спрос
BID
Лучш. спрос
HIGHBID
Предл.сессии
LASTOFFER
Спрос сессии
LASTBID
Макс.акт.точ.кол
MAX_ACT_QTYSCALE
Макс. цена
HIGH
Макс. возм. цена
PRICEMAX
Макс.
HIGHVAL
Максимум
MAX
Марж.
MARG
Мин.тек.цена
MIN_CURR_LAST
Мин. цена
LOW
Мин. возм. цена
PRICEMIN
Мин.
LOWVAL
Минимум
MIN
Шаг цены
SEC_PRICE_STEP
Класс
CLASSNAME
НКД
ACCRUEDINT
Начало веч.
EVNSTARTTIME
Начало
STARTTIME
Начало утр.
MONSTARTTIME
Необесп. торги
ASSURED
Нижн.гран.
RTL
Ниж.гр.риска %
REPOLRATE
Ниж.граница руб
RTL_RUB
Номинал
SEC_FACE_VALUE
Оборот
VALTODAY
Оборот посл.
VALUE
Объем аукц.руб
AUCTVALUE
Объем в обр.
ISSUESIZEPLACED
Объем обр.
ISSUESIZE
Объем инд.сдел.
IVOLUME
Окончание веч.
EVNENDTIME
Окончание
ENDTIME
Окончание утр.
MONENDTIME
Открытие
IOPEN
Оф.тек.цена
LCURRENTPRICE
Оф.цена закр.
LCLOSEPRICE
Погашение пок.
BUY_MAT
Погашение прод.
SELL_MAT
Подтип инстр-та
SECSUBTYPESTATIC
Бумага
LONGNAME
Кол. предл.
OFFERDEPTH
Пред. оц.
PREVWAPRICE
Пред.расч.цена
PREVSETTLEPRICE
Пред. Лот
PREVLOTSIZE
Пред.расч.объем
PREVSETTLEVOL
Прием в обеспеч.
COLLATERAL
Призн.котир.
ADMITTEDQUOTE
Призн.кот.пред.
PREVADMITTEDQUOT
Валютный актив
ISCURR
% изменение
PCHANGE
Размер купона
COUPONVALUE
Лот
LOTSIZE
Размещение IPO
PRIMARYDIST
Изм. к пред.оц.
PRICEMINUSPREVWA
Тренд
TRADECHANGE
Измен. к закр.
CHANGE
Разн. опц.
OPTIONKIND
Расч.ст.РЕПО %
REPOCRATE
Расч. цена
SETTLEPRICE
Расч.цена
RC
Расч. цена РЕПО
REPOPRICERUB
Расч. цена, руб.
RCRUB
Реал. расч. цена
R_SETTLEPRICE
Рег.номер
REGNUMBER
Рын.цена
MARKETPRICETODAY
Рын.цена2
MARKETPRICE2
Вч.рын.цена
MARKETPRICE
Рын.пок.
MARKETVOLB
Рын.прод.
MARKETVOLS
Сим.ст.нул.ур.,%
DISCOUNT_SYM
Сопр.валюта
CURRENCYID
Сессия
TRADINGSTATUS
Кол. спрос
BIDDEPTH
Ср. взв. цена
WAPRICE
Ставка пад. 0,%
DISCOUNTL0
Ставка пад. %
DISCOUNT_L
Ставка рост. 0,%
DISCOUNTH0
Ставка рост. %
DISCOUNT_H
Ставка ЦБ
CBRATE
Статус кл.
CLSTATE
Статус
STATUS
Ст. шага цены
STEPPRICE
Ст. шага цены
STEPPRICET
Ст.шага цены кл.
STEPPRICECL
Ст. шага промкл.
STEPPRICEPRCL
Общ. предл.
OFFERDEPTHT
Общ. спрос
BIDDEPTHT
Рын. котир.
REALVMPRICE
Курс
CROSSRATE
Теор. цена
THEORPRICE
Тип
SECTYPE
Тип актива
ASSETTYPE
Тип инстр-та
SECTYPESTATIC
Тип опциона
OPTIONTYPE
Тип фьючерса
FUTURETYPE
Тип цены
QUOTEBASIS
Тип цены обл.
OBLPERCENT
Тип цены
ISPERCENT
Точн. кол-ва
QTY_SCALE
Точность
SEC_SCALE
Листинг
LISTLEVEL
Цена аукц.
AUCTPRICE
Цена закр.
PREVPRICE
Пред.цена закр.
PREVLEGALCLOSEPR
Цена контраг.
COUNTERPRICE
Откр.
OPEN
Оферта
BUYBACKPRICE
Перв.цена сессии
FIRSTOPEN
Закр.
CLOSEPRICE
Цена послед.
LAST
Посл.цена сессии
LASTCLOSE
Цена предторг.
OPENPERIODPRICE
Страйк
STRIKE
Центр.курс
CENTRALRATE
Центр.курс пред.
PREVCENTRALRATE
До погашения
DAYS_TO_MAT_DATE
Штраф.ст.бум. %
LPENRATE
Штраф.ст.ден. %
HPENRATE
Вид бумаги в OnTrade, получить вид бумаги, по которой произошел трейд
Пользователь
Сообщений: Регистрация: 31.03.2016
20.07.2018 13:54:38
Цитата
Suntor написал: sectypestatic — откуда такой тип выцепили? не вижу в документации... только SECTYPE вижу
ARQA не добавила все параметры ТТП в документацию. Нашел его, сделав по рекомандации АРКИ DDE-экспорт ТТП в Excel с формальными заголовками по всем классам.
Вид бумаги в OnTrade, получить вид бумаги, по которой произошел трейд
Пользователь
Сообщений: Регистрация: 31.03.2016
20.07.2018 06:25:44
Берите из колбэка class_code и sec_code инструмента и проверяйте его тип:
Код
local pi = getParamEx(class_code,sec_code ,"sectypestatic")
local sectype = pi and pi.param_image
if sectype == "Ценные бумаги" then
elseif sectype == "Фьючерсы" then
elseif sectype == "Облигации" then
elseif sectype == "Опционы" then
elseif sectype == "Спреды" then
elseif sectype == "Валюта" then
elseif sectype == "Свопы" then
end
дважды or
Пользователь
Сообщений: Регистрация: 31.03.2016
10.07.2018 14:04:52
Цитата
Это, кстати, одна из фишек, за которые мы любим Lua !
дважды or
Пользователь
Сообщений: Регистрация: 31.03.2016
10.07.2018 14:02:12
Цитата
Let_it_go написал: что в вашем примере означает and ?
Проверка на то, что getPortfolioInfoEx возвращает таблицу, а не nil. Иначе будет ошибка attempt to index 'p' ( a nil value ).
дважды or
Пользователь
Сообщений: Регистрация: 31.03.2016
10.07.2018 11:09:32
Код
local p = getPortfolioInfoEx (firm, client_code, 2 )
profit_loss = 1 * ( p and p.profit_loss or profit_loss or 0 )
Как сократить условие if 'string' then print() end
Пользователь
Сообщений: Регистрация: 31.03.2016
10.07.2018 06:47:29
Или можно так, чтобы без string.find:
Код
local function orEquals(tofind,...)
for _,v in ipairs{...} do
if v == tofind then return true end
end
return false
end
-- usage
local digit = "one"
print( orEquals(digit,"two","three","one") ) -- true
digit = 4
print( orEquals(digit,2,3,1) ) -- false
Прочесть таблицу новости через LUA
Пользователь
Сообщений: Регистрация: 31.03.2016
04.07.2018 06:19:43
Никак
string.gmatch
Пользователь
Сообщений: Регистрация: 31.03.2016
22.06.2018 13:15:13
Цитата
Let_it_go написал: А как перебирать тикер лист, если там есть фьючерсы? У них в конце цифра: ticker_list="SBER,GAZP,SiU8"
Стоит попробовать перебирать по группам символов, которые явно не являются разделителями: for sec in string.gmatch(ticker_list,"[^,]+") do --группа символов, но не запятая end
Связь двух виртуалок
Пользователь
Сообщений: Регистрация: 31.03.2016
22.06.2018 06:19:20
И пароль к учетке, под которой Квик с роботом крутится и для которой расшарите папку с papam.txt и разрешите ей только чтение, посильнее сделайте.
Пользователи Telegram-Bot! Как организовать работу через proxy?
Пользователь
Сообщений: Регистрация: 31.03.2016
02.05.2018 06:51:07
Цитата
Александр Волфовиц написал:Ого! А есть библиотеки LUA, которые позволяют осуществить подобное?
Вы что, с луны ( кстати, Lua, с португальского — «луна» ) свалились? Для чего же иначе нужен бот, если не для обратной связи!
Добрый вечер. Как определить в ЛУА существование файла?
Поделитесь соображениями, как обойти предстоящую блокировку.
Планирую использовать vpn на машине с ботом, а не прокси в api.
Пользователи Telegram-Bot! Как организовать работу через proxy?
Пользователь
Сообщений: Регистрация: 31.03.2016
16.04.2018 08:36:20
Планирую использовать vpn на машине с ботом, а не прокси в api.
Идентификация индикаторов
Пользователь
Сообщений: Регистрация: 31.03.2016
10.04.2018 06:48:46
Я бы предложил через socket или ещё как-то с некоторой периодичностью слать пакет, содержащий key и настройки, туда, где внешнее ПО будет слушать эти пакеты. Но если индикатор без новых тиков не умеет что-либо делать после создания ( с индикаторами не работаю ), то это не осуществимо.
Идентификация индикаторов
Пользователь
Сообщений: Регистрация: 31.03.2016
10.04.2018 06:27:05
Добрый день!
Как Вам вариант с генерацией файла типа pid индикатором? Имя файла - уникальный key. Внутри можно или просто датавремя последнего тика писать. Тогда настройки в отдельный файл при перезапуске индикатора сохранять. Либо датавремя+настройки дампить прямо в key-файл.
Ошибка getDepoEx, Ошибка getDepoEx
Пользователь
Сообщений: Регистрация: 31.03.2016
06.04.2018 10:30:44
сначачал проверьте, что даёт getDepoEx, а потом уже обращайтесь к полям:
local depo = getDepoEx(FIRM_ID, CLIENT_CODE, SEC_CODE, ACCOUNT ,LIMIT_KIND) if depo then local currentbal = depo.currentbal -- end
Робот на АО ошибка: attempt to compare number with function, Ошибка attempt to compare number with function
Пользователь
Сообщений: Регистрация: 31.03.2016
21.03.2018 12:11:47
AO - это function ? Покажите для начала, что такое AO и строчку с ошибкой.
Текст по центру
Пользователь
Сообщений: Регистрация: 31.03.2016
19.02.2018 07:05:57
Попробуйте string.format( "%"..N.."s | %s", sec1, sec2 ), где N больше любого sec1:len(), напр. N=10, но, возможно, обычные пробелы не помогут.
Lua for Windows, luarocks, модули
Пользователь
Сообщений: Регистрация: 31.03.2016
08.02.2018 13:46:53
Цитата
Арсений Если запускать скрипт оттуда из SciTe, то библиотека работает. Если из квиковой папки, то предсказуемо нет
Попробуйте в скрипте заранее указыавть пути к вашей установленной луе:
Арсений Первый вариант не получился от слова совсем
Лёгкими путями не идёте. Будем посмотреть, как у вас получиться.
Ошибка при чтении стакана
Пользователь
Сообщений: Регистрация: 31.03.2016
07.02.2018 08:42:26
Может так?
if value and value.tbl and value.tbl.bid and value.tbl.bid[indexBid] then bidPrice = tonumber(value.tbl.bid[indexBid].price) end
После этого bidPrice будет либо числом либо nil.
Не появляется окно с таблицей
Пользователь
Сообщений: Регистрация: 31.03.2016
16.01.2018 07:47:48
Сделайте ещё CreateWindow(id) SetWindowCaption(id, "Ваш заголовок")
Как получить текущую чистую позицию quik
Пользователь
Сообщений: Регистрация: 31.03.2016
26.12.2017 10:52:25
Код
for _,table in pairs{ "depo_limits", "futures_client_holding", } do
local n = getNumberOf(table)
for i = 0, n-1 do
local limit = getItem(table,i)
local s = ""
for param,value in pairs(limit) do
s = s..param.."="..tostring(value)..", "
end
message( s, 1 )
end
end
Текущие чистые позиции по фьючам или Текущий остаток по бумагам сможете найти, если откроете QLUA.chm в каталоге Квика.
Как запустить колбек не сразу?
Пользователь
Сообщений: Регистрация: 31.03.2016
18.12.2017 07:36:26
Если Вам охота "не потерять" колбэки, которые возникнут, пока переменные ещё не инициализированы, то стоит их "сложить" в очередь функций, которую разгрести, когда инициализация завершится.
Сетевая папка
Пользователь
Сообщений: Регистрация: 31.03.2016
07.12.2017 06:59:37
Может, конечно. И запускаться из сетевой папки и писать туда. А у Вас какую-то ошибку выдаёт?
Дата произвольной свечи, Дата произвольной свечи
Пользователь
Сообщений: Регистрация: 31.03.2016
16.11.2017 07:05:33
Или через график с тэгом: local candles, n = getCandlesByIndex(tag,line,first_candle,count) local datetime = candles and candles[ n - 1 ].datetime
Или через DataSource: local datetime = datasource:T(candle_index)
Удаление элементов таблицы
Пользователь
Сообщений: Регистрация: 31.03.2016
16.11.2017 06:53:00
Добавьте print(i,#s) в цикл удаления и увидите:
Скрытый текст
1 10 2 9 3 8 4 7 5 6 6 5 7 5 8 5 9 5 10 5
В мануале к table.remove написано, что он удаляет нужный, сдвигая остальные, или последний элемент. В вашем случае надо делать или table.remove(s) или table.remove(s,1), чтобы удалять или с начала, или с конца, или следить, чтобы индекс был меньше размера таблицы.
ПС. Возможно, Вам будет профитнее использовать таблицу, индексированную не по-умолчанию i=1..N, а ключами - номерами заявок. Т.е.: s = { } s[order.order_num] = 1 or order or true Тогда не будет головняков с удалением, за исключением того, что надо точно знать номер удаляемой заявки, чтобы её удалить с помощью s[order_num] = nil
Помогите с математикой
Пользователь
Сообщений: Регистрация: 31.03.2016
30.10.2017 07:50:42
Цитата
Let_it_go написал: Зачем? Код в моей версии понятный, элегантный и не громоздкий (всего 3 строчки). Если использовать else, он был бы намного объёмнее.
if sd[sec]>200 then otklonenie=5 elseif sd[sec]>50 then otklonenie=4 elseif sd[sec]>0 then otklonenie=3 end
Вроде тоже 3 строчки
Цитата
Let_it_go написал: Нет смысла такое оптимизировать.
Да как так-то?! ))) На горизонте простор для мемов )))
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
А если писать напрямую в excel? Сам не пробовал, но вроде можно или .
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Пользователь
Сообщений: Регистрация: 31.03.2016
14.09.2017 13:16:50
Насколько понял, событий не ооочень много и частота дописываний тоже не hft. Может стоит пересмотреть процесс создания/записи файла? Например периодически полностью пересоздавать его ( данные в памяти ). Если не охота данные в памяти всё время держать, можно сохранять в не очень наглядном lua-формате, загружать с помощью dofile, дополнять и снова сливать в файл.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Пользователь
Сообщений: Регистрация: 31.03.2016
14.09.2017 07:53:40
Верно, после дозаписи получается не красиво. Выходит, проще, читая исходный файл, писать с дополнениями новый.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
Пользователь
Сообщений: Регистрация: 31.03.2016
14.09.2017 06:58:32
Если требуется именно дописать, а не изменить, то для случая дописывания в конец строки самым простым представляется прочитать из файла, открытого как io.open( filename, "r+" ), N (=79) строк. Затем шагнуть назад file:seek( "cur", -EOL ), где EOL = "\n":len() - длина перевода на новую строку. А потом дописать с помощью file:write то, что Вам требуется. Для случая дописывания не в конец строки придётся искать позицию иначе.
Если файл создаётся периодически из того же кода, можно отдельно запоминать offset для file:seek нужного для дозаписи места.
объявить несколько локальных переменных
Пользователь
Сообщений: Регистрация: 31.03.2016
28.07.2017 13:42:28
local a,b = 1,2
Интерфейс на LUA, какая библиотека?
Пользователь
Сообщений: Регистрация: 31.03.2016
19.07.2017 06:11:56
iUP - идёт вместе с LuaForWindows_v5.1.4-46.exe Документация в %LUA_DEV%\docs\iup, примеры в %LUA_DEV%\examples\iup
Переключение таймфреймов по хоткею
Пользователь
Сообщений: Регистрация: 31.03.2016
07.06.2017 06:41:13
• А также для Lua-скриптов повесьте Ctrl+F9 хотя бы, коль Ctrl+F11 занимает QPILE.
• А ещё при активном окне Доступных Lua-скриптов горячие клавиши Квика не работают. С учётом отсутствуя горячей клавиши для вызова/скрытия Lua-скриптов, это обращает на себя внимание.
s_mike@rambler.ru, были давно иногда такие проблемы, преимущественно на ФОРТС. Решались манипуляциями АРКИ с сервером Квика, если успевали заметить, перед или в начале торгов.
Закрывает 2 раза позицию, в итоге открывает
Пользователь
Сообщений: Регистрация: 31.03.2016
31.05.2017 06:50:01
kvazar1988, оформаляйте код и логи в спойлеры ( кнопка [SP] ). Невозможно смотреть на такие посты.
вопрос по Notepad++
Пользователь
Сообщений: Регистрация: 31.03.2016
25.05.2017 14:21:41
Как понял, это просто запуск скрипта, как из cmd.exe. К примеру, введите туда "C:\Program Files\Lua\5.1\lua.exe" "C:\Documents and Settings\%username%\Рабочий стол\new 1.lua" Запуститься интерпретатор lua, который выведет в Вашем случае ничего и исчезнет.
ПС А как Вам IntelliJ IDEA Community с Lua-плагином?
Несколько QUIK путают файлы настроек.
Пользователь
Сообщений: Регистрация: 31.03.2016
24.05.2017 11:18:02
green_X5, В случае работы нескольких терминалов Квика получилось победить описанную Вами проблему только таким способом:
1. Создаём отдельный каталог. Например, D:\wnd 2. Для каждого Квика прописываем в настройках уникальное название файла настроек и сохраняем в D:\wnd. В Вашем случае, например, так: D:\wnd\info_SMS.wnd D:\wnd\info_VTB24.wnd D:\wnd\info_PSB.wnd
1ым пунктом решаем пробему глобальности текущего каталога в Квиках, 2ой пункт - чтобы не перепутать настройки. С учётом того, что у Вас включена опция "Сохранять настройки при выходе", можно предположить, что Квики перезатирали чужие настройки из-за проблемы глобальности. Эту опцию вообще лучше отключать, имхо, и сохраняться только вручную.
-- выводим сообщение
function OnTrade (trade_data)
message ( 'da' )
end
Нет сообщение при тике.
message( 'da', 1 or 2 or 3 )
lдата свечи и время, есть данные номера свечи. даты нет.
Пользователь
Сообщений: Регистрация: 31.03.2016
19.05.2017 12:17:03
local candle = t1[0] ???? = os.date("%d.%m.%Y",os.time(candle.datetime))
Кому-нибудь удалось скомпилировать luasec?, Кому-нибудь удалось скомпилировать luasec?
Пользователь
Сообщений: Регистрация: 31.03.2016
16.05.2017 14:16:33
Отпишите, если всё-таки удастся скомпилировать luasec на Windows из исходников! ))
Кому-нибудь удалось скомпилировать luasec?, Кому-нибудь удалось скомпилировать luasec?
Пользователь
Сообщений: Регистрация: 31.03.2016
16.05.2017 14:14:52
Кстати, уже упоминал про собранный luasec для sendmail, например.
Кому-нибудь удалось скомпилировать luasec?, Кому-нибудь удалось скомпилировать luasec?
Пользователь
Сообщений: Регистрация: 31.03.2016
16.05.2017 14:12:20
Нет, но для win32 я использую готовые сборки
PS Может вот поможет.
Dangerous Date, Падение интерпретатора lua и зависание Quik'а вместе с ним при ошибке в os.date(format).
Пользователь
Сообщений: Регистрация: 31.03.2016
20.04.2017 07:44:00
Провел ряд тестов. WinXP SP3 , Quik 7.10
Код скрипта и Результаты тестов:
Скрытый текст
Код
--message(os.date("%d.%.m.%Y"),1) -- 1. Вне main
function main()
if false then -- 2. В pcall
local r,err = pcall( function()
--if a > 1 then end -- 5. Другая ошибка
message(os.date("%d.%.m.%Y"),1)
return 1
end)
message(tostring(r),1)
message(tostring(err),3)
end
if false then -- 3. В xpcall
local r,err = pcall( function()
message(os.date("%d.%.m.%Y"),1)
return 1
end, function(err) message(err,3) end)
message(tostring(r),1)
message(tostring(err),3)
end
--message(os.date("%d.%.m.%Y")) -- 4. В main
while true do
message(tostring(os.time()),1)
sleep(1000)
end
end
Результаты:
Quik зависает ( весь UI )
Quik работает, скрипт зависает, сообщения об ошибки нет, цикл while время не показывает!
Аналогично случаю 2
Ошибки выполнения скрипта "Unknown error. Possible unhandled exception.", цикл while время не показывает.
Если вместо os.date внутри pcall или xpcall написать другую ошибку, напр., if a > 1 then end, то скрипт покажет "false", "attempt to compare number with nil", цикл while будет работать и показывать время.
Выводы:
В WinXP в Quik подобная ошибка вне main приводит к зависанию, а в pcall/xpcall не отлавливается и блокирует остальной скрипт
Ужесточить , удалив WinXP из списка поддерживаемых
PS Как удалить сообщение ?
Dangerous Date, Падение интерпретатора lua и зависание Quik'а вместе с ним при ошибке в os.date(format).
Пользователь
Сообщений: Регистрация: 31.03.2016
20.04.2017 06:45:09
Цитата
Sergey Gorokhov написал: vgi , Касаемо обновления Lua, в данный момент у нас таких планов нет и в обозримом будущем не планируется.
Dangerous Date, Падение интерпретатора lua и зависание Quik'а вместе с ним при ошибке в os.date(format).
Пользователь
Сообщений: Регистрация: 31.03.2016
20.04.2017 06:14:27
А может всё-таки Lua в Quik на 5.2-5.3 переведём? Там xpcall с параметрами можно вызывать!