Cteatedatasource

Страницы: 1
RSS
Cteatedatasource
 
У меня ещё несколько вопросов по этой функции.

1. Что происходит, если в момент обращения к функции нет соединения с сервером?

2. Будут ли запрашиваться данные с сервера после установления связи в пункте 1?

3. Что происходит с подпиской после смены сессии?

4. Что происходит с подпиской после выключения и включения терминала с работающим скриптом?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
1. Что происходит, если в момент обращения к функции нет соединения с сервером?
CreateDataSource вернет то что есть в терминале. Если в терминале ничего не нет то ничего не вернет.

Цитата
s_mike@rambler.ru написал:
2. Будут ли запрашиваться данные с сервера после установления связи в пункте 1?
Просто так нет. Но если после установления связи повторно вызвать CreateDataSource, то да.

Цитата
s_mike@rambler.ru написал:
3. Что происходит с подпиской после смены сессии?
С подпиской ничего не происходит. Но данные перезакажутся.

Цитата
s_mike@rambler.ru написал:
4. Что происходит с подпиской после выключения и включения терминала с работающим скриптом?
С подпиской ничего не происходит. Но данные не перезакажутся, в случае если соединение с тем же сервером.
 
Сергей, спасибo за разъяснения.

Правильнo ли я пoнимаю, чтo для решения задачи, заключающейся в неoбхдимoсти oбеспечить пoлучение терминалoм таблицы oбезличенных сделoк,

небхoдимo oтслеживать onconneted/ondisconnected и пo первoму ВСЕГДА делать тикoвую пoдписку, а пo втoрoму ВСЕГДА делать oтписку?

(oncleanup для решения задачи не требуется)


Скрипт дoлжен рабoтать 24/7 и брабатывать ТOС
www.bot4sale.ru

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

плюс к сказанному, еще может быть ситуация когда терминал подключился до запуска шлюза.
 
Цитата
Sergey Gorokhov написал:

Если вызов функции CreateDataSource произойдет до получения описания инструмента, то заказа не произойдет т.к. будет считаться что такого инструмента нет.
В этoм случае createdatasrc вернет oшибку, вернo?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
Цитата
Sergey Gorokhov   написал:
s_mike@rambler.ru  ,
Строго говоря отписку делать не обязательно, но в остальном можно рекомендовать вызов CreateDataSource всегда после успешного подключения к серверу.
Но и тут есть нюанс.
Дело в том что на первичную прокачку данных, в частности на получение списка инструментов, может потребоваться некоторое время.
Если вызов функции CreateDataSource произойдет до получения описания инструмента, то заказа не произойдет т.к. будет считаться что такого инструмента нет.
Забегая вперед, достоверно узнать когда появится инструмент и появится ли он вообще - нельзя.
Можно добавить проверку, например на наличие инструмента в таблице securities, но и это не надежно, т.к. инструмент может пропасть (например случилась экспирация) или переехать в другой класс.
плюс к сказанному, еще может быть ситуация когда терминал подключился до запуска шлюза.
Значит, лoмoвoе решение сoстoит в тoм, чтoбы делать перезаказ пo каждoму  onconnected и пo каждoму   oncleanup.

Тoгда все нюансы ухoдят?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
В этoм случае createdatasrc вернет oшибку, вернo?
функция вернет nil

Цитата
s_mike@rambler.ru написал:
Значит, лoмoвoе решение сoстoит в тoм, чтoбы делать перезаказ пo каждoму  onconnected и пo каждoму   oncleanup.

Это не ломовое решение.
Если сработал onconnected, значит терминал подключился к серверу, а вдруг он подключился до запуска шлюза который нужен?
Если сработал oncleanup, значит сессия на сервере сменилась (или другой сервер) это не значит что нужный шлюз подключился, вдруг брокер его подключит с опозданием?

И потом, как уже говорилось, даже если на сервере всё уже есть, на загрузку данных после подключения к серверу (onconnected или oncleanup неважно) требуется время, даже с учетом того что таблица securities грузится первой, все равно оно требуется.
Срабатывание oncleanup и onconnected не означает что информация получена.
 
Сергей.

тогда скажите, как решить мою задачу?

нужно всего то однажды запуститься и потом всегда читать ТОС
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Михаил,
Предлагаю создать цикл while который будет вызывать CreateDataSource пока он возвращает nil, как только не nil выходим из цикла и работаем дальше.
цикл делать в main(), в котором через функцию isConnected или флаг в событии OnConnected ждать появления связи, после чего запускать процесс.
+ к этому добавить проверку на количество попыток, скажем если после 5 попыток запустить CreateDataSource все еще возвращается nil, то выдавать ошибку и завершать скрипт.
интервал ожидания между попытками на Ваше усмотрение, например sleep(1000)
 
Этот способ не покрывает все варианты.

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

давайте  ещё попробуем. Надёжный способ обязательно должен быть!)))))))
www.bot4sale.ru

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

мне не нужно останавливать скрипт никогда. Он получает много данных из разных классов.

Даже если сейчас один из необходимых инструментов недоступен, он может стать доступным позже. И никакой причины останавливать скрипт нет.

терминал вы ведь не останавливаетесь, верно

все-таки...  


я уже утомился получать ответы на свои вопросы про Квик в стиле "надёжно это сделать нельзя".
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Ну если Вы предложите способ передать в Lua информацию о том что брокер вдруг решил не запустить шлюз, или уронил чашку кофе на сервер, то можно подумать над надежным решением.
 
Сергей.

мне все равно, что делает брокер или кто-то ещё.

Я оперирую в том пространстве, которое описано в документации на терминал и qlua.

там нет ничего по бутерброды брокера и прочую чушь.

поэьому для меня этого не существуют. Со своими брокерами и их серверами разбирайтесь сами до тех пор, пока в документации не появятся инструменты воздействия с ними


Я извиняюсь, что приходится писать длинно, но Сергей... Сосредоточьтесь и прекратите писать чушь.

может, кто-то из сотрудников компании сможет придти на помощь Сергею? Ответы в стиле бутерброда демонстрируют отсутствие идей.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Михаил,
Надежного способа нет т.к. технически нет никакой возможности его реализовать.
Если Вы уверены в брокере, описанное решение можно назвать надежным.
 
Какое решение?

увидеть, что подключен пока только шлюз акций, а нужно получать фьючерс, которого на акциях нет, но который станет доступным позже и по этому поводу останавливать скрипт?

вы про это решение? Это не решение а ерунда какая-то..
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Решение не в том чтобы останавливать скрипт, а в том чтобы добавить цикл ожидания появления нужного инструмента.
Хотите не останавливать скрипт - пожалуйста, это Ваше право.
 
Цитата
s_mike@rambler.ru написал:
Какое решение?

увидеть, что подключен пока только шлюз акций, а нужно получать фьючерс, которого на акциях нет, но который станет доступным позже и по этому поводу останавливать скрипт?

вы про это решение? Это не решение а ерунда какая-то..
Представьте себе, что у Вас нет никакого скрипта, а Вы работаете вручную на Quik. Подойдя в очередной раз к компьютеру Вы с удивлением обнаруживаете, что подключены к серверу брокера, но все таблицы на экране - пустые. Что Вы будете делать? То же должен сделать и скрипт.
Причем описанная ситуация - не гипотетическая, а вполне реальная, по крайней мере из-за моего "шикарного" брокера: он может дать подключиться к серверу (при этом "случится" OnCleanUp), но трансляцию данных может не начать и через 5, и через 10 минут после этого. Такое, правда, случалось только в неторговое время.
И дело здесь не в неправильной работе клиентского терминала Quik, а в "такой" работе сервера брокера.
Мой скрипт 1 минуту ждет старта потока данных. А затем спрашивает у пользователя, что ему делать: прекратить работу с инструментом (т.к. его, возможно, на самом деле уже нет на бирже, и я просто забыл в настройках скрипта сменить его на более поздний), ждать старта трансляции еще "заданное" время, или сменить сервер. Пока скрипт ждет моей реакции, он продолжает каждые 10 секунд проверять начало трансляции.
 
По OnCleanUp и OnConnected, я не перезапускаю CreateDataSource. За неполный год работы скрипта еще ни разу проблем не возникало. Если скрипт уже был успешно подключен к трансляции через CreateDataSource, то после указанных событий трансляция (вызов пользовательского колбека) сама прекрасно рестартовала с первого индекса.
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
Решение не в том чтобы останавливать скрипт, а в том чтобы добавить цикл ожидания появления нужного инструмента.
Хотите не останавливать скрипт - пожалуйста, это Ваше право.
я вынес следующее предположение:

по колбекам oncleanup и  onconnected я отписываюсь от всех существующих подписок, жду появления таблицы securities и пробую подписаться на все что мне нужно. Если на какой-то инструмент я подписаться не смог, значиь его пока нет в наличии.

когда он появится, я снова получу один из колбеков.

так задача всегда решается или опять будут подводные камни?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
так задача всегда решается или опять будут подводные камни?
По сути, Вы описали тоже самое что было предложено.
 
Спасибо, Сергей
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
Страницы: 1
Читают тему
Наверх