CreateDataSource

Страницы: 1
RSS
CreateDataSource, какое правильное расположение функции CreateDataSource?
 
где правильно подписываться на источник данных при использовании одного инструмента и одного ТФ? Делать это в каждой функции и закрывать в конце или
разместить подписку в
function OnConnected()
ds = CreateDataSource(Class_Code, Sec_Code, INTERVAL_M1)
а закрыть подписку
function OnStop(stop_flag)
ds:Close()
 
Надо создавать DS один раз, и закрывать в конце программы.

Но чтобы начать получать данные надо еще подписаться на callback.
 
Раньше надо было подписываться в main.
Я так и делаю.
Возможно разработчики уже исправили этот ляп, я не проверял.
 
Цитата
Constantin Constantin пишет:
Но чтобы начать получать данные надо еще подписаться на callback.
А без такой подписки данные вообще не должны приходить?
Или все-таки придут один раз 3000 свечей за прошлый день, плюс сегодняшние до текущего момента, а дальше просто обновляться не будут, т.е. не будут добавляться новые свечи?
 
Без подписки, вроде, вообще не будут приходить данные, если только ранее такой DS не был где-то открыт или уже открыт график с этим тикером.

Новые свечи будут добавляться, если начался процесс получения данных по этому тикеру. Когда этот процесс начинается? А фиг его знает. Только при подписке на колбак или еще когда-то - это в документации не написано.
 
Цитата
Constantin Constantin пишет:
Без подписки, вроде, вообще не будут приходить данные, если только ранее такой DS не был где-то открыт или уже открыт график с этим тикером.
А я сейчас наблюдал совсем обратное. В терминале не было открыто ни одного графика, я вызвал в скрипте функцию CreateDataSource и увидел, как в каталоге archive появился файл с архивом графика по данному инструменту (то же самое происходит при открытии графика вручную в терминале).
 
и что тут странного? рассматривайте папку "archive", как кеш на локальной машине. он служит для того, что уменьшить траффик и, соответственно, нагрузку на квиковские сервера. просто в следующий раз, когда вы опять захотите открыть тот же график - квик уже не будет обращаться на сервер за прошлыми 3000-ми свечами, а качнёт их из файла. а с сервера будет получать только актуальные данные.
 
p.s. причём, абсолютно не имеет значения: для графика вам эти свечки понадобились или для скрипта и его datasource, т.к. и там и там идёт обращение к одной и той же функции. а createdatasource - просто обёртка к ней.
 
Цитата
sam063rus пишет:
и что тут странного?
Вы не на то обратили внимание. Про файл я написал только для того, чтобы показать, что вызов функции CreateDataSource без последующего обращения к функциям SetUpdateCallback или SetEmptyCallback все равно приводит к получению данных с сервера.
 
  • param – необязательный параметр. Если параметр не задан, то заказываются данные на основании таблицы всех сделок, если задан – данные по этому параметру.
  • Параметр Тип Описание SetUpdateCallback function Позволяет задать пользователю функцию обратного вызова для обработки изменившихся свечек
таким образом, ничего странного.


Кстати, вот ещё интересная информация: http://quik.ru/bank/modules/server/archives/
 
http://forum-archive.quik.ru/forum/lua/125655/125655/
 
Цитата
sam063rus пишет:
SetUpdateCallback function Позволяет задать пользователю функцию обратного вызова для обработки изменившихся свечек
А для чего тогда нужна функция SetEmptyCallback ?
В руководстве написано "Функция позволяет получать данные с сервера". Это надо понимать так, что без ее использования (и без SetUpdateCallback) данные не должны быть получены с сервера?
 
Цитата
Серж пишет:
http://forum-archive.quik.ru/forum/lua/125655/125655/
Вы имеете в виду, что поступление данных с сервера в данном случае (т.е. без использования SetUpdateCallback  и SetEmptyCallback) является ошибкой в работе программы?
 
Функция SetEmptyCallback это то же самое что и SetUpdateCallback, только указывать функцию не требуется.
 
Цитата
sam063rus пишет:
Функция SetEmptyCallback это то же самое что и SetUpdateCallback, только указывать функцию не требуется.
Так а в чем конкретно смысл ее использования? В теории (согласно задумке разработчиков) и на практике (исходя из того как оно работает на самом деле)?

С SetUpdateCallback вроде все понятно: цель - отреагировать на изменение свечи и выполнить какие-то действия в теле функции callback_function, указываемой в качестве параметра.
А вот с SetEmptyCallback все далеко не очевидно.
 
Для того чтобы получить текущее состояние данных достаточно CreateDataSource.
Однако чтобы фактически произошла подписка на новые данные (а новыми считаются любые полученные с сервера) то нужен колбек SetEmptyCallback или SetUpdateCallback.
 
Цитата
Сергей Горохов, ARQA Technologies пишет:
Для того чтобы получить текущее состояние данных достаточно CreateDataSource.
Однако чтобы фактически произошла подписка на новые данные (а новыми считаются любые полученные с сервера) то нужен колбек SetEmptyCallback или SetUpdateCallback.
Однако, в текущей версии CreateDataSource работает не так, как было задумано разработчиками. Это описано в теме по ссылке, которую я давал выше.
 
Цитата
Для того чтобы получить текущее состояние данных достаточно CreateDataSource.
Однако чтобы фактически произошла подписка на новые данные (а новыми считаются любые полученные с сервера) то нужен колбек SetEmptyCallback или SetUpdateCallback.
Добавьте эту информацию в документацию, а то ведь спрашивать будут.
Естественно, после устранения ошибок, связанных с работой функции CreateDataSource.
 
если я правильно понял всю эту хрень, то:
  • createdatasource без параметров получает данные на основе таблицы всех сделок
  • наличие setupdatecallback заставляет обновляться при получении изменения по указанному параметру
  • наличие setemptycallback заставляет обновляться при получении новой свечки
 
Здравствуйте,
для чтения и записи исторических данных из квика решил зациклить CreateDataSource и в конце каждого обращения к новому символу делаю Close(). Проблема в том что квик виснет после успешной обработки примерно 15-20 символов.
Можно ли так вообще использовать эту функцию?
 
Цитата
Mikhail написал:
Здравствуйте,
для чтения и записи исторических данных из квика решил зациклить CreateDataSource и в конце каждого обращения к новому символу делаю Close(). Проблема в том что квик виснет после успешной обработки примерно 15-20 символов.
Можно ли так вообще использовать эту функцию?
Добрый день.

Чтобы понять причины зависания потребуется для начала Ваш скрипт. Можно выложить тут, либо прислать нам на quiksupport@arqatech.com
 
Цитата
Egor Zaytsev написал:
Цитата
Mikhail написал:
Здравствуйте,
для чтения и записи исторических данных из квика решил зациклить CreateDataSource и в конце каждого обращения к новому символу делаю Close(). Проблема в том что квик виснет после успешной обработки примерно 15-20 символов.
Можно ли так вообще использовать эту функцию?
Добрый день.

Чтобы понять причины зависания потребуется для начала Ваш скрипт. Можно выложить тут, либо прислать нам на  quiksupport@arqatech.com
Здравствуйте! Спасибо. Начал готовить код (покороче) и тут выяснилось что крашит Квик не эта функция а обращение к файловой системе при записи всех этих файлов (без задержек), причем на системе с SSD диском такое не происходит. Добавлю задержек и потестирую. Напишу позже.
 
Да, с задержками между циклами хотябы 100мс такой ошибки больше не появляется.
Страницы: 1
Читают тему (гостей: 1)
Наверх