1

Тема: Функция CreateDataSource

Всех приветствую, подскажите с помощью функции CreateDataSource - возможно ли получать данные о свечах любых доступных торговых инструментов неоткрывая их график?
А проблема такова что я использовал данную функцию в скрипте и обнаружил что для того чтобы эта функция получала данные по инструменту его график должен быть открыт, если график неоткрыт то функция ничего не получает
В Система/Настройки/Основные настройки/Программа-получение данных
Сначала стояла опция - "Исходя из из настроек открытых пользователем таблиц"
Я ее переключил в - "С учетом настроек, выбранных через пункт меню "Система/Заказ данных/Поток котировок"
и поставил галочку "Обновлять все данные после расширения списка получаемых инструментов и параметров"
Там, допустим меня интересуют акции, включил фильтр инструментов и там добавил в список получаемых ценных бумаг все имеющиеся доступными акции
Но ничего не изменилось - CreateDataSource по прежнему получает данные с открытых графиков, даже терминал перезапустил - также не помогло, пробовал и Система/Заказ данных/Перезаказать данные, со всеми галочками, перезапустил терминал - ничего не изменилось

2 (2019-01-10 10:27:02 отредактировано swerg)

Re: Функция CreateDataSource

В справке написано так:

Особенности получения значений Таблицы текущих торгов

Получение значений параметров Таблицы текущих торгов выполняется функцией getParamEx() или getParamEx2(). Актуальные значения параметров можно получить, если выполнен заказ данных. Способы выполнения заказа данных:

  • Вручную, выбрав пункт меню Рабочего места QUIK Система / Заказ данных / Поток котировок...и указав необходимые параметры и инструменты на классе;

  • При включенной настройке Рабочего места QUIK «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных») и открытой Таблице текущих торгов с необходимыми параметрами и инструментами на классе;

  • Автоматически из скрипта Lua с помощью функций ParamRequest или CreateDataSource, при включенной настройке Рабочего места QUIK «Исходя из настроек открытых пользователем таблиц» (меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных»).

Я думаю, что подчеркнутое - это тот момент, который для вас важен.

3

Re: Функция CreateDataSource

Вот еще, кстати, нюанс про получение данных при использовании CreateDataSource:

Для получения данных через CreateDataSource необходимо, чтобы
либо был открыт соответствующий график,
либо был осуществлен заказ (данных) через вызов функции ds:SetEmptyCallback().

Т.е. просто так волшебно данные при вызове CreateDataSource не будут поступать. Конечно же, можно вызвать не только ds:SetEmptyCallback(), но и назначит полноценный callback для получения данных, если такой вариант пригодится для работы скрипта.

Обратите внимание на наличие sleep(100) в скрипте. Это указание на то, что данные "мгновенно" приходить не начнут сразу после вызова ds:SetEmptyCallback(), требуется некоторое время на их заказ/приезд с сервера. (Речь про вариант, когда в рамках одной функции вызвали CreateDataSource и тут же пытаемся получать параметры вызовом getParamEx(), например)

Пример кода:

ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) 
ds:SetEmptyCallback()
sleep(100)

4

Re: Функция CreateDataSource

swerg пишет:

Пример кода:

ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M15) 
ds:SetEmptyCallback()
sleep(100)

Что то не работает - если график не открыт то все равно не получает так CreateDataSource данные по инструменту
Может потому что я на демо-счете и там не дали такой роскоши?

5

Re: Функция CreateDataSource

sleep(100) не гарантирует. Наверняка дождаться подгрузки последних 100-500 баров в цикле, т.е. они не должны быть пустыми таблицами

6

Re: Функция CreateDataSource

Nordman пишет:

Что то не работает - если график не открыт то все равно не получает так CreateDataSource данные по инструменту

Что такое "не получает"? как это выглядит?
CreateDataSource выполняется без ошибок? но в коде после него не удаётся получить параметры? или как?

7

Re: Функция CreateDataSource

swerg пишет:
Nordman пишет:

Что то не работает - если график не открыт то все равно не получает так CreateDataSource данные по инструменту

Что такое "не получает"? как это выглядит?
CreateDataSource выполняется без ошибок? но в коде после него не удаётся получить параметры? или как?

Просто не выдает никаких данных по функциям  O, H, L, C, V, T, Size, без всяких сообщений об ошибках, а если график открыт то все норм

8 (2019-02-06 08:45:36 отредактировано swerg)

Re: Функция CreateDataSource

Наверное пора посмотреть на ваш скрипт.
Ну или на простой демо-пример, где проблема проявляется.

Приведите, пожалуйста, такой пример.

9

Re: Функция CreateDataSource

скажите. вот я создаю datasource и устанавливаю callback. и когда идут онлайн-сделки callback для каждой свечки по каждой новой сделке по инструменту вызывается ОДИННАДЦАТЬ раз (quik 7.20). при этом все поля свечки новые уже при первом вызове. это как бы норм?

10

Re: Функция CreateDataSource

swerg пишет:

Наверное пора посмотреть на ваш скрипт.
Ну или на простой демо-пример, где проблема проявляется.

Приведите, пожалуйста, такой пример.

У меня точно такая же проблема. Вот скрипт:

function main()
ds, Error = CreateDataSource("SPBFUT", "SIZ0", INTERVAL_M1,"bid")
if ds == nil then 
message('Ошибка подключения: '..Error) --ошибки нету
end
ds:SetEmptyCallback()
sleep(60000)
message(tostring(ds:Size())) --всегда возвращает 0
end

11

Re: Функция CreateDataSource

Тех. поддержка на форуме QUIK по данному вопросу подсказывает следующее:

Во-первых, для работы CreateDataSource по параметру (bid в Вашем случае), необходимо, чтобы были включены следующие настройки в пункте меню Система/Настройки/Основные настройки/Программа/Сохранение данных:
- "Данные, отражающие текущее состояние и всю историю изменений"
- "Получать пропущенные данные"

Также заметим, что 0 - это все еще результат, а не ошибка. Рекомендуем построить график по данному параметру и проверить, есть ли на нем свечи.

12

Re: Функция CreateDataSource

swerg пишет:

Тех. поддержка на форуме QUIK по данному вопросу подсказывает следующее:

Во-первых, для работы CreateDataSource по параметру (bid в Вашем случае), необходимо, чтобы были включены следующие настройки в пункте меню Система/Настройки/Основные настройки/Программа/Сохранение данных:
- "Данные, отражающие текущее состояние и всю историю изменений"
- "Получать пропущенные данные"

Также заметим, что 0 - это все еще результат, а не ошибка. Рекомендуем построить график по данному параметру и проверить, есть ли на нем свечи.

Это я там писал). На другом форуме подсказали: неверно прописан инструмент. Надо было строго соблюдать регистр