Ziveleos (Все сообщения пользователя)
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Владимир , просто давно интересовал этот вопрос: какая разница между body и OnInit, и зачем он вообще нужен?
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Цитата Nikolay написал: Body скрипта выполняется в потоке терминала. Так что служебные переменные вполне себе инициализируются там.
А я что сказал?
Цитата if до зарезу необходимо сделать что-то до начала работы коллбэков, and в этом "что-то" используются функции объявляемые позже, then без OnInit не обойтись. end В остальном он на фиг не нужен.
Цитата Nikolay написал: Речь же про колбеки звучит странно, т.к. я слабо себе представляю использование колбеков в алгоритме, если они не обработаны все.
Если в самой функции коллбэка используется нечто не объявленное ранее, и он сработает, возникнет ошибка.
Поэтому это "нечто" нужно объявить до запуска main.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Владимир , переменные окружения показывают разницу между body и OnInit.
Получается, если до зарезу необходимо сделать что-то до начала работы коллбэков, и в этом "что-то" используются функции объявляемые позже, то без OnInit не обойтись. В остальном он на фиг не нужен.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Цитата VPM написал: Не очень понятно что написали.
Скрипт выводит в файл список переменных окружения. Сначала body, потом OnInit, и сравнивает их.
Цитата VPM написал: идет инициализация переменно file. <...> Я уже молчу что переменная file записана в глобальное поле.
Одной переменной больше. И что?
Цитата VPM написал: getScriptPath() .функция QLUA. Запустите на чистом луа получите скандал!
Зачем? В чистом lua и OnInit нет.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Видимо, единственное преимущество 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
Окружение body и OnInit:
Скрытый текст
INTERVAL_M5 5 getScriptPath function: 000007FEF0D9E500 require function: 0000000012DC2180 INTERVAL_D1 1440 setmetatable function: 000007FEEDDFB360 QTABLE_NEED_REFILL 23 T_FUTURES_HOLDINGS 9 message_ex function: 000007FEF0D71600 T_NEG_DEAL_REPORTS 19 Highlight function: 000007FEF0DC1C40 tonumber function: 000007FEEDDFAD50 getTradeDate function: 000007FEF0D719E0 DeleteRow function: 000007FEF0DBF7B0 Clear function: 000007FEF0DC0100 getmetatable function: 000007FEEDDFB220 getBuySellInfo function: 000007FEF0D6FA10 getNumCandles function: 000007FEF0D74080 CreateWindow function: 000007FEF0DBEE50 QTABLE_DEFAULT_COLOR -1 GetWindowCaption function: 000007FEF0DBFEF0 GetLabelParams function: 000007FEF0D779B0 SearchItems function: 000007FEF0D74A40 getNumberOf function: 000007FEF0D6FFE0 pairs function: 000007FEEDDFBCC0 QTABLE_INT_TYPE 1 type function: 000007FEEDDFBAD0 getOrderByNumber function: 000007FEF0D74490 T_DEPO_LIMITS 13 isDarkTheme function: 000007FEF0D794E0 T_MONEY_LINITS 12 getParamEx2 function: 000007FEF0D711F0 SetLabelParams function: 000007FEF0D774C0 QTABLE_TIME_TYPE 7 T_CCP_HOLDINGS 23 collectgarbage function: 000007FEEDDFB880 INTERVAL_W1 10080 getDepoEx function: 000007FEF0D78590 getClassInfo function: 000007FEF0D720B0 DelLabel function: 000007FEF0D776C0 AddColumn function: 000007FEF0DBF010 SetTableNotificationCallback function: 000007FEF0DBF9F0 T_ORDERS 8 QTABLE_INT64_TYPE 4 QTABLE_UNKNOWN_TYPE 0 QTABLE_DOUBLE_TYPE 2 getClassSecurities function: 000007FEF0D72220 next function: 000007FEEDDFBB50 prec_time function: 000007FEF0D79430 error function: 000007FEEDDFB050 getClientCodeByTrdAcc function: 000007FEF0D798A0 isConnected function: 000007FEF0D71980 SetTableCallback function: 000007FEF0DBEC20 GetCell function: 000007FEF0DC12E0 QTABLE_MBUTTONDOWN 9 print function: 000007FEEDDFA9E0 INTERVAL_M20 20 dofile function: 000007FEEDDFC7B0 rawequal function: 000007FEEDDFB440 getDepo function: 000007FEF0D73470 CreateDataSource function: 000007FEF0D42A80 INTERVAL_H1 60 GetInfoParam function: 000007FEF0D71D70 InsertRow function: 000007FEF0DBF380 T_NEG_TRADES 17 T_SECURITIES 3 QTABLE_STRING_TYPE 3 getItem function: 000007FEF0D701A0 file file (0000000012D54300) package table: 0000000012DC22C0 INTERVAL_MN1 23200 IsWindowClosed function: 000007FEF0DC0620 INTERVAL_H4 240 INTERVAL_H2 120 getPortfolioInfoEx function: 000007FEF0D6F040 getFuturesLimit function: 000007FEF0D77C00 T_ACCOUNT_BALANCE 22 INTERVAL_M30 30 INTERVAL_M15 15 QTABLE_CLOSE 24 INTERVAL_M6 6 ipairs function: 000007FEEDDFBFB0 QTABLE_DATETIME_TYPE 9 message function: 000007FEF0D713A0 INTERVAL_M4 4 getClassesList function: 000007FEF0D71EC0 T_RM_HOLDINGS 27 INTERVAL_M3 3 isLimitsInLots function: 000007FEF0D79570 getClientCorrelationCoefs function: 000007FEF0D76890 INTERVAL_M2 2 INTERVAL_M1 1 getParamEx function: 000007FEF0D70FF0 getUniqTransID function: 000007FEF0D79C70 INTERVAL_UNDEFINED -1000 INTERVAL_M10 10 CalcBuySell function: 000007FEF0D76E70 QTABLE_NO_INDEX -1 string table: 0000000012DC26C0 getQuoteLevel2 function: 000007FEF0D72840 QTABLE_RBUTTONUP 12 math table: 0000000012DC2740 QTABLE_MBUTTONDBLCLK 10 QTABLE_CONTEXTMENU 8 QTABLE_VKEY 7 QTABLE_CHAR 6 QTABLE_RBUTTONDBLCLK 4 QTABLE_SELCHANGED 5 getInfoParam function: 000007FEF0D71D70 coroutine table: 0000000012DC24C0 getPortfolioInfo function: 000007FEF0D6EE70 QTABLE_RBUTTONDOWN 2 T_ALL_TRADES 6 loadfile function: 000007FEEDDFC1A0 QTABLE_LBUTTONDOWN 1 getMoneyEx function: 000007FEF0D78220 QTABLE_DATE_TYPE 8 getSecurityInfo function: 000007FEF0D72610 QTABLE_CACHED_STRING_TYPE 6 RGB function: 000007FEF0DC1AA0 SetColor function: 000007FEF0DC1790 SetSelectedRow function: 000007FEF0DC1F20 warn function: 000007FEEDDFAB10 IsSubscribed_Level_II_Quotes function: 000007FEF0D78CD0 SetCell function: 000007FEF0DC0C40 getTrdAccByClientCode function: 000007FEF0D796D0 DestroyTable function: 000007FEF0DC0AB0 PrintDbgStr function: 000007FEF0D77B30 getCandlesByIndex function: 000007FEF0D74190 CancelParamRequest function: 000007FEF0D79210 T_INDICATIVE 25 getWorkingFolder function: 000007FEF0D9E460 SetWindowPos function: 000007FEF0DC03C0 Unsubscribe_Level_II_Quotes function: 000007FEF0D78B30 GetWindowRect function: 000007FEF0DC02A0 getLinesCount function: 000007FEF0D73F70 T_PRICERANGE 26 assert function: 000007FEEDDFC980 table table: 0000000012DC2480 T_FIRM_HOLDING 21 SetWindowCaption function: 000007FEF0DBFCD0 getPortfolioInfoEx2 function: 000007FEF0D6F4E0 sleep function: 000007FEF0D9E3B0 T_FUTURES_LIMITS 10 getBuySellInfoEx function: 000007FEF0D6FCF0 load function: 000007FEEDDFC530 utf8 table: 0000000012DC2800 DelAllLabels function: 000007FEF0D77860 debug table: 0000000012DC2840 select function: 000007FEEDDFCAE0 Subscribe_Level_II_Quotes function: 000007FEF0D78980 bit table: 0000000012DC2880 AllocTable function: 000007FEF0DBEF70 isUcpClient function: 000007FEF0D79A70 T_FIRMS 1 rawlen function: 000007FEEDDFB550 GetTableSize function: 000007FEF0DC0850 getFuturesHolding function: 000007FEF0D77F10 rawset function: 000007FEEDDFB750 xpcall function: 000007FEEDDFCF30 getClientSecurityCoefs function: 000007FEF0D76530 T_TRADES 15 _VERSION Lua 5.4 getMoney function: 000007FEF0D72C50 QTABLE_LBUTTONDBLCLK 3 AddLabel function: 000007FEF0D77300 tostring function: 000007FEEDDFD060 ParamRequest function: 000007FEF0D78E70 INTERVAL_TICK 0 T_CLASSES 2 _G table: 0000000012DC21C0 sendTransaction function: 000007FEF0D73D60 UpdateRow function: 000007FEF0DBF590 os table: 0000000012DC2680 pcall function: 000007FEEDDFCDD0 T_ACCOUNT_POSITIONS 7 T_TRADE_ACCOUNTS 4 T_CLIENT_CODES 5 QTABLE_LBUTTONUP 11 io table: 0000000012DC2500 GetTradeDate function: 000007FEF0D719E0 T_STOP_ORDERS 16 rawget function: 000007FEEDDFB650 T_CCP_POSITION 24 T_NEG_DEALS 18 getQuoteLevel2Ex function: 000007FEF0D72AA0 Окружение BODY: 185 INTERVAL_M5 5 getScriptPath function: 000007FEF0D9E500 require function: 0000000012DC2180 INTERVAL_D1 1440 setmetatable function: 000007FEEDDFB360 QTABLE_NEED_REFILL 23 T_FUTURES_HOLDINGS 9 message_ex function: 000007FEF0D71600 T_NEG_DEAL_REPORTS 19 Highlight function: 000007FEF0DC1C40 tonumber function: 000007FEEDDFAD50 getTradeDate function: 000007FEF0D719E0 DeleteRow function: 000007FEF0DBF7B0 Clear function: 000007FEF0DC0100 getmetatable function: 000007FEEDDFB220 getBuySellInfo function: 000007FEF0D6FA10 getNumCandles function: 000007FEF0D74080 CreateWindow function: 000007FEF0DBEE50 QTABLE_DEFAULT_COLOR -1 GetWindowCaption function: 000007FEF0DBFEF0 GetLabelParams function: 000007FEF0D779B0 SearchItems function: 000007FEF0D74A40 getNumberOf function: 000007FEF0D6FFE0 pairs function: 000007FEEDDFBCC0 QTABLE_INT_TYPE 1 type function: 000007FEEDDFBAD0 getOrderByNumber function: 000007FEF0D74490 T_DEPO_LIMITS 13 isDarkTheme function: 000007FEF0D794E0 T_MONEY_LINITS 12 getParamEx2 function: 000007FEF0D711F0 SetLabelParams function: 000007FEF0D774C0 QTABLE_TIME_TYPE 7 T_CCP_HOLDINGS 23 collectgarbage function: 000007FEEDDFB880 INTERVAL_W1 10080 getDepoEx function: 000007FEF0D78590 getClassInfo function: 000007FEF0D720B0 DelLabel function: 000007FEF0D776C0 AddColumn function: 000007FEF0DBF010 SetTableNotificationCallback function: 000007FEF0DBF9F0 T_ORDERS 8 QTABLE_INT64_TYPE 4 QTABLE_UNKNOWN_TYPE 0 QTABLE_DOUBLE_TYPE 2 getClassSecurities function: 000007FEF0D72220 next function: 000007FEEDDFBB50 prec_time function: 000007FEF0D79430 error function: 000007FEEDDFB050 getClientCodeByTrdAcc function: 000007FEF0D798A0 isConnected function: 000007FEF0D71980 SetTableCallback function: 000007FEF0DBEC20 GetCell function: 000007FEF0DC12E0 QTABLE_MBUTTONDOWN 9 print function: 000007FEEDDFA9E0 INTERVAL_M20 20 dofile function: 000007FEEDDFC7B0 rawequal function: 000007FEEDDFB440 getDepo function: 000007FEF0D73470 CreateDataSource function: 000007FEF0D42A80 INTERVAL_H1 60 GetInfoParam function: 000007FEF0D71D70 InsertRow function: 000007FEF0DBF380 T_NEG_TRADES 17 T_SECURITIES 3 tableLog function: 000000000782E600 main function: 000000000782E5D0 INTERVAL_M15 15 QTABLE_STRING_TYPE 3 getItem function: 000007FEF0D701A0 file file (0000000012D54300) package table: 0000000012DC22C0 INTERVAL_MN1 23200 IsWindowClosed function: 000007FEF0DC0620 INTERVAL_H4 240 INTERVAL_H2 120 getPortfolioInfoEx function: 000007FEF0D6F040 getFuturesLimit function: 000007FEF0D77C00 T_ACCOUNT_BALANCE 22 INTERVAL_M30 30 OnInit function: 000000000782E5A0 QTABLE_CLOSE 24 INTERVAL_M6 6 ipairs function: 000007FEEDDFBFB0 QTABLE_DATETIME_TYPE 9 message function: 000007FEF0D713A0 INTERVAL_M4 4 getClassesList function: 000007FEF0D71EC0 T_RM_HOLDINGS 27 INTERVAL_M3 3 isLimitsInLots function: 000007FEF0D79570 getClientCorrelationCoefs function: 000007FEF0D76890 INTERVAL_M2 2 INTERVAL_M1 1 getParamEx function: 000007FEF0D70FF0 getUniqTransID function: 000007FEF0D79C70 INTERVAL_UNDEFINED -1000 INTERVAL_M10 10 CalcBuySell function: 000007FEF0D76E70 QTABLE_NO_INDEX -1 string table: 0000000012DC26C0 getQuoteLevel2 function: 000007FEF0D72840 QTABLE_RBUTTONUP 12 math table: 0000000012DC2740 QTABLE_MBUTTONDBLCLK 10 QTABLE_CONTEXTMENU 8 QTABLE_VKEY 7 QTABLE_CHAR 6 QTABLE_RBUTTONDBLCLK 4 QTABLE_SELCHANGED 5 getInfoParam function: 000007FEF0D71D70 coroutine table: 0000000012DC24C0 getPortfolioInfo function: 000007FEF0D6EE70 QTABLE_RBUTTONDOWN 2 T_ALL_TRADES 6 loadfile function: 000007FEEDDFC1A0 QTABLE_LBUTTONDOWN 1 getMoneyEx function: 000007FEF0D78220 QTABLE_DATE_TYPE 8 getSecurityInfo function: 000007FEF0D72610 QTABLE_CACHED_STRING_TYPE 6 RGB function: 000007FEF0DC1AA0 SetColor function: 000007FEF0DC1790 SetSelectedRow function: 000007FEF0DC1F20 warn function: 000007FEEDDFAB10 IsSubscribed_Level_II_Quotes function: 000007FEF0D78CD0 SetCell function: 000007FEF0DC0C40 getTrdAccByClientCode function: 000007FEF0D796D0 DestroyTable function: 000007FEF0DC0AB0 PrintDbgStr function: 000007FEF0D77B30 getCandlesByIndex function: 000007FEF0D74190 CancelParamRequest function: 000007FEF0D79210 T_INDICATIVE 25 getWorkingFolder function: 000007FEF0D9E460 SetWindowPos function: 000007FEF0DC03C0 Unsubscribe_Level_II_Quotes function: 000007FEF0D78B30 GetWindowRect function: 000007FEF0DC02A0 getLinesCount function: 000007FEF0D73F70 T_PRICERANGE 26 assert function: 000007FEEDDFC980 table table: 0000000012DC2480 T_FIRM_HOLDING 21 SetWindowCaption function: 000007FEF0DBFCD0 getPortfolioInfoEx2 function: 000007FEF0D6F4E0 sleep function: 000007FEF0D9E3B0 T_FUTURES_LIMITS 10 getBuySellInfoEx function: 000007FEF0D6FCF0 load function: 000007FEEDDFC530 utf8 table: 0000000012DC2800 DelAllLabels function: 000007FEF0D77860 debug table: 0000000012DC2840 select function: 000007FEEDDFCAE0 Subscribe_Level_II_Quotes function: 000007FEF0D78980 bit table: 0000000012DC2880 AllocTable function: 000007FEF0DBEF70 isUcpClient function: 000007FEF0D79A70 T_FIRMS 1 rawlen function: 000007FEEDDFB550 GetTableSize function: 000007FEF0DC0850 getFuturesHolding function: 000007FEF0D77F10 rawset function: 000007FEEDDFB750 xpcall function: 000007FEEDDFCF30 getClientSecurityCoefs function: 000007FEF0D76530 T_TRADES 15 _VERSION Lua 5.4 getMoney function: 000007FEF0D72C50 QTABLE_LBUTTONDBLCLK 3 AddLabel function: 000007FEF0D77300 tostring function: 000007FEEDDFD060 ParamRequest function: 000007FEF0D78E70 INTERVAL_TICK 0 T_CLASSES 2 _G table: 0000000012DC21C0 sendTransaction function: 000007FEF0D73D60 UpdateRow function: 000007FEF0DBF590 os table: 0000000012DC2680 pcall function: 000007FEEDDFCDD0 T_ACCOUNT_POSITIONS 7 T_TRADE_ACCOUNTS 4 T_CLIENT_CODES 5 QTABLE_LBUTTONUP 11 io table: 0000000012DC2500 GetTradeDate function: 000007FEF0D719E0 T_STOP_ORDERS 16 rawget function: 000007FEEDDFB650 T_CCP_POSITION 24 T_NEG_DEALS 18 getQuoteLevel2Ex function: 000007FEF0D72AA0 Окружение OnInit: 188 Нет в BODY: tableLog main OnInit Разница: QTABLE_DEFAULT_COLOR -1 tableLog function: 000000000782E600 main function: 000000000782E5D0 file file (0000000012D54300) OnInit function: 000000000782E5A0 INTERVAL_UNDEFINED -1000 QTABLE_NO_INDEX -1
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Владимир , что Вы называете вторым потоком?
Под вторым потоком я подразумевал именно поток main, а коллбэки, BODY - это основной основной поток QUIK.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Владимир , Второй поток все-таки нужен, иначе 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
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
И не нужно на меня кегль повышать.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Необходимые переменные и библиотеки перед запуском основного потока main() возможно инициализировать и в BODY. Если скрипт не HFT, или вообще без коллбэков, получается OnInit не сильно нужен.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Всё же, хотелось бы получить комментарий разработчика, в чем сакральный смысл функции OnInit?
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Время сервера передается без начального нуля, поэтому предложенный код до 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 -- Количество секунд с начала суток.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Цитата Egor Zaytsev написал: Цитата Constantin написал: Давно уже можно было бы указать в документации QLua GetParamEx сноску, где смотреть названия параметров! А то люди не находят и здесь спрашивают постоянно.
Добрый день, Документация будет дополнена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Прошли годы ...
Всё пройдет. Но это не точно.
Пользователь
Сообщений: 113
Регистрация: 22.02.2023
Прошли годы...
Всё пройдет. Но это не точно.