Событие получения данных всех таблиц и графиков после подключения к серверу

Страницы: 1 2 След.
RSS
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Можно просто сделать так:
Код
      if ToNumber2(string.gsub(getInfoParam("CONNECTIONTIME"), '%:', '')) < 10 then -- если терминал на связи не более 10 сек.
         sleep(10000) -- пауза 10 сек. (ожидание заполнения таблиц)
      end -- выход из условия: если терминал на связи не более 10 сек.
Но данные могут загрузиться, как быстрее, так и позже.
Может у кого есть более подходящее решение?
 
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
 
Цитата
Артем написал:
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
Так во многих таблицах количество строк и будет нулевым, пока вы спите.
Откуда, например, взяться заявкам, сделкам, позициям по фьючерсам etc., если вы спите?

Цитата
Михаил Понамаренко написал:
Может у кого есть более подходящее решение?
Надо спросить автора функции getNumberOf. Уж он-то должен знать.
 
Цитата
Незнайка написал:
Цитата
Артем написал:
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
Так во многих таблицах количество строк и будет нулевым, пока вы спите.
Откуда, например, взяться заявкам, сделкам, позициям по фьючерсам etc., если вы спите?
Дык в main-треде спать? Он отдельно от главного треда, асинхронно выполняется. Пока в нём спишь, данные с сервера приходят и обрабатываются.
 
Цитата
Артем написал:
Пока в нём спишь, данные с сервера приходят
Так как же сделки будут, коль вы спите и не торгуете? Замкнутый круг получается.
ТС и спрашивает, когда уже можно просыпаться?
 
Незнайка,когда таблицы заполнятся, очевидно же. Да и как вы торговать собрались не имея никаких данных, в любом случае?
 
Сделок нет, потому что ждем, когда таблицы заполнятся. А таблица сделок не заполняется, потому что мы не торгуем, спим.
Нормально чё, курим бамбук, Артем сказал спать: "пока спишь, данные с сервера сами приходят".

Артем, подсказка: чтобы в таблице появилась сделка, надо ее совершить. По другому она ну никак не появится, хоть ты год жди.
 
Незнайка, тут подразумевается что пользователь имеет достаточно высокий урвень айсикью, чтобы не ждать заполнения таблиц которые однозначно будут пустыми.
 
Цитата
Артем написал:
не ждать заполнения таблиц которые однозначно будут пустыми
Как это в коде заранее запрограммировать?
Тут подразумевается, что пользователь пишет скрипт для автоматизированной торговли, не с тем, чтобы потом подсказывать ему: "тут ждать, тут не ждать".
 
Незнайка, есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём.
 
Артем, Огласите весь список, пжалста!(с) :wink:

Единственная таблица, из которой я получаю данные для торговли - это ТТТ, а она непустая даже если вообще не соединяться с сервером.
 
Цитата
Владимир написал:
Артем, Огласите весь список, пжалста!(с)  

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

Обычное неверное утверждение.
www.bot4sale.ru

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

вам следует набраться опыта, прежде чем делать безапелляционные утверждения.  
www.bot4sale.ru

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

1. Таблица текущих торгов пуста после установки терминала до первого подключения к брокеру

2. Ттт пуста, если в ней нет ни одного инструмента.

3. ТТТ пуста, если запрещены к получению все добавленные в нее колонки параметров. Зависит от набора полей.

4. Ттт пуста утром, если в наcтройках стоит флаг очистки при смене торговой даты. Зависит от набора полей.

5.ттт пуста после очистки данных до начала их перезакачки с сервера брокеоа

наверняка есть и другие моменты и их более чем достаточно.


P.S. Да, мне известно о вашем героическом прошлом, чудесном скрипте и стиве джобсе, который носил вам кофе.
www.bot4sale.ru

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

Да плевать мне на Ваши примеры! Идиотские домыслы с "если" засуньте себе в задницу! Вы тут порете чушь с вумным  видом, так я Вас по ней носом извожу.

Таблица текущих торгов НЕ пуста после того, как Вы утром включаете Квик, не позаботившись войти в Интернет. Она вполне себе полна, и у меня лично она содержит данные по нескольким сотням инструментов, и ей НАСРАТЬ на Ваши завывания про "первое подключение к брокеру" или про "если в ней нет ни одного инструмента", не говоря уже про "если запрещена к получению" какая-то там херня, "зависимости от набора полей", "флаги очистки" и прочие "другие моменты". Она полна сейчас, когда мой скрипт ведёт торги через двух брокеров, она будет полна вечером, ночью, утром, когда мой скрипт торги не ведёт. Она была полна дни, недели, месяцы назад, она будет полна через дни, недели, месяцы. Так что ещё раз повторяю для бестолковых:
Единственная таблица, из которой я получаю данные для торговли - это ТТТ, а она непустая даже если вообще не соединяться с сервером.

Шурупен зи? Читать слева направо. До посинения пока дойдёт.
 
Владимир, предлагаю Вам присоединиться к форуму mfd.ru или smart-lab.ru. Думаю там Вы найдете благодарную публику. На первом форуме очень любят "Гуру".
Здесь, все же, хотелось бы видеть комментарии по существу, без литературных вставок.


Вы написали СЕБЕ скрипт - и ладно. Поучать других малополезное занятие. Когда решите написать скрипт кому-то еще (вдруг случится такое чудо), то, вполне возможно, столкнетесь с тем, что очень у многих пользователей терминал настроен не так как у Вас, брокер другой и он работает не так как ваш. А Ваш скрипт не учитывает это.
 
Nikolay, Я как раз терпеть не могу "гуру" (которых на этом форуме как собак нерезаных), и всегда говорил, что не перевариваю общения ни "сверху вниз", ни "снизу вверх" - собеседник всегда РАВЕН мне.

Здесь я и дал "комментарий по существу, без литературных вставок", опровергающий бредовое высказывание одного из местных "гуру" о том, что "есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём".

Нет, я не "решу написать скрипт кому-то еще" - скрипт УЖЕ написан, и сейчас я пытаюсь отладить последнюю его утилиту: снятие заявок, которые не были исполнены в течение 3 минут. Пока что безуспешно: ни вчера вечером, когда  первый раз запустил последнюю версию скрипта, обложив еёё с головы до пят отладочной печатью, ни сегодня этого события пока что не случилось ни разу: скрипт так удачно выбирает цену покупки или продажи, что все до единой заявки сработали в течение нескольких секунд. И я УЖЕ дал его своему другу, причём я совершенно без понятия, как у него настроен терминал (как и у меня, кстати). Работает - и слава Богу! Теперь у нас три разные версии Квика, и на всех трёх мой скрипт прекрасно работает. Так что я пока не вижу никаких предпосылок, чтобы мой скрипт "учитывал это". Обнулится таблица - нет проблем, наименования тикеров покрасятся в синий цвет фона, белый текста, а с получением новых данных о сделках будут "перекрашиваться взад". Что здесь нужно "учитывать"? Скрипт сам прекрасно знает, что и как ему делать. :smile:  
 
Таблица Текущие торги загружается одна из первых, поэтому если она загрузилась, это не значит, что загрузилось всё остальное.
Практическим опытом узнал, что последним загружается график, который находится первым в списке выбора графиков.
Например, график SiM1 загрузится позже RIM1.
Хотелось бы узнать совет поддержки.
 
Михаил Понамаренко, Можно сделать так: первую минуту после запуска (ну или две, три, четыре) скрипт "прогревается" и ничего не делает. А за это время и юзер может осмотреться (мало ли - может, файл входных данных не считался или оказался бракованный или ещё что случилось), и все нужные таблицы гарантированно загрузятся.
 
Владимир, при клиент-серверном взаимодействии таймерное ожидание никаких гарантий не дает. Необходимо либо иметь метод в API дающий ответ, что все загружено, либо колбек по факту события загрузки.
 
Nikolay, А я давно говорил: не связывайтесь с сервером - это проблемы самого Квика! Работайте только с Квиком, тогда и код упростится до неприличия, и надёжность будет выше всяких похвал, и никаких API не потребуется.
 
Цитата
Михаил Понамаренко написал:
Но данные могут загрузиться, как быстрее, так и позже.
Может у кого есть более подходящее решение?

Я каждый раз предлагаю исходить из одной простой штуки. А как вы сами "на глаз" определяете, что данные загружены?
Вот ровно это и реализуйте в скрипте. Это будет самое надёжное. И вот почему.

QUIK (как система) построен именно для визуального отображения данных в терминале. И скрипты навешаны уже поверх этой парадигмы. Именно поэтому и надо все придумки в скриптах делать исходя из наблюдений "а как я сам принимаю решение глядя в терминал в таком-то случае?".
(потому, кстати, никого и не парил приезд одних и тех же сделок по 5 раз, пока это не вылезло в скриптах; этого просто никто не видит!)

С одной стороны, объективного понятия "загружены все данные" - просто нет. Ну в самом деле: на бирже изменилась цена - все равно терминалы получают это с задержкой. А т.к. в биржевых данных все время что-то меняется - то фактически терминал все время биржу как-то "догоняет". И задача построения торговой инфраструктуры лишь в том, чтобы данные в терминале догоняли биржу с как можно меньшим временным лагом.
Для этого брокер запускает сервер до торгов, с запасом. Для этого терминал есть смысл подключать к серверу брокера с запасом.

Как вы в терминале определяете, что "данные актуальны"? Ну вы же на глаз это как-то можете определить, ведь так?
Например, по прекратившемуся "мельтишению данных". Значит, терминал более-менее всё накопленное прокачал и сейчас получает on-line данные.
Вероятно, в скрипте есть смысл повторить эту логику: например, за какой-то через какой-то интервал времени сравнивать количество данных по каким-то сущностям: количество свечей на графике, количество изменений цены по какому-то инструменту, количество изменений стакана. Что еще у нас "мультишит" в терминале при подключении?
Ну и как только между очередными замерами количество изменившихся данных станет меньше какой-то экспериментально подобранной величины - принять решение "данные актуальны".

Либо подойти ко всему этому "инфрастуктурно". Например, экспериментально установить, что через 5 минут после подключения и/или через 5 минут после начала торговой сессии - данные в терминале на нашем компьютере и нашем интернете - точно актуальные, с запасом. И через 5 минут после переподключения в середине торговой сессии - тоже уже точно актуальные.
Ну и славно, значит, после этих событий ждём 5 минут - и после начинаем торговать. Вариант - вполне.

Или стоит задача попасть в движняк самого начала торговой сессии?
Тогда, на самом деле, надо применять "инфрастуктурный" метод, сокращая время прокачки данных и уменьшая тайм-аут: толще канал интернета, быстрее компьютер, бодрее брокер. И стартовать по времени.
Но: при таком решении надо отдавать себе отчет, что периодически по разным причинам будут происходить неудачные сделки  из-за неактуальности данных в терминале в момент принятия решений роботом. И от этого точно никуда не деться!! Потому как любые способы "контроля" будут оттягивать время начала работы робота, а мы хотим попасть именно в самое начало торгов, потому затягивание для нас неприемлемо. А проблемы иногда точно будут: у провайдера сбойнуло оборудование - просел интернет; у брокера захлебнулся сервер в дни особого движняка; ну и т.д.
 
Цитата
Nikolay написал:
Необходимо либо иметь метод в API дающий ответ, что все загружено, либо колбек по факту события загрузки.

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

Это всё. Ничего другого нам не дано.
 
Цитата
"Всё" никогда не бывает загружено.
Конечно. Но если говорить о пакетах данных - заказал пакет: получен, не получен.

Даже бесконечный поток реального времени, если разделить на дискретные пакеты, уже позволяет контролировать загрузки пакетов. Иначе один пакет сбойный - толку от такого потока, если это критически важный поток данных.
 
Nikolay,это уже реализовано - OnParam и т.п. При ответе сервера приходит колбек. Нет ответа - нет и колбека.
 
Цитата
Артем написал:
Nikolay,это уже реализовано - OnParam и т.п. При ответе сервера приходит колбек. Нет ответа - нет и колбека.
А я разве сказал, что нет. Вопрос получения данных и их актуальности на этом форуме уже много лет обсуждается. OnParam - это всего лишь какая-то реализация, предложенная разработчиками.
 
Цитата
Nikolay написал:
OnParam - это всего лишь какая-то реализация, предложенная разработчиками.

Что значит "реализация предложенная"?
В рамках обсуждаемого вопроса - изменился(лись) параметр(ы) на бирже - изменений приехали на сервер - приехали на терминал - вызов OnParam.
Какая еще реализация может быть?

Цитата
Nikolay написал:
Вопрос получения данных и их актуальности на этом форуме уже много лет обсуждается.

Потому как нет никакой "актуальности данных". Обсуждать просто нечего. Много лет это пытаюсь объяснить.
 
Цитата
Nikolay написал:
Даже бесконечный поток реального времени, если разделить на дискретные пакеты, уже позволяет контролировать загрузки пакетов

Ну и зашибись. Едут пакеты. Контролируется, что они целые. Не целые перезаказываются.
Но знаний об "актуальности" эти никак не добавляет.
 
swerg, даже у биржи есть понятие "законченности загрузки данных".
https://forum.quik.ru/messages/forum10/message51109/topic5698/#message51109
Надо делать так, как надо. А как не надо - делать не надо.
 
Первичные данные всегда актуальны на какой-то конкретный момент времени в  прошлом и очень редко актуальны в течение какого-либо длительного  периода.

Да, актуальность потока данных не контролируется. Но вот на момент заказа вполне (это ведь точная отметка по оси времени). Сколько данных - столько, давай их все и все что будет еще. По приходу данных на момент запроса  - сигнал (для каждого момента до точки заказа колбек мне не нужен),  а далее включай колбек для новых (после точки заказа). Т.е. пошли уже данные потоком. А вот  если мне сыпать колбеки на каждый момент в прошлом (до точки заказа), то, конечно, смысла  нет. Если только не будет отдельного сигнала о достижении данных на момент заказа.

Также вполне может быть сценарий получения данных просто до момента заказа. Скажем - дай, что есть сейчас, на момент прихода заказа. Будущее не интересно. Чем не актуальные данные. Захочу новые - закажу еще.
 
Цитата
Старатель написал:
swerg, даже у биржи есть понятие "законченности загрузки данных".
https://forum.quik.ru/messages/forum10/message51109/topic5698/#message51109

Ну есть собатия прогрузки позиций после начал торгов / клирингов. И что они вам дают? Как это связано с торговыми данными?
 
Цитата
swerg написал:
Ну есть собатия прогрузки позиций после начал торгов / клирингов. И что они вам дают?
Именно об этом и спрашивает ТС.
Цитата
Nikolay написал:
Первичные данные всегда актуальны на какой-то конкретный момент времени
Надо разделить 1) обезличенные данные и 2) данные, относящиеся непосредственно к портфелю: ордера, сделки, лимиты, позиции, стопы.
Последние как раз будут статичны статичны и актуальны в начальный момент. Это и есть точка отсчёта, от которой будет отталкиваться скрипт.
А тут про какую-то ТТТ начинают петь.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, Ну, я "тут про какую-то ТТТ начинаю петь".  :smile: Это и есть точка отсчёта, от которой будет отталкиваться скрипт.(с) У кого-то там торги идут на бирже, а у меня торги идут прямо в Квике, и данные ТТТ я считаю априори актуальными и достоверными. Чего и другим советую вот уже который месяц. Как тут уже говорили, человек, торгующий в Квике вручную (через стаканы) именно так и поступает. Так с какой радости скрипт должен вести себя иначе?

Про "статичные данные" и "начальный момент" не понял. По идее, все данные должны быть динамичны, в любой момент.  :smile:  
 
Цитата
Старатель написал:
Цитата
swerg написал:
Ну есть собатия прогрузки позиций после начал торгов / клирингов. И что они вам дают?
Именно об этом и спрашивает ТС.

"Но как вы догадались, Холмс?!"

Цитата
Старатель написал:
Надо разделить 1) обезличенные данные и 2) данные, относящиеся непосредственно к портфелю: ордера, сделки, лимиты, позиции, стопы.
Последние как раз будут статичны статичны и актуальны в начальный момент. Это и есть точка отсчёта, от которой будет отталкиваться скрипт.

Почему позиции будут точкой отсчета??
Торговый скрипт, очевидно, обязательно опирается на данные графиков и торговые данные для принятия решений. Позиции учитывает наверняка, но опираться только на них??
 
Цитата
swerg написал:
объективного понятия "загружены все данные" - просто нет. Ну в самом деле: на бирже изменилась цена
Не надо передёргивать. Я вам уже писал. Очевидно же, что когда говорят об "актуальности данных", речь про данные, которыми располагает сервер QUIK. Или для вас это не очевидно?
Про ТТТ я писал в отдельной теме: важно понимать свежие ли значения мы имеем или это мусор, оставшийся со "вчерашнего вечера".
Графики хранятся на сервере брокера, и при запросе клиентом архива графика, вместе с последней свечой, сервер должен отправить клиенту флаг "это всё, что есть сейчас".
Для таблиц то же самое - нужен флаг об окончании загрузки.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, Мне вот никогда ничего не очевидно - я давно знаю, что даже самые очевидные вещи нужно проговаривать явно. В данном же случае, мне это СОВСЕМ не очевидно:

1. Меня не интересуют "данные, которыми располагает сервер QUIK" - мой скрипт работает только с теми данными, которыми располагает он сам.

2. Моему скрипту пофиг, "свежие ли значения мы имеем или это мусор, оставшийся со вчерашнего вечера". Ему также пофиг, закрылась сессия или нет. Какими бы ни были данные в ТТТ (а меня там интересует только цена последней сделки), они не меняются при отсутствии торгов и потому не вызывают никаких действий. Начали меняться - торговля пошла. Причём не просто пошла, а именно по этому тикеру. Вон, сейчас у меня включён скрипт для торговли на СПБ, так там до 10 утра торгуется лишь жалкая кучка тикеров. В 10 часов подключится партия рублёвых акций, а в 6 вечера подойдут буржуины. Скрипт же я вот включил где-то в 7-8 утра, так он и работает, и НА ДАННЫЙ МОМЕНТ подавляющее большинство данных в ТТТ именно вчерашние. Ну и что?

3. Графики скрипту вообще нафиг не нужны, а свечи он считает сам. Я раньше сохранял их по выходу и читал при запуске, но быстро завязал с этим делом: сейчас у меня максимум часовые свечи, и они считаются при каждом запуске заново. В любом случае, мне плевать, что там "хранится на сервере брокера".

4. На кой мне флаг "это всё, что есть сейчас"? Ведь через секунду это будет уже далеко не "всё". А в таблицах на кой мне флаг об окончании загрузки? Я вот начал на днях залезать в таблицу 'orders' - очень редко, для того, чтобы снимать заявки, которые долго висят и по которым не было ни одного OnTrade - так мне тоже до лампады на все эти флаги - либо я нашёл свой тике в таблице, либо нет. Тем более, что она ведь тоже меняется!
 
Сегодня удалось наблюдать, как загружаются таблицы в начале сессии.
Таблица заявок из чуть более полутора тысячи строк загружалась 3 минуты.

Потом пытался повторить обновлением данных, но фокус не прошёл.
Таблица загрузилась за пару секунд.

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

А вот это очень здравое рассуждение.  :!:
 
Именно поэтому решения
Цитата
Артем написал:
есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём.
или
Цитата
swerg написал:
экспериментально установить, что через 5 минут после подключения и/или через 5 минут после начала торговой сессии - данные в терминале на нашем компьютере и нашем интернете - точно актуальные
ненадёжные.
Есть множество факторов, от которых зависит продолжительность загрузки данных, о многих мы и не подозреваем даже.
Ну получили вы 100500 строк в таблице спустя 5 мин. И что? Это все или еще не все?
 
Цитата
Nikolay написал:
Да, актуальность потока данных не контролируется. Но вот на момент заказа вполне (это ведь точная отметка по оси времени).
Супер.
Я подключился к серверу в 10:00. "Заказал данные". Сервер лил мне их 1 минуту (да, я оптимист). В 10:01 до меня доедет маркер "на момент заказа данные загружены".
Т.е. я имею данные на момент 10:00, и начинаю на их основании отправлять заявки. Хотя сейчас 10:01 и рынок уже совсем другой.

Я ведь всё описал по вашему алгоритму? ничего не упустил?
 
Цитата
Старатель написал:
Очевидно же, что когда говорят об "актуальности данных", речь про данные, которыми располагает сервер QUIK. Или для вас это не очевидно?

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

Нет передёргивания.
Сервер данными может и располагает, но до клиента они будут ехать еще какое-то время.
И? какие ваши предложения?
Пример см. в предыдущем сообщении.

Цитата
Старатель написал:
Про ТТТ я писал в отдельной теме: важно понимать свежие ли значения мы имеем или это мусор, оставшийся со "вчерашнего вечера".

Для ТТТ достаточно поставить настройку "Очищать в новый день" или "в новую сессию", что-то такое, забыл название. Тогда недоехавшие данные будут или отсутствовать или равны 0.
 
Цитата
Я ведь всё описал по вашему алгоритму? ничего не упустил?
Почти. Этот маркер будет всего лишь триггером на запуск, инициализацию алгоритма. До него считаем, что данные некорректные и смысла на запуск нет вовсе.

При этом остаток данных будет получен уже по факту.

А вот если нет никаких ориентиров, то по той же логике запускаем скрипт, ориентируясь на данные в кеше. Запускаем и... На основании чего будем заявки отправлять: на вчера 23:00, позавчера, сегодня час назад.

Собственно сейчас и приходится формировать алгоритм ожидания для получения потока CreateDataSource, ожидая когда время последнего бара с учетом периода будет больше времени последней сделки. Иначе данные не доехали.

При этом потоки данных, имеющие время в своем составе хоть как-то позволяют организовать оценочное ожидание и проверку (скажем заказ обезличенных сделок так долго поступает, что без ожидания можно подумать, что и потока нет), а вот данные не имеющие его уже никак. А то ведь бывает уже торговая сессия идет, а открытые позиции терминал еще не получил https://forum.quik.ru/messages/forum10/message49888/topic5698/#message49888 И думай - может сделки прошли и позиция закрылась. Но сделок нет. А может они тоже еще не загрузились.
 
Оценим... :smile:

Утро, 7:00. Началась торговля на Санкт-Петербургской бирже. Торгуем только на доллары и только парой десятков акций. У неторгующихся бумаг цены вчерашние.

10:00. Подключилась Мосбиржа, торгуем на рубли причём данные незадолго до открытия обнуляются, и реальные цены поступают только после совершённых сделок - иногда это секунды, иногда минуты, иногда даже десятки минут. На СПб началась торговля на доллары (для большинства акций это начало торгов) и на евро. Цены не обнулялись - оставались вчерашними.

17:30. Резкий всплеск активности на СПб - подключились буржуины. Строго говоря, только теперь и началась настоящая торговля.

18:45. Мосбиржа закрывает сессию. Перекур!

19:05. Началась вечерняя сессия Мосбиржи. От торгуемых акций остался небольшой огрызок.

20:00. Торговля на евро (СПб) закончена.

23:50. Торговля на рубли (Мосбиржа) закончена.

01:45 Торговля на доллары (СПб) закончена.

Это не считая того, что биржи не работают по выходным и праздникам, причём праздники у нас и у буржуинов разные, не считая всяких аукционов закрытия и открытия и того, что я говорю только о фондовом рынке. И вы всерьёз хотите учесть всё это какими-то флагами об окончании каких-то загрузок? Оптимисты... :smile:  
 
Поймал сегодня утром терминал на долгой загрузкой заявок.
Соедиение прошло в 5:58:23, а все, 1494 заявки подгрузились более, чем через 4 минуты.
При этом, некоторые таблицы,например, Клиентский портфель, были пусты.
Это наводит на мысль: «если Клиентский портфель доступен, таблица заявок загрузилась полностью.



 
 
Михаил Понамаренко, Ох, ни!.. :shock:

Я не понял: 4 минуты загружались ВАШИ заявки?! Вот прям 1494 штуки?!
 
Господа! Примите как данность, что данные В ЛЮБОЙ МОМЕНТ могут быть неполными, недостоверными или просто ошибочными (как и при работе с любой базой данных). А потому алгоритм должен учитывать эту возможность, а не ловить "правильную" точку отсчёта. Ну что толку ловить окончание загрузки, если здесь и сейчас, МНОГО ПОЗЖЕ её окончания, акции COTY или MOMO - торгуются, а ZYXI или MGY - нет. И раньше 10:00 нипочём не сменят свои вчерашние данные на сегодняшние. То есть торговля как бы идёт, но в то же время как бы не идёт: одни акции (на той же бирже, того же класса, в тот же момент) торгуются, а другие нет. НУ ЗАЧЕМ ВАМ это дурацкое "окончание загрузки"? И какая вам разница, идёт торговля или нет, если стакан полон, объёмы приличные, а сделок не происходит - участники затаились и ждут? НУ КАКАЯ ВАМ РАЗНИЦА?

Ну, хорошо: представим, что мы выключили комп в 3 чаа ночи (когда любая торговля гарантированно завершилась), а включили в 5 утра (когда никакая торговля ещё не начиналась). Или вообще не выключали. Какие вам "заполнения таблиц" понадобились? Вам нужно знать, идёт ли торговля по тому тикеру, по которому вы в данный момент хотите совершить сделку - больше вас НИЧЕГО не интересует! По крайней мере, я не могу вообразить, что ещё вас может интересовать. Ну так какие проблемы?

У меня первую минуту после запуска скрипт "прогревается" и ничего не делает. Это сделано именно с целью осмотреться и не принять поспешных решений по недостоверным данным. За это время скрипт начинает считать лёгонькие 15-секундные свечи. Сам считает, сам, по своему таймеру и по данным ТТТ (ориентируясь на цену последней сделки). По тем тикерам, по которым торги не идут (по любой причине) свечи будут похожи, как однояйцевые близнецы, динамика их изменения равна нулю. И ВСЁ, блин! Либо торги ПО ДАННОМУ ТИКЕРУ не начались, либо остановлены, либо ПРИостановлены - какая нам разница? Торги не идут, сделок делать нельзя! Ну, а если и сделали ненароком, то через некоторое время (у меня это три минуты, чтобы и возможный "дребезг" при случае сработал, и все возможные прерывания пришли своими полными колодами) заявка снимается. Это решение ТОЖЕ принимается по собственному таймеру,  который тикает у нас на компе. Ну и, наконец, все данные, относящиеся непосредственно к портфелю, обрабатываются тоже самим скриптом и хранятся на своём же компе - ничего "загружать" не требуется. Ну сказка же, господа! Ну говорилось уже тыщу раз даже в этой ветке: хоть сто лет думайте - ничего лучшего не найдёте!  :wink:  
 
Цитата
Владимир написал:
Сам считает, сам, по своему таймеру и по данным ТТТ (ориентируясь на цену последней сделки). По тем тикерам, по которым торги не идут (по любой причине) свечи будут похожи
Да, вариант интересный... и наверно, надёжный... "хочешь что-то сделать хорошо -- сделай это сам"...
 
Написал скрипт и изучил порядок получения данных таблиц.
Сначала получаем три таблицы в разном порядке: заявки, стоп-заявки, сделки.
Затем получаем в разном порядке: Текущие торги, Позиции по деньгам, Клиентский портфель и т.д.
В конце получаем данные графика.
Возможно порядок на других терминалах, версиях, брокерах будет отличаться.
Код
-- //////////////////////////
-- //  Определение порядка загрузки таблиц после подключения QUIK к серверу
-- //////////////////////////

function main() -- Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток.
   is_run = true -- включение бесконечного цикла
   local is_stop_orders, is_orders, is_trades, is_money_limits, is_depo_limits, is_futures_client_limits, futures_client_holding, is_assets, is_last, is_chart
   while is_run do -- повторяющийся цикл, пока is_run = true
      if isConnected() == 1 then -- если есть подключение к серверу
         if is_stop_orders == nil and getNumberOf("stop_orders") > 0 then
            message("Таблица стоп-заявок="..tostring(os.clock()),1) -- системное сообщение
            is_stop_orders = true
         end
         if is_orders == nil and getNumberOf("orders") > 0 then
            message("Таблица заявок="..tostring(os.clock()),1) -- системное сообщение
            is_orders = true
         end
         if is_trades == nil and getNumberOf("trades") > 0 then
            message("Таблица сделок="..tostring(os.clock()),1) -- системное сообщение
            is_trades = true
         end
         if is_money_limits == nil and getNumberOf("money_limits") > 0 then
            message("Позиции по деньгам="..tostring(os.clock()),1) -- системное сообщение
            is_money_limits = true
         end
         if is_depo_limits == nil and getNumberOf("depo_limits") > 0 then
            message("Позиции по инструментам="..tostring(os.clock()),1) -- системное сообщение
            is_depo_limits = true
         end
         if is_futures_client_limits == nil and getNumberOf("futures_client_limits") > 0 then
            message("Ограничения по клиентским счетам="..tostring(os.clock()),1) -- системное сообщение
            is_futures_client_limits = true
         end
         if is_futures_client_holding == nil and getNumberOf("futures_client_holding") > 0 then
            message("Позиции по клиентским счетам="..tostring(os.clock()),1) -- системное сообщение
            is_futures_client_holding = true
         end
         if is_assets == nil and getPortfolioInfoEx("MC0139600000", "35158", 2).assets ~= nil then -- требуется ввод параметров!
            message("Клиентский портфель="..tostring(os.clock()),1) -- системное сообщение
            is_assets = true
         end
         if is_last == nil and getParamEx2("TQBR", "SBER", "last").result == "1" then -- требуется ввод параметров!
            message("Текущие торги="..tostring(os.clock()),1) -- системное сообщение
            is_last = true
         end
         local chart = getCandlesByIndex("chart", 0, getNumCandles("chart") - 1, 1)[0].close
         local chart = getCandlesByIndex("chart", 0, getNumCandles("chart") - 1, 1)
         if chart ~= nil then
            chart = chart[0]
            if chart ~= nil then
               chart = chart.close
            end
         end
         if is_chart == nil and chart ~= nil then
            message("График="..tostring(os.clock()),1) -- системное сообщение
            is_chart = true
         end
      end
      sleep(1) -- приостановка выполнения скрипта в мс.
   end
end
Страницы: 1 2 След.
Читают тему
Наверх