Субботний вечер. Тестирую функцию 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
Пользователь
Сообщений: Регистрация: 31.01.2015
04.12.2016 11:40:02
А три точки зачем использовать? Там один явный параметр передается.
Constantin,вопрос в другом. 1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась! 2. Нет ли рисков, что это произойдёт в будний день? 3. Как этого избегать?
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
04.12.2016 17:48:49
Цитата
Constantin написал: А три точки зачем использовать? Там один явный параметр передается.
чтобы при добавлении паоаметров не переделывать. да и вообще не включать голову лишнийраз. просто передал "вме оставшееся как есть". удобно
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 08:38:42
Господа программисты, если не сложно, скажите пару слов по теме моего вопроса. Для вас эта проблема не сложная и легко решается, а у меня пропал вечер, я не мог по нормальному тестировать свой код. Дайте пожалуйста совет как быть.
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 08:47:01
Цитата
Космонавт написал: 1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась!
Поясните что такое в Вашем понимании "обрабатывается"?
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:04:20
1. Все сделки в КВИК уже давно прогружены. 2. Запускается скрипт. 3. Вышеупомянутая функция mycallbackforallstocks перебирает каждую сделку из таблицы обезличенных сделок. 4. Это занимает 40 минут. Квик в это время нежизнеспособен - висит.
Вы уверены что Все сделки в КВИК уже давно прогружены? Или же как раз в процессе загрузки данных срабатывает функция mycallbackforallstocks?
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:12:03
Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:13:29
Цитата
Космонавт написал: Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота
Нет не уверены. Вы ждете до времени 18-50 в пятницу, а речь про субботу.
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:13:52
Вы уверены что в субботу данные у Вас не закачиваются повторно?
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:15:07
В субботу сервер брокера работал и прогрузил сделки пятницы в полном объёме
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:16:13
Цитата
Космонавт написал: В субботу сервер брокера работал и прогрузил сделки пятницы в полном объёме
Ну да, сервер брокера прогрузил. Но мы же говорим не про сервер брокера а про терминал QUIK. Вопрос все еще в силе.
Цитата
Вы уверены что Все сделки в КВИК уже давно прогружены? Или же как раз в процессе загрузки данных срабатывает функция mycallbackforallstocks?
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:18:20
Я уже ответил на ваш вопрос, а вы методами чёрной риторики пытаетесь выжать из меня другой ответ.
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:32:24
Космонавт, Не, Вы не ответили на вопрос. И от ответа, будет зависеть объяснение происходящему.
Хорошо, раз диалога не получается постараюсь рассказать как это работает. Скорее всего, мы с Вами говорим про тиковый интервал, не так ли? Потому что если говорить о других интервалах то поведение немного уже другое. Функция установленная в SetUpdateCallback срабатывает только при получении информации терминалом. Просто так она сработать не может. Откройте в терминале тиковый график, подождите пока он загрузится. И закажите точно такой же график через CreateDataSource, и посмотрите сами что поедет через SetUpdateCallback. А приедет туда только свежая информация.
Поэтому возникает вполне логичный вопрос, как у Вас срабатывает функция когда с Ваших слов таблица уже прогрузилась. А срабатывает она скорее всего потому что таблица на самом деле не прогрузилась. А происходит перезакачка данных из-за смены даты. Но это лишь теория, так как ответа от Вас не прозвучало.
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:37:15
Утро. Полчаса до старта торгов. Запускаю робота. Опять безумные логи и постоянное срабатывание колбека. почему? КВИК само собой висит
Цитата
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
................................. и так далее.
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:41:55
П.С. Вот сейчас видимо что то доделалось до конца, КВИК отвис, скрипт горит зелёненьким, всё тихо, ждём старта торгов.
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:45:59
Космонавт, Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет. Если до запуска робота они есть, то в роботе колбек не сработает. Если нет, то робот их закажет и сработает колбек. Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные. Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:46:59
Выключил скрипт, включил. Опять та же ерунда:
Цитата
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 Я в колбеке
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:48:38
Цитата
Sergey Gorokhov написал: Космонавт , Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет. Если до запуска робота они есть, то в роботе колбек не сработает. Если нет, то робот их закажет и сработает колбек. Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные. Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
К сожалению так как Вы полностью игнорируете задаваемые вопросы, то объяснить происходящее крайне затруднительно
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:50:54
В смысле игнорирую? Интервал минутки. На что ещё я не ответил?
Пользователь
Сообщений: Регистрация: 05.02.2015
05.12.2016 09:51:51
Сейчас записей в таблице обезличенных сделок нет.
Пользователь
Сообщений: Регистрация: 23.01.2015
05.12.2016 09:54:17
Цитата
Космонавт написал: Сейчас записей в таблице обезличенных сделок нет.
Если минутки, то таблица обезличенных сделок совершенно не причем. Интервальные графики формируются сервером и отправляются пользователю независимо от таблицы обезличенных сделок.