Не работает getDataSourceInfo в индикаторе

Страницы: 1
RSS
Не работает getDataSourceInfo в индикаторе
 
Пишу индикатор. Для целей его использования нужен sec_code.
Для его получения использую getDataSourceInfo, но она возвращает все значения пустыми, кроме интервала. его возвращает корректно.
Что делать? как получить sec_code?

function Init()
local info = getDataSourceInfo()
for key, val in pairs(info) do
   message("Индикатор запущен для: " .. tostring(key).."/"..tostring(val))
end
   return #Settings.line        -- Количество линий совпадает с числом элементов в массиве line
end
 
Его не стоит применять в Init. Запуск индикаторов у Квика устроены очень странно. Вызывайте на первом вызове колбека OnCalculate.
 
Цитата
Nikolay написал:
Его не стоит применять в Init. Запуск индикаторов у Квика устроены очень странно. Вызывайте на первом вызове колбека OnCalculate.
Спасибо за ответ!Методом научного тыка догадался. Чем больше работаю с QUIK тем больше поражаюсь, как чудесно он сделан :(.  
 
Цитата
Андрей написал:
Пишу индикатор. Для целей его использования нужен sec_code.
Для его получения использую getDataSourceInfo, но она возвращает все значения пустыми, кроме интервала. его возвращает корректно.
Что делать? как получить sec_code?

function Init()
local info = getDataSourceInfo()
for key, val in pairs(info) do
   message("Индикатор запущен для: " .. tostring(key).."/"..tostring(val))
end
   return #Settings.line        -- Количество линий совпадает с числом элементов в массиве line
end
получаю его вот так уже ...надцать лет и без проблем:
---------------
Код
function OnCalculate(i)
if i==1 then
    tinfo=getDataSourceInfo();
    clas=tinfo.class_code;
    sec=tinfo.sec_code; 
     interval=tinfo.interval;
end
--.....
end

 
Цитата
nikolz написал:
Цитата
Андрей написал:
Пишу индикатор. Для целей его использования нужен sec_code.
Для его получения использую getDataSourceInfo, но она возвращает все значения пустыми, кроме интервала. его возвращает корректно.
Что делать? как получить sec_code?

function Init()
local info = getDataSourceInfo()
for key, val in pairs(info) do
   message("Индикатор запущен для: " .. tostring(key).."/"..tostring(val))
end
   return #Settings.line        -- Количество линий совпадает с числом элементов в массиве line
end
получаю его вот так уже ...надцать лет и без проблем:
---------------
Код
   function   OnCalculate (i)
 if  i =  =  1   then 
    tinfo =  getDataSourceInfo ();
    clas = tinfo.class_code;
    sec = tinfo.sec_code; 
     interval = tinfo.interval;
 end 
 --..... 
 end 

  
Спасибо. Так примерно и сделал, но у вас чуть элегантнее. Поправил у себя.  
 
Только учитывайте, что этот подход рассчитан на то, что будет вызван OnCalculate для индекса 1. Что в большинстве случаев верно, конечно. Но, судя по сему - не гарантировано. Но предпочитаю более надежный подход через инициализацию переменных в замыкании и проверке первого вызова для любого индекса.  
 
Цитата
Nikolay написал:
Только учитывайте, что этот подход рассчитан на то, что будет вызван OnCalculate для индекса 1. Что в большинстве случаев верно, конечно. Но, судя по сему - не гарантировано. Но предпочитаю более надежный подход через инициализацию переменных в замыкании и проверке первого вызова для любого индекса.  
Проверил, да, есть нюанс. Работает у Вас как-то по другому. Если ввести переменную, которую инициализировать в OnInit в 1, например, а в OnCalculate проверять ее и увеличить на 1, если она равна 1, то работает надежнее. Особенно, если график привязан к таблице текущих торгов и ты по ней ходишь. Вернул как было у меня :)
 
Цитата
Nikolay написал:
Только учитывайте, что этот подход рассчитан на то, что будет вызван OnCalculate для индекса 1. Что в большинстве случаев верно, конечно. Но, судя по сему - не гарантировано. Но предпочитаю более надежный подход через инициализацию переменных в замыкании и проверке первого вызова для любого индекса.  
Можете доказать, что i может не быть равным 1 ?
Учитывая то, что при старте OnCallulate вызывается два раза. И i==1 будет обязательно.
 
Т.к. с 7-ой версии, кажется, разрешены пропуски на графике, то в теории первый бар может иметь не индекс 1.
Страницы: 1
Читают тему
Наверх