функция обратного вызова для SetUpdateCallback()

Страницы: 1
RSS
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
 
Здравствуйте!
Если я использую одинаковые действия в функциях обратного вызова, заданных с помощью SetUpdateCallback() для разных источников данных, но внутри этих функций необходимо учитывать, по какому инструменту произошло обновление свечи (и, возможно, на каком таймфрейме), то есть ли способ использовать одну и ту же функцию для разных источников данных по разным инструментам?
Или же нужно создавать отдельные экземпляры однотипных функций для каждого источника данных с жестко прописанными внутри кодами инструментов и таймфреймов?
 
Здравствуйте,
Для каждого источника нужно задать свою функцию через SetUpdateCallback.
Но так как действия будут производиться одни и те же, будет удобней создать одну функцию, а через колбеки просто ее вызывать
 
http://www.bot4sale.ru/blog-menu/qlua/spisok-statej/379-1-collback-for-al-ds.html
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov пишет:
Но так как действия будут производиться одни и те же, будет удобней создать одну функцию, а через колбеки просто ее вызывать
Проблема в том, что эта функция должна как-то узнать, источником данных по какому инструменту (и таймфрейму) в данный момент она была вызвана.


s_mike@rambler.ru, спасибо за подсказку.
Только я не совсем понял, в приведенном ниже коде должны быть именно троеточия или на их месте должно стоять что-то другое:

Код
function mycallbackforallstocks(class,security,...) 
   message(class .. " " .. security,1)
end

function DataSource(class,security,interval)
   local ds = CreateDataSource(class,security,interval)
   ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,...) end)
   return ds
end
 
Ничего не надо исправлять. Троеточия - часть синтаксиса Lua
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
А если в приведенном примере внутри функции mycallbackforallstocks мне нужно получить номер изменившейся свечки, то нужно добавить в ее описание третий параметр index ?

Код
function mycallbackforallstocks(class,security,index,...) 
   message(class .. " " .. security .. " - " .. tostring(index), 1)
end

ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,index,...) end) 
 
пример функции от Михаила

Код
function mycallbackforallstocks(index,class,security) 
   message(tostring(index).. " " ..class .. " " .. security,1)
end

function DataSource(class,security,interval)
   local ds = CreateDataSource(class,security,interval)
   ds:SetUpdateCallback(function(index) mycallbackforallstocks(index,class,security) end)
   return ds
end

function main()
DataSource("TQBR","LKOH",INTERVAL_TICK)
   while not_stopped do
      sleep(1000)
   end
end
 
Цитата
s_mike@rambler.ru пишет:
Троеточия - часть синтаксиса Lua
А как же это? Значит, можно и без них?
 
Цитата
Дмитрий пишет:
А как же это? Значит, можно и без них?
Троеточие означает переменное количество аргументов. Можно с ними можно и без них.
Я привел пример без троеточий
 
Понятно, спасибо!
 
Михаил, я пытался применить ваш код для работы со многими бумагами, но не вышло.
close_price=ds:C(index) - не расчитывается.
Подскажите пожалуйста где ошибка.
Код
log="TESTS_ARROW_NEW.log"
f_ticker_list="BRZ6,EDZ6,SiZ6"
is_run=true
ds={}

function mycallbackforallstocks(class,security,index) 
   -- Теперь в колбеке нам доступны код и класс инструмента
   close_price=ds:C(index)
   message(close_price ,1)
   -- Также доступны все параметры, которые приходят с колбеком из терминала
   xxx = index
end

function DataSource(class,security,interval)
   local ds = CreateDataSource(class,security,interval)
   ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,...) end)
   return ds
end

function main()

for sec in string.gmatch(f_ticker_list,"%w+") do
ds[sec]=DataSource("SPBFUT", tostring(sec),INTERVAL_M1)
end

    while is_run do
    sleep (10)    
    end
end
 
Подскажите, пожалуйста.
функция "обертка" ,будет исполняться в потоке обратных вызовов или в дополнительном main()?
 
Алексей Дуванов,
В обычном
Страницы: 1
Читают тему
Наверх