Open aBaTaPbl4 opened 5 years ago
Скорее всего из-за перезагрузки данных о свечах в терминале. Если внимательно посмотреть код в файле qsfunctions.lua, то там есть такие функции:
function qsfunctions.subscribe_to_candles(msg)
local ds, is_error = create_data_source(msg)
if not is_error then
local class, sec, interval = get_candles_param(msg)
local key = get_key(class, sec, interval)
data_sources[key] = ds
last_indexes[key] = ds:Size()
ds:SetUpdateCallback(
function(index)
data_source_callback(index, class, sec, interval)
end)
end
return msg
end
function data_source_callback(index, class, sec, interval)
local key = get_key(class, sec, interval)
if index ~= last_indexes[key] then
last_indexes[key] = index
local candle = fetch_candle(data_sources[key], index - 1)
candle.sec = sec
candle.class = class
candle.interval = interval
local msg = {}
msg.t = timemsec()
msg.cmd = "NewCandle"
msg.data = candle
sendCallback(msg)
end
end
Соответственно, событие NewCandle вызывается вот тут:
ds:SetUpdateCallback(
function(index)
data_source_callback(index, class, sec, interval)
end)
а "ds:SetUpdateCallback" - не что иное как событие терминала. Так что вероятно лучше спросить разработчиков квика о механике работы их колбэка. QUIKSharp тут скорее всего не причем, он лишь транслирует это событие Вам.
Подскажите, кэшируются ли свечи в самом терминале или каждый раз при запросе истории QUIK идёт на сервер за всем объёмом, а не только пропущенным? Т.е. вопрос в том, по событию новой свечи или по таймеру, было бы рационально тупо запрашивать всю или частичную историю, а не заморачиваться на ведение, склеивание и упорядочивание свечей в базе данных?
И ещё вдогонку, зачем при инициализации квика new Quik(Quik.DefaultPort, new InMemoryStorage())
ему передаётся стрим? Можно ли таким образом кэшировать запрошенные графики?
И ещё вдогонку, зачем при инициализации квика
new Quik(Quik.DefaultPort, new InMemoryStorage())
ему передаётся стрим? Можно ли таким образом кэшировать запрошенные графики?
Исходники скачайте да и гляньте. Проект не самый большой, - и в целом всё понятно написано, в отличие от того же проекта StockSharp, который по ходу доктор Франкешнтейн сварганил в перерыве на обед...
Есть ишуя #124, в которой эта проблема вскользь упоминается. Но ответа на вопрос "Почему" там не нашел.
Суть проблемы
Подписываюсь на получение новых свечей:
В процессе работы бота, в рандомное время (ночью-днем-утром перед тем как зубы чистить), - начинают приходить старые свечи. Даже прошлогодние могут приходить.
Поведение мягко говоря неожиданное. Можете подсказать, почему так происходит?