Очередное прояснение тонкостей CreateDataSource и SetUpdateCallback

Страницы: 1
RSS
Очередное прояснение тонкостей CreateDataSource и SetUpdateCallback
 
Создаю источник данных с интервалом INTERVAL_M1. Назначаю ему коллбэк и SetUpdateCallback возвращает true. В открытой таблице сделок вижу, что нужные сделки идут, но коллбэк не вызывается. Он также не вызывается при формировании новой минутной свечи, т.е. он вообще не вызывается. Правильно ли понял, что нужно явно CreateDataSource c тиковым интервалом вызвать, чтобы обновления получать или еще какая тонкость имеется?
 
Добрый день,

Могли бы Вы прислать конкретный код скрипта, используя который сталкиваетесь с описанной проблемой ?
 
Цитата
Daniil Pozdnyakov написал:
Добрый день,

Могли бы Вы прислать конкретный код скрипта, используя который сталкиваетесь с описанной проблемой ?
Код
if sub == nil then
         local r = cds.gds[datasourceid].ds:SetUpdateCallback(function(...)
         updcallback(cds.gds[datasourceid].ds, clientid, datassourceid,...)
    end)
         utils.dprint("119 cds.lua subds "..tostring(r) )
    end
...
function updcallback(lds, client, datasourceid, sub, index) 
   message("UPDCALLBACK "..class .." ".. security)
   utils.dprint(security .. " updcallback")
end


Весь код не присылаю, там довольно много сторонней логики. но суть в том, что local r получает true, что по идее должно говорить о том, все вызвано правильно.
 
Виталий, чет не понял, в реальном коде updatecallback тоже определен после того, как использован в SetUpdateCallback? Тогда вы поставили nil в качестве колбека )
 
Цитата
Anton написал:
Виталий, чет не понял, в реальном коде updatecallback тоже определен  после  того, как использован в SetUpdateCallback? Тогда вы поставили nil в качестве колбека )
Попробовал выше поставить его, тот же результат
 
Цитата
Виталий написал:
Попробовал
Лучше вот что попробовать
Код
if sub == nil then
         local r = cds.gds[datasourceid].ds:SetUpdateCallback(function(...)
             local r, e = pcall(updcallback(cds.gds[datasourceid].ds, clientid, datassourceid,...))
             if not r then message(e) end
     end)
         utils.dprint("119 cds.lua subds "..tostring(r) )
    end
 
Ну только скобки убрать, конечно, впопыхах как есть осталось.
 
Цитата
Anton написал:
Лучше вот что попробовать
Аналогично. Установка колбэка возвращает true, но внутрь него скрипт не заходит. Данные приходят в таблице.
 
Виталий,  вот этот скрипт должен сообщение показать. Если покажет, значит, у вас в скрипте чудеса. Если нет - значит квик действительно не вызывает.
Код
local run = true

function OnStop()
   run = false
end

function main()
   local ds = CreateDataSource('TQBR', 'LKOH', INTERVAL_M5)
   ds:SetUpdateCallback(function()
      message('HELLO')
      ds:SetEmptyCallback()
   end)
   while run do sleep(100) end
   ds:Close()
end
 
Цитата
Anton написал:
скрипте чудеса
Да, это они. Буду искать.
Страницы: 1
Читают тему
Наверх