Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Зависает при получении исторических данных #320

Open
zalex7777 opened this issue Jan 28, 2022 · 9 comments

Comments

@zalex7777
Copy link

QUIK Junior.
При выборе Class = "QJSIM" и Sec = "ACKO", все этапы проходит нормально, подписка тоже проходит без ошибок, но при получении исторических данных зависает напрочь, помогает остановка и запуск заново скрипта LUA в QUIK.

Зависание также происходит и при подключении к реальному QUIK.
Пример - Class = "TQBR", Sec = "BELU".

@zalex7777
Copy link
Author

Нашел, в чем проблема:
в функции
function qsfunctions.get_candles_from_data_source(msg)
строку
repeat sleep(1) until ds:Size() > 0
заменил на
repeat
sleep(1)
i = i + 1
until (ds:Size() > 0) or (i >= 100)
Теперь не зависает, только проблема осталась - считывается 0 свечей на ошибочных инструментах

@Pr0phet1c
Copy link
Collaborator

Не понял, а Вы какой-то другой результат ожидаете получить для "ошибочных" инструментов?

@zalex7777
Copy link
Author

Если QUIK дает этот инструмент для использования и происходит безошибочные соединение и подписка, то они не являются ошибочными, должна быть "защиты от дурака". Ошибочным я его назвал, потому, что на нем программа вешается. Этот инструмент открывается нормально, если его открыть в окне.

@Pr0phet1c
Copy link
Collaborator

Pr0phet1c commented Jan 31, 2022

Давайте так:

  1. Тут Вам никто ничего не должен. Проект не для дураков создан, а для разработчиков собственных роботизированных систем торговли. И если разработчик считает необходимым встроить "защиту от дурака" в свое ПО, то это должен делать именно ОН, а не кто-то другой.
  2. Задача библиотеки повторить функционал QLua. Именно это она и делает.
  3. В рамках рассматриваемого Вами функционала, библиотека вызывает стандартную функцию QLua, описанную в справке по QUIK. (CreateDataSource, если я правильно помню). При этом, известно, что часто данные (особенно, если их много) могут заполнять получаемую таблицу данных не моментально, а с задержкой, и если сразу после запроса данных попробовать их прочитать, то этих данных может еще не быть. (именно для этого попытки их получения были зациклены).
  4. Если Вы считаете, что именно библиотека работает некорректно: продемонстрируете это, на примере параллельного получения одних и тех же данных из одного того же терминала, с помощью библиотеки, и с помощью встроенного в QUIK языка QLua.
  5. Если Вас не устраивает работа функции "CreateDataSource", то Вам необходимо обращаться к разработчикам QUIK, а не сюда.
  6. Попробуйте задаться вопросом: Если некоторое множество людей уже несколько лет успешно использует данную библиотеку в своих проектах, точно ли Вы все правильно сделали со своей стороны?

З.Ы.: У меня есть системы, которые работают одновременно с несколькими десятками бумаг, и по каждой из них получают исторические данные сразу по нескольким ТФ. Мне приходится ждать по несколько минут, пока все данные по всем инструментам будут полностью загружены.

@zalex7777
Copy link
Author

zalex7777 commented Jan 31, 2022

Спасибо за комментарии.
Я не жду, что кто-то что-то должен, сам определил проблему, хорошо, что это открытый проект, можно самому исправить то, что не устраивает.
Сама идея отличная повторения функционала QUIK из C#, на этом принципе возможны расширение/трансформация через добавление новых команд.
Библиотека работает, скорее всего, корректно, но я не получаю данные в течение нескольких минут, даже десятков. Не знаю, с чем это связано, но "зависает" на одних и тех же бумагах. Запустил на ночь, может, считаются данные.
С разработчиками QUIK есть печальный опыт общения, к сожалению, предложения и вопросы не решаются годами :((
Возможно и я что-то делаю неправильно, но, в результате я применил функцию CallCommand из примера QuikSharpDemo. Ситуация та же.
Возможно, мое предложенное решение кому-то поможет.
Буду благодарен, если ответите на вопрос, т.к. Вы работаете с десятками бумаг - QUIK выдает ошибку "Превышено ограничение на количество котировочных окон. Одновременно может быть открыто не более 200 окон". При этом окна не открываются, только скачиваются котировки. Возможно, окна открываются при подписке, но я отписываюсь от каждой бумаги перед открытием следующей. Использую данные библиотеки.

@Pr0phet1c
Copy link
Collaborator

Несколько десятков, это все же не две сотни. Кроме того, не очень понятно:
а) что в данном случае подразумевается под "котировками"?
б) какие именно действия выполняются при "отписке" от бумаги?
Кроме того, хотелось бы увидеть конкретный пример ситуации (из БОЕВОГО терминала), где при правильно заданных параметрах, Вы не можете получить исторические данные стандартными механизмами библиотеки (включая демо-приложение)

@Pr0phet1c
Copy link
Collaborator

Ну, и чтобы далеко не ходить, взял для примера бумагу из Вашего первого поста (Белуга-Групп), и воспользовался демо-приложением. Вот результат:
image
Ну вот как-то совсем ничего не зависло...

@ildarskii
Copy link

Если по инструменту не было сделок, то запрос истории свечек по нему приводит к зависанию всего приложения. Заранее не нашел способ узнать, была ли хотя бы одна сделка по инструменту в истории.
Согласен с выдвинутым предложением, что целесообразно было бы поставить таймлимит (напр., 15 сек) на ожидание результата.

Вот примеры, где происходит такое зависание Q#, а Квик выдает пустой график.
То есть функциональность не идентичная.
TQOB SU25085RMFS0 ОФЗ 25085
TQOD RU000A0JVNL1 ВЭБUSD1P-1 ВЭБ-лизинг USD-001P-01
TQCB RU000A0JT593 ВолгСпорт2 Волга-Спорт АО обл. 02
TQCB RU000A0JTZF1 ДОМ.РФ26об ДОМ.РФ (АО) обл. сер.А26

Спасибо за предложенный вариант обойти эту проблему, локально у себя поправил так:

заменил на repeat sleep(1) i = i + 1 until (ds:Size() > 0) or (i >= 100)

@Pr0phet1c
Copy link
Collaborator

@ildarskii , могу ошибаться, но мне кажется, Вы пошли не тем путем. Прежде чем запрашивать историю свечек по инструменту, следует убедиться, что Квик вообще готов выдавать какую-либо информацию по интересующей бумаге.
Если Вы попробуете воспользоваться демо-приложением, и там попцутаетесь выполнить первоначальные шаги по запуску приложения с получением первичных данных по инструментам, из приведенного Вами списка, то обнаружите, что приложение даже процедуру инициализации инструментов не может выполнить. При этом оно вовсе не зависает.
Я бы предложил Вам сначала проводить попытки получения базовых параметров инструмента, а лишь в случае успеха пытаться вызывать более сложные функции.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants