динамический заказ тиковых данных

Страницы: 1
RSS
динамический заказ тиковых данных
 
терминал v7.19
нужно динамически заказывать тиковые данные(обезличенные сделки) и удалять их из загрузки(когда перестали быть нужны)
желательно еще и список параметров сделки контролировать чтобы лишнее не загружать(как через таблицу всех сделок)
все это при закрытой таблице всех сделок.

пример:
допустим в произвольный момент нужно заказать подписку на
(SPBFUT, RIZ8) с параметрами
номер
код класса
код бумаги
дата
время
цена
кол-во

ну а потом удалить ее(подписку). перестать загружать и отчистить загруженные данные тк больше не требуются.

для заказа данных(тиковых) я так понял в этом случае единственным решением является
CreateDataSource(c_code, s_code, INTERVAL_TICK)
которая закажет сразу все параметры(и те которые мне не нужны)
и получать я их буду через OnAllTrade(новые)
вопросы
1) как то туда(в CreateDataSource) есть возможность сразу все параметры передать которые я хочу получать?
2) как проверять включена ли загрузка этого параметра? для стакана есть IsSubscribed_Level_II_Quotes. для обезличенных сделок не нашел.
3) как убрать подписку на какой-либо параметр[ы] обезличенной сделки (или бумагу целиком в частном случае если для параметров  не возможно)
4) нужно ли хранить таблицу ds полученную от CreateDataSource. если ее удалить перестанет ли идти подписка?
касаемо параметров бумаги (таблица текущих параметров)
5) почему нету функции isParamRequest (узнать заказан ли нужный мне параметр). Подписка/отписка же есть. или я ее тоже не нашел в документации. как проверять подписку?

вопросы наводящие тк лично мне не хватило функционала апи для заказа тиковых данных.
если кратко опишете то чем воспользоватся для решение проблемы описанной в первом обзаце можно не отвечать на остальное.
я просто не нашел в доках функций которые ее решают.
 
Цитата
Антон написал:
1) как то туда(в CreateDataSource) есть возможность сразу все параметры передать которые я хочу получать?
Вы можете заказать данные и потом брать из AllTrade то что Вам надо. При этом не обязательно использовать именно OnAllTrade, можно например получать данные из самого источника (Функции O, H, L, C, V, T) или через свой колбек (SetUpdateCallback) или через SearchItems (к слову в ней можно назначить функцию со своими параметрами)
Цитата
Антон написал:
2) как проверять включена ли загрузка этого параметра? для стакана есть IsSubscribed_Level_II_Quotes. для обезличенных сделок не нашел.
К сожалению такой функции нет.
Цитата
Антон написал:
3) как убрать подписку на какой-либо параметр[ы] обезличенной сделки (или бумагу целиком в частном случае если для параметров не возможно)
Отдельно отказаться от некоторых параметров нельзя.
в случае CreateDataSource, закрыть поток можно через функцию Close.
Цитата
Антон написал:
4) нужно ли хранить таблицу ds полученную от CreateDataSource. если ее удалить перестанет ли идти подписка?касаемо параметров бумаги (таблица текущих параметров)
что значит "удалить"? Пока не вызовите Close подписка не остановится.
Цитата
Антон написал:
5) почему нету функции isParamRequest (узнать заказан ли нужный мне параметр). Подписка/отписка же есть. или я ее тоже не нашел в документации. как проверять подписку?
К сожалению такой функции нет.
 
Т.е. вот об этом и речь, раз
1) нельзя проверить подписку(влючено ли получение) на обезличенные сделки по инструменту, а также
2)  закрыть ранее открытую  (вручную через галочку/скриптом через  CreateDataSource) подписку на получение обезличенных сделок по  инструменту
возможно стоит данные функции ввести? ведь просто в терминале галочками это сделать возможно. он это позволяет.
Аналогично  с проверкой подписки на параметр из ТТП(isParamRequest). В терминале  получаемые параметры отмечены галочкой значит возможность такая опять же  имеется. добавьте данные функции в QLua, пожалуйста.


Касаемо
Цитата
Sergey Gorokhov написал:
Вы можете заказать данные и потом брать из AllTrade то что Вам надо. При этом не обязательно использовать именно OnAllTrade, можно например получать данные из самого источника (Функции O, H, L, C, V, T) или через свой колбек (SetUpdateCallback) или через SearchItems (к слову в ней можно назначить функцию со своими параметрами)
Мне нужно одинаковые параметры получать по разным бумагам(список изменяется). поэтому одна функция более чем подходит. и тики нужно получать в момент их прихода в терминал а не срезами, поэтому SearchItems не подходит.
Для SetUpdateCallback пока не понимаю что будет означать index т.к. все примеры для интервалов больше тика. это номер эл-та в таблице AllTrades, а не номер свечки как в документации написано? (меня только тиковые данные интересуют сейчас)

Цитата
Sergey Gorokhov написал:
что значит "удалить"? Пока не вызовите Close подписка не остановится.
Код
OnInit() 
  local ds = createDataSource('SPBFUT', 'RIZ8', INTERVAL_TICK)  
  ds:setEmptyCallback()
 end 
ds удаляется а подписка получается остается? хотя никто ее не использует после остановки этого скрипта.(таблиц в терминале не открыто). разве не логично удалять такие подписки. собсно это в дополнение к проверки на подписку. для таких моментов она и нужна. раз мы можем получать данные хотя никто их не обрабатывает. просто забыли закрыть ds. или не сохранили его в глобальной таблице луа. (что я имел ввиду под удалением).
 
Цитата
Антон (band) написал:
Для SetUpdateCallback пока не понимаю что будет означать index т.к. все примеры для интервалов больше тика. это номер эл-та в таблице AllTrades, а не номер свечки как в документации написано? (меня только тиковые данные интересуют сейчас)
Именно номер свечки.
Вот что на тиковом графике будет под номером 1 то и вернет функция. При том что эта запись в AllTrades может быть вообще где-нибудь по середине таблицы.

Цитата
Антон (band) написал:
ds удаляется а подписка получается остается?
ds это источник, а мы говорим про подписку на данные. Это немного разные вещи.
источник можно удалить или присвоить nil, подписка на данные от этого не закроется.
Если Вы удалите источник то не сможете выполнить отписку через Close

Цитата
Антон (band) написал:
разве не логично удалять такие подписки.
Нет не логично, от куда терминал знает нужна скрипту эта подписка или нет? может он ее использует через OnAllTrade или вообще скрипту она понадобится как-нибудь потом.
Скрипт должен сам сообщить терминалу когда надо закрыть подписку и для этого есть Close.

Цитата
Антон (band) написал:
собсно это в дополнение к проверки на подписку. для таких моментов она и нужна. раз мы можем получать данные хотя никто их не обрабатывает. просто забыли закрыть ds. или не сохранили его в глобальной таблице луа. (что я имел ввиду под удалением).
Нет не нужна т.к. повторный заказ через CreateDataSource не приводит к дублированию информации.
Т.е. для отписки по удаленному ds вы можете повторно вызвать CreateDataSource, а потом Close.
А вообще, удаление ds это плохой тон и таких моментов лучше избегать.
 
Т.е. если я хочу проверить открытые подписки я должен пройтись по списку инструментов. создать для каждого
ds = createdatasource(c_code, s_code, interval_tick)
что не приведет к заказу данных(допустим он закрыт для этой бумаги в терминале)
а дальше проверить открыта ли уже подписка в терминале я не могу. но могу закрыть подписку вызвав close, так?
и терминал перестанет данные получать даже если подписка была открыта другими скриптами и они с этими данными работают?

Цитата
Sergey Gorokhov написал:
Нет не логично, от куда терминал знает нужна скрипту эта подписка или нет? может он ее использует через OnAllTrade или вообще скрипту она понадобится как-нибудь потом.Скрипт должен сам сообщить терминалу когда надо закрыть подписку и для этого есть Close.
Как раз таки по наличию ds и может знать. удаляем ds из скрипта. уменьшаем счетчик ссылок. когда он равен 0 то происходит отписка. все для этого имеется. ну ладно об этом уже пару лет назад вам отписывали, не переубедить.

ну хоть на счет проверки подписки тиковых данных согласны? про ТТП и проверку заказа на параметр? или вы считаете раз у вас так контроль подписки работает то и данные функции не нужны. если я хочу удалить подписку то удаляю. если заказать то заказываю. без всяких проверок открыта она уже или нет тк. терминал не ведет контроль того кто эти подписки заказывал и используются ли они до сих пор.
правильно понимаю?
 
Цитата
Антон (band) написал:
Как раз таки по наличию ds и может знать. удаляем ds из скрипта. уменьшаем счетчик ссылок. когда он равен 0 то происходит отписка
Так и есть. Только счётчик уменьшается по ds:Close().
 
Цитата
Антон (band) написал:
Т.е. если я хочу проверить открытые подписки я должен пройтись по списку инструментов. создать для каждого ds = createdatasource(c_code, s_code, interval_tick)что не приведет к заказу данных(допустим он закрыт для этой бумаги в терминале)а дальше проверить открыта ли уже подписка в терминале я не могу. но могу закрыть подписку вызвав close, так? и терминал перестанет данные получать даже если подписка была открыта другими скриптами и они с этими данными работают?
Как уже говорилось, повторная подписка не означает повторный заказ данных. Если одна подписка уже активирована (не важно как) то вторая такая же не приведет к созданию еще одного потока.
Соответственно и отказ от подписки в одном скрипте приведет к отказу во всем терминале и во всех скриптах.

Цитата
Антон (band) написал:
ну хоть на счет проверки подписки тиковых данных согласны? про ТТП и проверку заказа на параметр? или вы считаете раз у вас так контроль подписки работает то и данные функции не нужны. если я хочу удалить подписку то удаляю. если заказать то заказываю. без всяких проверок открыта она уже или нет тк. терминал не ведет контроль того кто эти подписки заказывал и используются ли они до сих пор. правильно понимаю?
Не понятно с чем надо согласиться, Вы же сами говорите что проверка не нужна.
 
Цитата
Imersio Arrigo написал:
Так и есть. Только счётчик уменьшается по ds:Close().
похоже нет, раз
Цитата
Sergey Gorokhov написал:
Соответственно и отказ от подписки в одном скрипте приведет к отказу во всем терминале и во всех скриптах.
значит ds:close может нарушить работу других скриптов. и нет функции чтобы проверять закрыты ли подписки(после того как мы их открыли, другими скриптами)не плохо было бы проверять, а не закрыл ли другой скрипт мою подписку(или я его). но это реально ерунда тк такого в нормальных программах происходить не должно. (1 скрипт нарушает работу другого, закрывая получение данных)
Цитата
Sergey Gorokhov написал:
Не понятно с чем надо согласиться, Вы же сами говорите что проверка не нужна.
в том что я правильно понял как все работает. спасибо, сэкономили кучу времени, вопрос можно считать закрытым.
 
Цитата
Антон (band) написал:
значит ds:close может нарушить работу других скриптов. и нет функции чтобы проверять закрыты ли подписки(после того как мы их открыли, другими скриптами)не плохо было бы проверять, а не закрыл ли другой скрипт мою подписку(или я его). но это реально ерунда тк такого в нормальных программах происходить не должно. (1 скрипт нарушает работу другого, закрывая получение данных)
Я бы очень хотел увидеть комментарий разработчиков по этому утверждению.
Допустим моделируемая ситуация такая. Сам я вручную фьючем (например) Si не торгую, в настройках у меня получения каких-либо данных по нему нет. Загрружается Скрипт1, "подписывается" на Si, работает. Загружается Скрипт2, "подписывается" на Si, что-то делает, закрывает подписку, завершается. И что в результате, Скрипт1 окажется тоже с закрытой подпиской или нет??
 
Цитата
Антон (band) написал:
Цитата
Imersio Arrigo  написал:
Так и есть. Только счётчик уменьшается по ds:Close()
.похоже нет, раз

Цитата
Sergey Gorokhov  написал:Соответственно и отказ от подписки в одном скрипте приведет к отказу во всем терминале и во всех скриптах.

значит ds:close может нарушить работу других скриптов.
звучит как какая-то дичь.
не должно такого быть чтобы отказ в одном скрипте приводил к отказу по всему остальному терминалу.

имхо должно быть так: заказ/перезаказ в рамках одного скрипта не порождает больше потоков данных, если подписка на эту сущность уже есть, просто увеличивается счетчик. Соответственно отписка счётчик уменьшает, и если он равен нулю, то тогда и только тогда подписка физически прекращается.

предлагаю проверить это экспериментально. Например двумями скриптами.  
 
Цитата
Imersio Arrigo написал:
Цитата
Антон (band) написал:
Цитата
Imersio Arrigo  написал:
Так и есть. Только счётчик уменьшается по ds:Close()
.похоже нет, раз

Цитата
Sergey Gorokhov  написал:Соответственно и отказ от подписки в одном скрипте приведет к отказу во всем терминале и во всех скриптах.

значит ds:close может нарушить работу других скриптов.
звучит как какая-то дичь.
не должно такого быть чтобы отказ в одном скрипте приводил к отказу по всему остальному терминалу.

имхо должно быть так: заказ/перезаказ в рамках одного скрипта не порождает больше потоков данных, если подписка на эту сущность уже есть, просто увеличивается счетчик. Соответственно отписка счётчик уменьшает, и если он равен нулю, то тогда и только тогда подписка физически прекращается.

предлагаю проверить это экспериментально. Например двумями скриптами.  
Прошу прощения, произошла ошибка. На самом деле это не так и отказ от подписки в одном скрипте НЕ приведет к отказу от подписки в других.
Страницы: 1
Читают тему
Наверх