swerg, мои слова, процитированные Вами, были ответом Владимиру. Для себя я все выяснил, о чем и высказывался уже в этой ветке. Видимо, Вы поступили как в том анекдоте: "чукча - не читатель, чукча - писатель!"
Алексей написал: Имеется ввиду, что quik уже за Вас вызвал getScriptPath() и результат Вам подсовывает в качестве параметра при вызове OnInit(script_path).А уж будете Вы использовать этот "подарок" внутри OnInit или нет, дело Ваше
Зачем Вам script_path от OnInit?
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
05.07.2023 16:02:08
Цитата
Владимир написал: OnInit по определению нужен лишь затем, чтобы что-то сделать до main. То есть это идеологический идиотизм.
Ziveleos написал: Зачем? В чистом lua и OnInit нет.
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
05.07.2023 13:23:37
Владимир, просто давно интересовал этот вопрос: какая разница между body и OnInit, и зачем он вообще нужен?
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
05.07.2023 13:18:19
Цитата
Nikolay написал: Body скрипта выполняется в потоке терминала. Так что служебные переменные вполне себе инициализируются там.
А я что сказал?
Цитата
if до зарезу необходимо сделать что-то до начала работы коллбэков, and в этом "что-то" используются функции объявляемые позже, then без OnInit не обойтись. end В остальном он на фиг не нужен.
Цитата
Nikolay написал: Речь же про колбеки звучит странно, т.к. я слабо себе представляю использование колбеков в алгоритме, если они не обработаны все.
Если в самой функции коллбэка используется нечто не объявленное ранее, и он сработает, возникнет ошибка. Поэтому это "нечто" нужно объявить до запуска main.
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
05.07.2023 11:39:18
Владимир, переменные окружения показывают разницу между body и OnInit. Получается, если до зарезу необходимо сделать что-то до начала работы коллбэков, и в этом "что-то" используются функции объявляемые позже, то без OnInit не обойтись. В остальном он на фиг не нужен.
Видимо, единственное преимущество OnInit в том, что в отличии от body, из неё можно вызывать функции не объявленные ранее. Ну, и " В качестве параметра принимает значение полного пути к запускаемому скрипту."
Скрытый текст
Код
file = io.open(getScriptPath() .. "\\Environment.txt", "w+")
local len = 0
for k, v in pairs(_ENV) do
file:write(string.format("%s\t %s \n",k,(tostring (v))))
len = len + 1
end
file:write("\n Окружение BODY: ", len, "\n\n" )
function OnInit()
local len = 0
for k, v in pairs(_ENV) do
file:write(string.format("%s\t %s \n",k,(tostring (v))))
len = len + 1
end
file:write("\n Окружение OnInit: ", len, "\n\n" )
end
function main()
file:seek("set")
local log = file:read("a")
local b_log = string.match(log, "(.-)\n\n")
local i_log = string.match(log, "Окруж.-\n\n(.-)\n\n")
file:write(" Нет в BODY: ")
for s in string.gmatch(i_log, "(.-)\t.-\n") do
if not string.match(b_log, s) then
file:write("\n", s)
end
end
file:write("\n\n Разница: ")
for s in string.gmatch(i_log, "(.-)\n") do
if not string.match(b_log, s) then
file:write("\n", s)
end
end
file:flush()
file:close()
end
--file:write("Чудо-юдо рыба-кит \n")
function tableLog(t)
for k, v in pairs(t) do
file:write(string.format("%s %s \n",k,(tostring (v))))
end
end
Владимир, что Вы называете вторым потоком? Под вторым потоком я подразумевал именно поток main, а коллбэки, BODY - это основной основной поток QUIK.
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
02.07.2023 21:18:58
Владимир, Второй поток все-таки нужен, иначе QUIK замрёт, пока работает скрипт. А вот, что касается:
Цитата
nikolz написал: В том, что это этот колбек вызывается раньше всех других колбеков и раньше функции main.Без него у Вас колбеки будут вызываться раньше, чем будет вызвана функция main.
коллбэки начинают работать только вместе с main.
Код
qtes = {}
function OnQuote(class, sec )
ql2 = getQuoteLevel2(class, sec)
table.insert(qtes, ql2)
end
sleep(10000)
function main()
--sleep(10000)
message(tostring(#qtes))
end
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
30.06.2023 21:30:52
И не нужно на меня кегль повышать.
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
30.06.2023 21:14:19
Необходимые переменные и библиотеки перед запуском основного потока main() возможно инициализировать и в BODY. Если скрипт не HFT, или вообще без коллбэков, получается OnInit не сильно нужен.
Всё пройдет. Но это не точно.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 22.02.2023
30.06.2023 12:38:55
Всё же, хотелось бы получить комментарий разработчика, в чем сакральный смысл функции OnInit?
Всё пройдет. Но это не точно.
Преобразование времени в число
Пользователь
Сообщений: Регистрация: 22.02.2023
23.05.2023 20:50:46
Время сервера передается без начального нуля, поэтому предложенный код до 10 часов утра не работает. Вот немного доработанный вариант:
Код
-- Время сервера в числовой формат.
local sT = getInfoParam("SERVERTIME") -- Время сервера в формате Ч:ММ:СС или ЧЧ:ММ:СС
function DToN (s,i,j)
return tonumber(string.sub(s, i, j)) -- Перевод цифр в числа.
end
srvTime = DToN(sT,-2,-1) + DToN(sT,-5,-4)*60 + DToN(sT,-8,-7)*3600 -- Количество секунд с начала суток.
Всё пройдет. Но это не точно.
Подскажите по использованию функции getParamEx и её параметру param_name
написал: Давно уже можно было бы указать в документации QLua GetParamEx сноску, где смотреть названия параметров! А то люди не находят и здесь спрашивают постоянно.
Добрый день,
Документация будет дополнена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.