Как не получать все тики через SetUpdateCallback

Страницы: 1
RSS
Как не получать все тики через SetUpdateCallback
 
Субботний вечер. Тестирую функцию 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, это функция Михаила
http://www.bot4sale.ru/blog-menu/qlua/spisok-statej/379-1-collback-for-al-ds.html

я взял её как есть
 
Constantin,вопрос в другом.
1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась!
2. Нет ли рисков, что это произойдёт в будний день?
3. Как этого избегать?
 
Цитата
Constantin написал:
А три точки зачем использовать? Там один явный параметр передается.
чтобы при добавлении паоаметров не переделывать.
да и вообще не включать голову лишнийраз. просто передал "вме оставшееся как есть". удобно
 
Господа программисты, если не сложно, скажите пару слов по теме моего вопроса. Для вас эта проблема не сложная и легко решается, а у меня пропал вечер, я не мог по нормальному тестировать свой код. Дайте пожалуйста совет как быть.
 
Цитата
Космонавт написал:
1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась!
Поясните что такое в Вашем понимании "обрабатывается"?
 
1. Все сделки в КВИК уже давно прогружены.
2. Запускается скрипт.
3. Вышеупомянутая функция mycallbackforallstocks перебирает каждую сделку из таблицы обезличенных сделок.
4. Это занимает 40 минут. Квик в это время нежизнеспособен - висит.
 
Космонавт,

Вы уверены что Все сделки в КВИК уже давно прогружены?
Или же как раз в процессе загрузки данных срабатывает функция mycallbackforallstocks?
 
Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота
 
Цитата
Космонавт написал:
Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота

Нет не уверены.
Вы ждете до времени 18-50 в пятницу, а речь про субботу.
 
Вы уверены что в субботу данные у Вас не закачиваются повторно?
 
В субботу сервер брокера работал и прогрузил сделки пятницы в полном объёме
 
Цитата
Космонавт написал:
В субботу сервер брокера работал и прогрузил сделки пятницы в полном объёме

Ну да, сервер брокера прогрузил. Но мы же говорим не про сервер брокера а про терминал QUIK.
Вопрос все еще в силе.
Цитата
Вы уверены что Все сделки в КВИК уже давно прогружены?
Или же как раз в процессе загрузки данных срабатывает функция mycallbackforallstocks?
 
Я уже ответил на ваш вопрос, а вы методами чёрной риторики пытаетесь выжать из меня другой ответ.
 
Космонавт,
Не, Вы не ответили на вопрос.
И от ответа, будет зависеть объяснение происходящему.

Хорошо, раз диалога не получается постараюсь рассказать как это работает.
Скорее всего, мы с Вами говорим про тиковый интервал, не так ли? Потому что если говорить о других интервалах то поведение немного уже другое.
Функция установленная в 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 написал:
Космонавт  ,
Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет.
Если до запуска робота они есть, то в роботе колбек не сработает.
Если нет, то робот их закажет и сработает колбек.
Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные.
Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
Интервал минутки, все графики до единого закрыты.
 
Космонавт,

К сожалению так как Вы полностью игнорируете задаваемые вопросы, то объяснить происходящее крайне затруднительно
 
В смысле игнорирую?
Интервал минутки. На что ещё я не ответил?
 
Сейчас записей в таблице обезличенных сделок нет.
 
Цитата
Космонавт написал:
Сейчас записей в таблице обезличенных сделок нет.

Если минутки, то таблица обезличенных сделок совершенно не причем.
Интервальные графики формируются сервером и отправляются пользователю независимо от таблицы обезличенных сделок.

При заказе, Вы получаете исторические данные.
 
Ок, так что мне делать?
 
Цитата
Космонавт написал:
Ок, так что мне делать?

Добавьте в колбек условие проверки на дату.
Если она не сегодняшняя, то данные просто игнорировать.
 
Спасибо.
Вы молодец.
Хорошего рабочего дня!
Страницы: 1
Читают тему
Наверх