Столкнулся с проблемой рассинхрона по времени между QUIK/сервера и реальным.
Порой он достигает нескольких минут. То есть при работающем скрипте внизу QUIK в строке "время сервера" показыает время на несколько минут меньше текущего (и, соотвественно, приходящие данные получаются не совсем актульаными по времени).
При этом по диспетчеру задач QUIK задействует в районе 50% процессора. Но сам QUIK практически намертво замирает, когда работает скрипт (реагируют на нажатия вечность)
Запускается и пишется всё на ssd.
Что именно делаю: записываю в txt файл (для каждого инструмента - в свой) весь стакан по 50 наиболее ликвидным акциям и 10 фьючам. То есть открываю файл, пишу стакан, закрываю файл (закрывать надо, так как есть проблемы с постояннством работы компа). И так на каждое изменение стакана.
В чём может быть проблема?
Как можно её решить?
Ну и может по коду что изменить/оптимизировать?
Код |
---|
local classCode = "TQBR"
local secCode = {}
local classCode2 = "SPBFUT"
local secCode2 = {}
stopped = true
function OnStop()
for i,value in ipairs(secCode) do
Unsubscribe_Level_II_Quotes(classCode, value)
message("TQBR is UNsubscribed")
end
for i,value in ipairs(secCode2) do
Unsubscribe_Level_II_Quotes(classCode2, value)
message("SPBFUT is UNsubscribed")
end
end
stopped = false
end
function main()
while stopped do end
end
for i,value in ipairs(secCode) do
Subscribe_Level_II_Quotes(classCode, value)
end
for i,value in ipairs(secCode2) do
Subscribe_Level_II_Quotes(classCode2, value)
end
function OnQuote(classCode, secCode)
if classCode == "TQBR" then
tb=getQuoteLevel2(classCode, secCode)
bid = tb.bid
ask = tb.offer
file = io.open("тут_путь"..secCode..".txt", "a+")
file:write(os.date("%c") .. ";")
for v = tonumber(tb.offer_count), 1, -1 do
file:write(ask[v].quantity .. ";")
end
for v = tonumber(tb.bid_count), 1, -1 do
file:write(bid[v].quantity .. ";")
end
for v = tonumber(tb.offer_count), 1, -1 do
file:write(ask[v].price .. ";")
end
for v = tonumber(tb.bid_count), 1, -1 do
file:write(bid[v].price .. ";")
end
file:write("\n")
file:close()
elseif classCode == "SPBFUT" then
tb=getQuoteLevel2(classCode, secCode)
bid = tb.bid
ask = tb.offer
file = io.open("тут_путь"..secCode..".txt", "a+")
file:write(os.date("%c") .. ";")
for v = tonumber(tb.offer_count), 1, -1 do
file:write(ask[v].quantity .. ";")
end
for v = tonumber(tb.bid_count), 1, -1 do
file:write(bid[v].quantity .. ";")
end
for v = tonumber(tb.offer_count), 1, -1 do
file:write(ask[v].price .. ";")
end
for v = tonumber(tb.bid_count), 1, -1 do
file:write(bid[v].price .. ";")
end
file:write("\n")
file:close()
end
end |