Субботний вечер. Тестирую функцию DataSourse с колбеком. Робот работает по 40 акциям. Колбек SetUpdatCallback начинает обрабатывать все то ли свечки, то ли тики, и на полчаса вешает квик. В рабочее время - в пятницу днём - такого не было, всё работало как надо. Почему? И как с этим бороться?
Вот мои функции:
Код
function mycallbackforallstocks(class,sec,index)
toLog (log, sec)
end
function DataSource(class,sec,interval)
ds[sec] = CreateDataSource(class,sec,interval)
ds[sec]:SetUpdateCallback(function(...) mycallbackforallstocks(class,sec,...) end)
return ds[sec]
end
Constantin,вопрос в другом. 1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась! 2. Нет ли рисков, что это произойдёт в будний день? 3. Как этого избегать?
Господа программисты, если не сложно, скажите пару слов по теме моего вопроса. Для вас эта проблема не сложная и легко решается, а у меня пропал вечер, я не мог по нормальному тестировать свой код. Дайте пожалуйста совет как быть.
Космонавт написал: 1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась!
Поясните что такое в Вашем понимании "обрабатывается"?
1. Все сделки в КВИК уже давно прогружены. 2. Запускается скрипт. 3. Вышеупомянутая функция mycallbackforallstocks перебирает каждую сделку из таблицы обезличенных сделок. 4. Это занимает 40 минут. Квик в это время нежизнеспособен - висит.
Космонавт написал: Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота
Нет не уверены. Вы ждете до времени 18-50 в пятницу, а речь про субботу.
Космонавт, Не, Вы не ответили на вопрос. И от ответа, будет зависеть объяснение происходящему.
Хорошо, раз диалога не получается постараюсь рассказать как это работает. Скорее всего, мы с Вами говорим про тиковый интервал, не так ли? Потому что если говорить о других интервалах то поведение немного уже другое. Функция установленная в SetUpdateCallback срабатывает только при получении информации терминалом. Просто так она сработать не может. Откройте в терминале тиковый график, подождите пока он загрузится. И закажите точно такой же график через CreateDataSource, и посмотрите сами что поедет через SetUpdateCallback. А приедет туда только свежая информация.
Поэтому возникает вполне логичный вопрос, как у Вас срабатывает функция когда с Ваших слов таблица уже прогрузилась. А срабатывает она скорее всего потому что таблица на самом деле не прогрузилась. А происходит перезакачка данных из-за смены даты. Но это лишь теория, так как ответа от Вас не прозвучало.
Утро. Полчаса до старта торгов. Запускаю робота. Опять безумные логи и постоянное срабатывание колбека. почему? КВИК само собой висит
Цитата
12/05/16 09:31:07,405 AFKS при запуске нет цены последней сделки number 12/05/16 09:31:07,718 AFKS готова!!! 12/05/16 09:31:07,718 AFLT при запуске нет цены последней сделки number 12/05/16 09:31:07,733 AFLT готова!!! 12/05/16 09:31:07,733 AKRN при запуске нет цены последней сделки number 12/05/16 09:31:07,749 AKRN готова!!! 12/05/16 09:31:07,749 ALRS при запуске нет цены последней сделки number 12/05/16 09:31:07,780 ALRS готова!!! 12/05/16 09:31:07,780 BANE при запуске нет цены последней сделки number 12/05/16 09:31:07,796 BANE готова!!! 12/05/16 09:31:07,796 BANEP при запуске нет цены последней сделки number 12/05/16 09:31:07,811 BANEP готова!!! 12/05/16 09:31:07,811 CHMF при запуске нет цены последней сделки number 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,811 BANEP Я в колбеке 12/05/16 09:31:07,827 CHMF готова!!! 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,827 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,842 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,858 BANEP Я в колбеке 12/05/16 09:31:07,874 BANEP Я в колбеке 12/05/16 09:31:07,874 BANEP Я в колбеке
и так до бесконечности...
Код вкратце:
Код
function mycallbackforallstocks(class,sec,index)
toLog (log, sec.." я в колбеке")
func = BB()
local num_candles=ds[sec]:Size()
line_10[sec],_,line_3[sec]=func(num_candles, {Period=60, Metod = "SMA", VType="Typical", round=4, Shift=7}, ds[sec])
tbl:Highlight(line_count_table[sec],'SECURITY',WHITE,RED,1000)
end
function DataSource(class,sec,interval)
ds[sec] = CreateDataSource(class,sec,interval)
ds[sec]:SetUpdateCallback(function(...) mycallbackforallstocks(class,sec,...) end)
return ds[sec]
end
function main()
while getSTime()==nil do sleep (10000) end
dofile(getWorkingFolder().."\\LuaIndicators\\BB.lua")
for sec in string.gmatch(ticker_list,"%a+") do
line_count=line_count+1
line_count_table[sec]=line_count
line=tbl:AddLine()
tbl:SetValue(line_count_table[sec],'SECURITY', sec)
lot[sec]=getParamEx(class,sec,"lotsize").param_value
step[sec]=getParamEx(class,sec,"SEC_PRICE_STEP").param_value
line_10[sec]=0
line_3[sec]=0
last_price[sec]=tonumber(getParamEx(class,sec,"last").param_value)
if last_price[sec]==0 or last_price[sec]==nil then
last_price[sec]=tonumber(getParamEx(class,sec,"prevprice").param_value)
toLog (log, sec.." при запуске нет цены последней сделки "..type(last_price[sec]))
end
tablebid = getParamEx(class, sec, "bid") --получаем таблицу "bid"
bid_best[sec]=tonumber(toPrice(sec, tablebid.param_value)) --из таблицы берЄм значение
tableoffer = getParamEx(class, sec, "offer") --получаем таблицу "offer"
offer_best[sec]=tonumber(toPrice(sec, tableoffer.param_value)) --из таблицы берЄм значение
local path=require"pl.path"
if path.exists ("C:\\trash3\\ap"..sec..".log")==false then
status_container ("C:\\trash3\\ap"..sec..".log", "sleep") --создаёт кто то один
end
DataSource(class,sec,interval)
sleep (10)
toLog (log, sec.." готова!!!")
func = BB()
local num_candles=ds[sec]:Size()
line_10[sec],_,line_3[sec]=func(num_candles, {Period=12, Metod = "SMA", VType="Typical", round=4, Shift=2}, ds[sec])
end
while is_run do
stime=getSTime()
if stime==nil then
stime=0
sleep (1)
end
if stime>100000 and stime<184005 then --не считаем вне сессии
for sec in string.gmatch(ticker_list,"%a+") do
................................. и так далее.
Космонавт, Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет. Если до запуска робота они есть, то в роботе колбек не сработает. Если нет, то робот их закажет и сработает колбек. Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные. Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,644 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,660 BANE Я в колбеке 12/05/16 09:45:42,675 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,691 BANE Я в колбеке 12/05/16 09:45:42,707 BANE Я в колбеке 12/05/16 09:45:42,707 BANE Я в колбеке
Sergey Gorokhov написал: Космонавт , Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет. Если до запуска робота они есть, то в роботе колбек не сработает. Если нет, то робот их закажет и сработает колбек. Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные. Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
Космонавт написал: Сейчас записей в таблице обезличенных сделок нет.
Если минутки, то таблица обезличенных сделок совершенно не причем. Интервальные графики формируются сервером и отправляются пользователю независимо от таблицы обезличенных сделок.