Tradedate

Страницы: 1 2 След.
RSS
Tradedate
 
Здравствуйте.

Вопрос по tradedate. В какой момент происходит ее изменение?

Мой тест содержит колбек oncleanup и выводит в ог значение tradedate


Запущен вчера утром (воскресенье) к демо-серверу в районе 9-00 утра. При запуске тест вывел текущую tradedate

Рабочее место QUIK 7.11.1.5
24-Сен-2017  Воскресенье RTZ 2 (зима) +0300
08:58:11.890 Подключено к Информационно-торговая система ARQA (91.209.122.220:15100)
08:58:11.890 tradedate=24.09.2017

и оставлен работать. Работал больше суток.

Сегодня 25--Сен-2017, полдень

За это время колбек oncleanup пришел однажды - сегодня в 10 утра


10:00:25.764 on cleanup
10:00:25.796 tradedate=24.09.2017


И мы снова видим ту же самую вчерашнюю дату, что у меня вызывает недоумение и вопрос: "как так?"


-----------------------------------------------------

Может, есть другой, более правильный способ определить дату текущих торгов?



Спасибо.
 
Цитата
s_mike@rambler.ru написал:
Вопрос по tradedate. В какой момент происходит ее изменение?
tradedate меняется после смены сессии на сервере. Это не тоже самое что смена астрономической даты.
Смена сессии как правило происходит утром следующего дня, после рестарта сервера.
Иногда делается два рестарта сервера, при этом сессия меняется только после второго рестарта.
А иногда, сервер утром подымают на старых данных и сессия меняется только после подключения первого шлюза.
Все зависит от нужд брокера.

На нашем демо контуре, смена сессии происходит ежедневно после первого рестарта утром, примерно в 3 часа по МСК.
Судя по логам, 25го числа демо контур корректно поменял сессию примерно в 3 утра по МСК и никаких проблем с этим не было.
В связи с чем объяснить почему Вы видели 24е число к сожалению не можем.
Проверили сегодня, проблема не повторяется.
В связи с чем можем предположить что это какая-то локальная проблема.
 
Приход колбека oncleanup в 10 часов утра понедельника ставит под сомнение написанное вами, Сергей.
 
s_mike@rambler.ru,
Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет.
Если есть проблема, значит с ней нужно разбираться, а не надеяться что ответ будет найден сходу.
Как уже было сказано и еще раз повторим, у нас описанная ситуация не повторяется. А у Вас?
И хотелось бы взглянуть на полную версию кода.
 
s_mike@rambler.ru,
И дополнительно к сказанному, из Вашего поста не понятно о каком часовом поясе идет речь.
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
И дополнительно к сказанному, из Вашего поста не понятно о каком часовом поясе идет речь.
Цитата
s_mike@rambler.ru написал:
24-Сен-2017  Воскресенье RTZ 2 (зима) +0300

а нет, прошу прощения, понятно.
 
Приходится экспериментировать, так как нет внятной документации.

Приход колбека в 10 -00 был обусловлен настройками автоподключения. Время автоподключения было установлено с 10-00 до 23-00.

В момент подключения приходит колбек, в котором производится запрос getInfoParam("TRADEDATE")

Результат исполнения - либо пустой либо строка времени. Исходя из ваших разъяснений время может придти как вчерашнее так и сегодняшнее взависимости от температуры бабушки системного администратора сервера квик.

Кашамала какая-то..

Сергей.

Сможете привести однозначный алгоритм определения торговой даты, которая работает всегда и надежно, без расползающихся условностей?
 
Точнее задача стоит так:

1. Определить торговую дату в момент старта скрипта
2. Получить сигнал об изменении торговой даты и вернуть новую дату

При этом правильно обработать все отключения и подключения к серверу.
 
s_mike@rambler.ru,

Похоже что Вы запрашиваете данные через getInfoParam в момент когда в терминал эти данные еще не пришли.
Колбеки срабатывают непосредственно перед тем как данные появятся в терминале.
Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp
Можем предложить зарегистрировать пожелание на добавление в OnCleanUp параметра, в котором будет возвращаться дата торгов.
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,

Похоже что Вы запрашиваете данные через getInfoParam в момент когда в терминал эти данные еще не пришли.
Колбеки срабатывают непосредственно перед тем как данные появятся в терминале.
Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp
Можем предложить зарегистрировать пожелание на добавление в OnCleanUp параметра, в котором будет возвращаться дата торгов.
Был бы толк от этих регистраций....

Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
 
Цитата
s_mike@rambler.ru написал:
Был бы толк от этих регистраций....
Толк есть.

Цитата
s_mike@rambler.ru написал:
Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
да
 
Цитата
Sergey Gorokhov написал:
Цитата
s_mike@rambler.ru   написал:
Был бы толк от этих регистраций....
Толк есть.
Цитата
s_mike@rambler.ru   написал:
Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
да
От моего имени зарегистрировано за 10 лет пара десятков пожеланий.Не было случая чтобы реализовали. Уж не знаю какой у вас толк, а для меня никакого.


"Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp "

Отлично. И насколько позже? И как узнать, что данные уже обновились, если придти может снова вчерашняя дата?
 
Цитата
s_mike@rambler.ru написал:
От моего имени зарегистрировано за 10 лет пара десятков пожеланий.Не было случая чтобы реализовали. Уж не знаю какой у вас толк, а для меня никакого.

Простите, но именно лично от Вас было зарегистрировано пожелание на добавление функций SetValue, GetValue, SetRangeValue
Конкретно пост на старом форуме 19/03/2014 18:54
реализовано в версии 6.15 от 03.10.2014.
Да делаем не все и не сразу, но это не значит что "толку нет".

Цитата
s_mike@rambler.ru написал:
Отлично. И насколько позже? И как узнать, что данные уже обновились, если придти может снова вчерашняя дата?

Добавить флаг в OnCleanUp и следить за ним в main?
 
Про Setvalue я действительно когда-то писал, было. Помнится, что писало об этом уйма народу кроме меня - слишком очевидная дырка была.  Ну что же, теперь можно констатировать, что толк есть. Целый один толк. )))




"Добавить флаг в OnCleanUp и следить за ним в main?"

Следить за чем? Куда смотреть, что ждать?
 
Цитата
s_mike@rambler.ru написал:
Следить за чем? Куда смотреть, что ждать?
Добавить флаг в OnCleanUp
В цикле который в main проверять значение флага.
как только флаг поменялся, дернуть getInfoParam
 
Цитата
Sergey Gorokhov написал:
Цитата
s_mike@rambler.ru   написал:
Следить за чем? Куда смотреть, что ждать?
Добавить флаг в OnCleanUp
В цикле который в main проверять значение флага.
как только флаг поменялся, дернуть getInfoParam
и возможны 3 варианта

1. Пустая дата
2. Вчерашняя дата (изменения не пришли ещё или пришли, но сервер поднят вчерашним числом)
3. Новая дата.

первый вариант - курим и ждем
второй - непонятно что дальше делать
третий -нам свезло
 
Цитата
s_mike@rambler.ru написал:
второй - непонятно что дальше делать
не вижу проблемы в том чтобы определить что дата вчерашняя.

кроме того, можно еще заточиться на параметр SESSIONID
 
Узнать -то не проблема..

правильно ли это утверждение:

1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?


Sessioniddd.

что это за зверь и каковы его своейства?

я подразумеваю, что документация этого мне не расскпжет,. Если ошибаюсь - прошу прощения
 
Непустую
 
Актуальная торговая дата в моем понимании  -это совпадающая с тем что на графиках, таблицах и прочие.
 
Цитата
s_mike@rambler.ru написал:
1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
нет, Вы же сами про это целый пост создали.

Цитата
s_mike@rambler.ru написал:
что это за зверь и каковы его своейства?

Это некий уникальные набор букв и цифр, которые однозначно определяют торговую сессию на сервере.
Если этот набор поменялся, значит на сервере поменялась сессия, ну либо это какой-то другой сервер.
По этому и было сказано что лучше его использовать совместно с TRADEDATE.

Цитата
s_mike@rambler.ru написал:
Актуальная торговая дата в моем понимании  -это совпадающая с тем что на графиках, таблицах и прочие.

Тогда Вам лучше забыть про TRADEDATE, т.к. после перехода на полночь она не меняется.
 
Цитата
Sergey Gorokhov написал:
Цитата
s_mike@rambler.ru написал:
1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
нет, Вы же сами про это целый пост создали.
Прошу прощения, вопрос был не так понят.
Если OnCleanUp сработал именно из-за смены сессии, то да, после колбека Вы получите актуальную дату торговой сессии.
Однако, OnCleanUp может сработать не только из-за смены сессии на сервере.
 
Уффф.

как же это все же тяжело.... Вроде и вопросы стараюсь делать понятно и так, чтобы из нельзя было прочесть неправильно.

сергей.

как в вашем чертовом терминале получить сигнал о смене торговой даты?

мне не нужно других сигналов, на которые срабатывает oncleanup и всего остального. Мне нужно только получить торговую дату при старте скрипта (дату, а не nil, не бум, и не бац) и получить сигнал об изменении ее со значением новой торговой даты.

если где-то можно прочитать про эти ваши нагромождения неописаннвх сущностей -скпжиье где. Если нет - не могли бы вы просто  привести луа код, который будет правильно ВСЕГДА работать?
 
s_mike@rambler.ru,
Для начала, Вам нужно определиться, для чего именно Вам нужна дата.
Если для получения данных из таблиц, графиков и прочие, то как уже было сказано TRADEDATE в данном случае не подойдет.
Так как TRADEDATE это дата торговой сессии, а не астрономическая дата.
Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним.
На наш взгляд, дата торговой сессии Вам не нужна.
А нужна текущая астрономическая дата, т.е. компьютера.
 
Цитата
Sergey Gorokhov написал:
А нужна текущая астрономическая дата, т.е. компьютера.
Причем в таймзоне сервера.
 
Цитата
Imersio Arrigo написал:
Цитата
Sergey Gorokhov   написал:
А нужна текущая астрономическая дата, т.е. компьютера.
Причем в таймзоне сервера.

Не обязательно, если в настройках терминала стоит галка "Показывать дату и время торговых данных с учетом локальной временной зоны"
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
Для начала, Вам нужно определиться, для чего именно Вам нужна дата.
Если для получения данных из таблиц, графиков и прочие, то как уже было сказано TRADEDATE в данном случае не подойдет.
Так как TRADEDATE это дата торговой сессии, а не астрономическая дата.
Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним.
На наш взгляд, дата торговой сессии Вам не нужна.
А нужна текущая астрономическая дата, т.е. компьютера.
Сергей, мне даже неудобно Вам на это указывать, но астрономическая дата никак не связана с содержимым таблиц терминала. Например в воскресенье, если данные в терминале не очищены с пятницы.  Они будут разными отсутствии соединения с брокером и т.д.

Тем более если  время в таблицах квика зависит от какой-то глубоко закопанной галочки, о которой 99% пользователей (и я в том числе) просто не имеют понятия, так как она нахрен не нужна.


Цитата

"Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним."

Я не уверен, что вы уверены в написанном вами.  :cool:





Зачем мне требуется весь этот огород
Мне нужно собирать данные из таблицы обезличенных сделок, обрабатывать их и раскладывать по файлам. Один файл - один торговый (!) день. С отсеиванием вечерней сессии.

Ээээ, да это же просто!

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


Повторяю свою надобность

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

Нужен текст колбека или еще чего-то, что мне сообщит, что эта торговая дата изменена и необходимо сделать рестарт всего скрипта.
 
Цитата
s_mike@rambler.ru написал:
Сергей, мне даже неудобно Вам на это указывать, но астрономическая дата никак не связана с содержимым таблиц терминала. Например в воскресенье, если данные в терминале не очищены с пятницы.  Они будут разными отсутствии соединения с брокером и т.д.

Михаил, мне даже неудобно Вам на это указывать, но если в час ночи Вы выставите заявку по какому-нибудь рынку который в это время торгуется, то увидите текущую астрономическую дату, а не дату торговой сессии.
Цитата
s_mike@rambler.ru написал:
"Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним."
Я не уверен, что вы уверены в написанном вами.  
Цитата
Sergey Gorokhov написал:
Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет.

Цитата
s_mike@rambler.ru написал:
Мне нужно собирать данные из таблицы обезличенных сделок, обрабатывать их и раскладывать по файлам. Один файл - один торговый (!) день. С отсеиванием вечерней сессии.

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

Цитата
s_mike@rambler.ru написал:
Повторяю свою надобность
Зачем повторять одно и тоже?
 
Пятница повторяю, чтобы не терялась основная цель, которую я преследую. Иначе все время мы уходим в сторону.

вот и сейчас вы пишете про выставление каких-то ночных заявок. Зачем мне это? Мне все равно что там будет во времени.

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

сделки в этой таблице могут быть датированы одним днём или двумя. Больше двух дней торговых сессий я не знаю)

мне нужно отфильтровать те сделки, которые идут последним днём. После этого собрать все эти сделки, обработать и записать в файл.

последний день я определяю через tradedate.

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

фильтповать по астрономическому времени нельзя. Ничто не мешает запустить скрипт в воскресенье без соединения с брокером и ни одной сделки за воскоесенье в нем не найти, хотя за пятницу (tradedate) они там будут. Я об этом вам писал и мне было неудобно.



как я понимаю, кроме общих слов я добиться ничего не смогу. Если так, я прошу прощения за беспокойство, благодарю за внимание и перестаю тратить время.
 
Цитата
s_mike@rambler.ru написал:
идея просто посмотреть, за какие даты есть в таблице обезличенных сделок сделки и выбрать те, что имеют старшую дату, не проходит из-за того, что таблица обезличенных сделок может быть в процессе закачки и сделки второго дня ещё в ней могут не присутствовать.


Цитата
Sergey Gorokhov написал:
Если дата торгов не совпадает с датой сделки, значит что это "вечерние" сделки предыдущего дня.

Чем не устраивает этот вариант?
 
Сергей.

Что такое "дата торгов"? Это параметр терминала, который tradedate?  Получение tradedate есть цель первого поста этой ветки.

или это нечто другое?  
 
Добрый день.

Попробую помочь в решении Вашей задачи. В документации на QLua написано:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OnCleanUp
Функция вызывается терминалом QUIK в следующих случаях:
смена сервера QUIK внутри торговой сессии;
смена пользователя, которым выполняется подключение к серверу QUIK, внутри торговой сессии;
смена сессии.
Формат вызова:
OnCleanUp()
При выполнении сразу нескольких из перечисленных условий, функция OnCleanUp() вызывается терминалом QUIK для каждого из них.
Под сменой сессии подразумевается изменение идентификатора сессии при подключении к серверу QUIK.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

из описания видно, что OnCleanUp никак не связан с TRADEDATE, не нужно путать сессию (SESSIONID) с датой торгов. Иными словами, OnCleanUp сработает, если при подключении к серверу терминал посчитает, что нужно почистить старые данные. Соответственно СРАЗУ после вызова OnCleanUp в терминале не будет новых данных, терминал просто информирует о том, что он почистил старые заявки, сделки и т.д. из-за смены сессии на сервере и ожидает новые данные.

Теперь к решению Вашей задачи. Чтобы получить дату торгов Вам необходимо смотреть на колбек OnConnected:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OnConnected
Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса.
Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false».
Формат вызова:
OnConnected(BOOLEAN flag)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Соответственно из описания видно, что терминал окончательно установил связь с сервером QUIK, если он получил ХОТЯ БЫ один класс. Из описания проблемы, которую Вы указали в посте #1 предположу, что Ваш терминал подключился к серверу QUIK и не получил ни одного класса (возможно просто еще отсутствовали шлюзы на сервере). OnCleanUp сработал, потому что на сервере сменилась сессия (SESSIONID), но TRADEDATE не поменялась, она меняется когда на сервер утром подключился шлюз с новыми данными и прислал классы. Собственно все.

Итог - получайте дату торгов после вызова OnConnected.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Николай, спасибо.

скрипт должен работать и без подключения к серверу.
 
Цитата
s_mike@rambler.ru написал:
Николай, спасибо.

скрипт должен работать и без подключения к серверу.
на имеющихся в нем данных. Если они имеются.
 
Цитата
s_mike@rambler.ru написал:
Николай, спасибо.

скрипт должен работать и без подключения к серверу.
Тогда нужно реализовывать две ветки, собственно работа скрипта оффлайт (дата торгов не поменяется точно) и работа скрипта после коннекта к серверу (только тут уже смотреть не на OnCleanUp, а на OnConnected), а там уже в зависимости от того поменялась дата торгов или нет свои алгоритмы...
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
Цитата
   s_mike@rambler.ru  написал:
Николай, спасибо.

скрипт должен работать и без подключения к серверу.
Тогда нужно реализовывать две ветки, собственно работа скрипта оффлайт (дата торгов не поменяется точно) и работа скрипта после коннекта к серверу (только тут уже смотреть не на OnCleanUp, а на OnConnected), а там уже в зависимости от того поменялась дата торгов или нет свои алгоритмы...
а вы уверены, что торговая дата всегда меняется при с разрывом связи? Я не уверен. А точно это никто не знает)
 
Ничто не мешает администратору сервера, которой внук своей бабушки, взять и не выключить сервер на ночь ))
 
Цитата
s_mike@rambler.ru написал:
s_mike@rambler.ru
Михаил,а чем не устраивает дата торгов из ТТП?
 
Цитата
Николай Камынин написал:
Михаил,а чем не устраивает дата торгов из ТТП
Николай, это еще более условная штука, чем tradedate. ТТП может быть у пользователя вовсе не открыта или этот параметр в ней не будет присутствовать. Какие в нем инструменты есть - непонятно. Да и колбек не получишь - придется долбиться в нее на каждом проходе как ошпаренному

При этом мы ничего не выигрываем:  заполнение полей ТТП произойдет уж точно никак не раньше чем параметра tradedate.  
 
Цитата
s_mike@rambler.ru написал:
а вы уверены, что торговая дата всегда меняется при с разрывом связи? Я не уверен. А точно это никто не знает)
Михаил, добрый день.
Что Вы имеете ввиду под изменением торговой даты с разрывом связи? Давайте разберем возможные варианты:
(1) При подключении к серверу сработал OnCleanUp() следовательно (=>) идентификатор сессии в терминале не совпадает с идентификатором сессии на сервере (это возможно когда действительно сменился идентификатор сессии на сервер или когда Вы подключились к другому/резервному серверу или Вы подключились другим пользователем), дальше возможны два пути:
           1 -  после вызова OnConnected() смотрим на дату торгов в терминале и сравниваем ее с прошлой датой торгов (например можно хранить прошлую дату торгов в файле), если новая дата торгов БОЛЬШЕ старой => дата торгов сменилась;
           2 - после вызова OnConnected() смотрим на дату торгов в терминале и сравниваем ее с прошлой датой торгов, если новая дата торгов РАВНА старой => дата торгов НЕ сменилась (такое в теории возможно, например когда брокер рестартует сервер QUIK с чисткой данных среди дня => сервер поменяет идентификатор сессии, НО дата торгов после прихода шлюзов останется прежней);

(2) При подключении к серверу OnCleanUp() НЕ СРАБОТАЛ => Вы подключились к серверу QUIK в этой сессии не первый раз и идентификатор сессии на сервере и в терминале совпадают => дата торгов не поменяется, т.к. Вы уже сегодня подключались и прошли по алгоритму (1).
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Николай. Вопрос в том, будет ли приходить onconnected, если соединение с брокером не прерывалось с момента 23-50 до 10-00.

будет ли приходить onconnected в этом случае? Я не уверен. Нужно экспериментировать и проверять (вот нечем мне в жизни заниматься кроме как ставить опыты и конспектировать поведение этого чучела)

а вообще это просто феерия: получение торговой даты (базовая функция!) вызывает у нас какие-то неимоверные усилия. Вы пишете простыни на пол экрана с кучей условий. И все это ради элементарнейшей цели.

а тот факт, что разработчики а принципе  не в состоянии сказать ничего внятного, вообще удручает.
 
Михаил, "простыни" я пишу, чтобы Вам объяснить более детально, но можно и коротко: получайте утром новую дату торгов после срабатывания цепочки OnCleanUp() -> OnConnected().

По поводу срабатывания OnConnected(), если терминал подключен с 23-50 до 10-00.
Во первых, такого не может быть, т.к. брокеру для корректной работы системы необходимо выполнить рестарт сервера между сессиями, а значит будет разрыв связи терминала с сервером QUIK (исключением может быть выходные дни).
Во вторых, в документации явно написано:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OnConnected
Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса.
Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false».
Формат вызова:
OnConnected(BOOLEAN flag)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
 Ok, я проверю.  
 
Вот и проверил. quk 7 11 1 5, демо от арка. Тест был такой:
Код
function write_log(text)
   local connect = ""
   if isConnected() == 1 then
      connect = "Connected"
   end
   local f = io.open("D:\\test.log","a")
   f:write(os.date() .. " " .. connect .. " " .. text .. "\n")
   f:close()
end

function main()
   write_log("Start " .. getInfoParam("TRADEDATE") .. " " .. getInfoParam("SERVERTIME"))
   while true do
      write_log(getInfoParam("TRADEDATE") .. " " .. getInfoParam("SERVERTIME"))
      sleep(60000)
   end
end

function OnCleanUp()
   write_log("OnCleanUp " .. getInfoParam("TRADEDATE") .. " " .. getInfoParam("SERVERTIME"))
end

function OnConnected(flag)
   write_log("OnConnected flag=" .. tostring(flag) .. " " .. getInfoParam("TRADEDATE") .. " " .. getInfoParam("SERVERTIME"))
end

function OnDisconnected()
   write_log("OnDisonnected " .. getInfoParam("TRADEDATE") .. " " .. getInfoParam("SERVERTIME"))
end

Что получилось.
Код
10/01/17 17:13:44  Start 01.10.2017 
10/01/17 17:13:44  01.10.2017 
10/01/17 17:13:56 Connected OnConnected flag=true 01.10.2017 
10/01/17 17:14:44 Connected 01.10.2017 17:13:24
10/01/17 17:15:44 Connected 01.10.2017 17:14:24
10/01/17 17:16:44 Connected 01.10.2017 17:15:24

......

10/01/17 23:59:44 Connected 01.10.2017 23:58:21
10/02/17 00:00:44 Connected 01.10.2017 23:59:21
10/02/17 00:01:44 Connected 01.10.2017 0:00:21
10/02/17 00:02:44 Connected 01.10.2017 0:01:21
10/02/17 00:03:44 Connected 01.10.2017 0:02:22

...

10/02/17 01:25:44 Connected 01.10.2017 1:24:21
10/02/17 01:26:44 Connected 01.10.2017 1:25:21
10/02/17 01:27:44 Connected 01.10.2017 1:26:22
10/02/17 01:28:00  OnDisonnected 01.10.2017 
10/02/17 01:28:44  01.10.2017 
10/02/17 01:29:13  OnDisonnected 01.10.2017 
10/02/17 01:29:44  01.10.2017 
10/02/17 01:30:23 Connected OnConnected flag=true 01.10.2017 
10/02/17 01:30:44 Connected 01.10.2017 1:29:21
10/02/17 01:31:44 Connected 01.10.2017 1:30:21
10/02/17 01:32:44 Connected 01.10.2017 1:31:22

.....


10/02/17 02:15:44 Connected 01.10.2017 2:14:20
10/02/17 02:16:37  OnDisonnected 01.10.2017 
10/02/17 02:16:44  01.10.2017 
10/02/17 02:17:37  OnDisonnected 01.10.2017 
10/02/17 02:17:44  01.10.2017 
10/02/17 02:18:37  OnDisonnected 01.10.2017 
10/02/17 02:18:44  01.10.2017 
10/02/17 02:19:37  OnDisonnected 01.10.2017 
10/02/17 02:19:44  01.10.2017 
10/02/17 02:20:37  OnDisonnected 01.10.2017 
10/02/17 02:20:44  01.10.2017 
10/02/17 02:21:37  OnDisonnected 01.10.2017 
10/02/17 02:21:44  01.10.2017 
10/02/17 02:22:37  OnDisonnected 01.10.2017 
10/02/17 02:22:44  01.10.2017 
10/02/17 02:23:37  OnDisonnected 01.10.2017 
10/02/17 02:23:44  01.10.2017 
10/02/17 02:24:38  OnDisonnected 01.10.2017 
10/02/17 02:24:44  01.10.2017 
10/02/17 02:25:38  OnDisonnected 01.10.2017 
10/02/17 02:25:44  01.10.2017 
10/02/17 02:26:38  OnDisonnected 01.10.2017 
10/02/17 02:26:44  01.10.2017 
10/02/17 02:27:38  OnDisonnected 01.10.2017 
10/02/17 02:27:44  01.10.2017 
10/02/17 02:28:38  OnDisonnected 01.10.2017 
10/02/17 02:28:44  01.10.2017 
10/02/17 02:29:38  OnDisonnected 01.10.2017 
10/02/17 02:29:44  01.10.2017 
10/02/17 02:30:38  OnDisonnected 01.10.2017 
10/02/17 02:30:44  01.10.2017 
10/02/17 02:31:38  OnDisonnected 01.10.2017 
10/02/17 02:31:44  01.10.2017 
10/02/17 02:32:38  OnDisonnected 01.10.2017 
10/02/17 02:32:44  01.10.2017 
10/02/17 02:33:39  OnDisonnected 01.10.2017 
10/02/17 02:33:44  01.10.2017 
10/02/17 02:34:39  OnDisonnected 01.10.2017 
10/02/17 02:34:44  01.10.2017 
10/02/17 02:35:39  OnDisonnected 01.10.2017 
10/02/17 02:35:44  01.10.2017 
10/02/17 02:36:39  OnDisonnected 01.10.2017 
10/02/17 02:36:44  01.10.2017 
10/02/17 02:37:39  OnDisonnected 01.10.2017 
10/02/17 02:37:44  01.10.2017 
10/02/17 02:38:39  OnDisonnected 01.10.2017 
10/02/17 02:38:44  01.10.2017 
10/02/17 02:39:39  OnDisonnected 01.10.2017 
10/02/17 02:39:44  01.10.2017 
10/02/17 02:40:40  OnDisonnected 01.10.2017 
10/02/17 02:40:44  01.10.2017 
10/02/17 02:41:40  OnDisonnected 01.10.2017 
10/02/17 02:41:44  01.10.2017 
10/02/17 02:42:40  OnDisonnected 01.10.2017 
10/02/17 02:42:44  01.10.2017 
10/02/17 02:43:43  OnDisonnected 01.10.2017 
10/02/17 02:43:44  01.10.2017 
10/02/17 02:44:43  OnDisonnected 01.10.2017 
10/02/17 02:44:44  01.10.2017 
10/02/17 02:45:44  01.10.2017 
10/02/17 02:46:04  OnDisonnected 01.10.2017 
10/02/17 02:46:44  01.10.2017 
10/02/17 02:47:04  OnDisonnected 01.10.2017 
10/02/17 02:47:44  01.10.2017 
10/02/17 02:48:44 Connected 01.10.2017 
10/02/17 02:49:44 Connected 01.10.2017 
10/02/17 02:50:44 Connected 01.10.2017 
10/02/17 02:51:44 Connected 01.10.2017 
10/02/17 02:52:44 Connected 01.10.2017 

...

10/02/17 03:08:44 Connected 01.10.2017 
10/02/17 03:09:44 Connected 01.10.2017 
10/02/17 03:10:44 Connected 01.10.2017 
10/02/17 03:11:44 Connected 01.10.2017 
10/02/17 03:12:44 Connected 01.10.2017 
10/02/17 03:13:44 Connected 01.10.2017 
10/02/17 03:14:44 Connected 01.10.2017 
10/02/17 03:15:44 Connected 01.10.2017 
10/02/17 03:16:26 Connected OnCleanUp 01.10.2017 
10/02/17 03:16:26 Connected OnConnected flag=true 02.10.2017 
10/02/17 03:16:44 Connected 02.10.2017 3:15:19
10/02/17 03:17:44 Connected 02.10.2017 3:16:19
10/02/17 03:18:44 Connected 02.10.2017 3:17:19
10/02/17 03:19:44 Connected 02.10.2017 3:18:19
10/02/17 03:20:44 Connected 02.10.2017 3:19:19
10/02/17 03:21:44 Connected 02.10.2017 3:20:19
10/02/17 03:22:44 Connected 02.10.2017 3:21:19
10/02/17 03:23:44 Connected 02.10.2017 3:22:19


...

0/02/17 04:04:44 Connected 02.10.2017 4:03:19
10/02/17 04:05:44 Connected 02.10.2017 4:04:19
10/02/17 04:06:25 Connected OnConnected flag=false 02.10.2017 4:05:00
10/02/17 04:06:44 Connected 02.10.2017 4:05:21
10/02/17 04:07:44 Connected 02.10.2017 4:06:21

...


10/02/17 08:55:44 Connected 02.10.2017 8:54:21
10/02/17 08:56:33 Connected OnConnected flag=false 02.10.2017 8:55:10
10/02/17 08:56:44 Connected 02.10.2017 8:55:21
10/02/17 08:57:44 Connected 02.10.2017 8:56:21



Итак, что вижу в этом логе





1. Утверждение Sergey Gorokhov[TABLE][TR][TH]Цитата[/TH][/TR][TR][TD]s_mike@rambler.ru написал:
Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?[/TD][/TR][/TABLE]да


не подтверждается.

10/02/17 03:16:26 Connected OnCleanUp 01.10.2017  

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



2. Поведение параметра tradedate отличается от параметра servertime
ServerTime недоступен в отсутствии связи с брокером а также внутри колбеков OnCleanUp и OnConnected. Про иные колбеки сказать ничего о не могу. Возможно, недоступность servertime из колбеков не есть всеобщее правило и обусловлено оно стечением обстоятельств в данном случае.




3. Предположение Nikolay Pavlov о том, что oncleanUp должен сопровождаться onconnected(true) не опровергается


4. Что начало происходить в 02-16-37 - туманно

10/02/17 02:14:44 Connected 01.10.2017 2:13:20
10/02/17 02:15:44 Connected 01.10.2017 2:14:20
10/02/17 02:16:37  OnDisonnected 01.10.2017
10/02/17 02:16:44  01.10.2017
10/02/17 02:17:37  OnDisonnected 01.10.2017
10/02/17 02:17:44  01.10.2017
10/02/17 02:18:37  OnDisonnected 01.10.2017
10/02/17 02:18:44  01.10.2017
10/02/17 02:19:37  OnDisonnected 01.10.2017
10/02/17 02:19:44  01.10.2017
10/02/17 02:20:37  OnDisonnected 01.10.2017
10/02/17 02:20:44  01.10.2017
10/02/17 02:21:37  OnDisonnected 01.10.2017
10/02/17 02:21:44  01.10.2017
10/02/17 02:22:37  OnDisonnected 01.10.2017
10/02/17 02:22:44  01.10.2017
10/02/17 02:23:37  OnDisonnected 01.10.2017
10/02/17 02:23:44  01.10.2017
10/02/17 02:24:38  OnDisonnected 01.10.2017
10/02/17 02:24:44  01.10.2017
10/02/17 02:25:38  OnDisonnected 01.10.2017
10/02/17 02:25:44  01.10.2017
10/02/17 02:26:38  OnDisonnected 01.10.2017
10/02/17 02:26:44  01.10.2017
10/02/17 02:27:38  OnDisonnected 01.10.2017
10/02/17 02:27:44  01.10.2017
10/02/17 02:28:38  OnDisonnected 01.10.2017
10/02/17 02:28:44  01.10.2017
10/02/17 02:29:38  OnDisonnected 01.10.2017
10/02/17 02:29:44  01.10.2017
10/02/17 02:30:38  OnDisonnected 01.10.2017
10/02/17 02:30:44  01.10.2017
10/02/17 02:31:38  OnDisonnected 01.10.2017
10/02/17 02:31:44  01.10.2017
10/02/17 02:32:38  OnDisonnected 01.10.2017
10/02/17 02:32:44  01.10.2017
10/02/17 02:33:39  OnDisonnected 01.10.2017
10/02/17 02:33:44  01.10.2017
10/02/17 02:34:39  OnDisonnected 01.10.2017
10/02/17 02:34:44  01.10.2017
10/02/17 02:35:39  OnDisonnected 01.10.2017
10/02/17 02:35:44  01.10.2017
10/02/17 02:36:39  OnDisonnected 01.10.2017
10/02/17 02:36:44  01.10.2017
10/02/17 02:37:39  OnDisonnected 01.10.2017
10/02/17 02:37:44  01.10.2017
10/02/17 02:38:39  OnDisonnected 01.10.2017
10/02/17 02:38:44  01.10.2017
10/02/17 02:39:39  OnDisonnected 01.10.2017
10/02/17 02:39:44  01.10.2017
10/02/17 02:40:40  OnDisonnected 01.10.2017
10/02/17 02:40:44  01.10.2017
10/02/17 02:41:40  OnDisonnected 01.10.2017
10/02/17 02:41:44  01.10.2017
10/02/17 02:42:40  OnDisonnected 01.10.2017
10/02/17 02:42:44  01.10.2017
10/02/17 02:43:43  OnDisonnected 01.10.2017
10/02/17 02:43:44  01.10.2017
10/02/17 02:44:43  OnDisonnected 01.10.2017
10/02/17 02:44:44  01.10.2017
10/02/17 02:45:44  01.10.2017
10/02/17 02:46:04  OnDisonnected 01.10.2017
10/02/17 02:46:44  01.10.2017
10/02/17 02:47:04  OnDisonnected 01.10.2017
10/02/17 02:47:44  01.10.2017
10/02/17 02:48:44 Connected 01.10.2017
10/02/17 02:49:44 Connected 01.10.2017
10/02/17 02:50:44 Connected 01.10.2017


Толпа колбеков OnDisconnected на уже отсоединенном от сервера терминале. Откуда и что они означают - сказать трудно. При этом в 02-48-44 связь как ни в чем не бывало уже имеется и никаких onconnected и близко нет. Туманно, загадочно и волки воют.
 
Цитата
s_mike@rambler.ru написал:
Толпа колбеков OnDisconnected на уже отсоединенном от сервера терминале. Откуда и что они означают - сказать трудно. При этом в 02-48-44 связь как ни в чем не бывало уже имеется и никаких onconnected и близко нет. Туманно, загадочно и волки воют.
Михаил, добрый день.
Колбеки OnDisonnected() вызывались по следующий причине:

10/02/17 в 02:16:37 Ваш терминал был отключен от сервер Quik, но из-за того, что у Вас скорее всего настроено автоматическое восстановление связи с сервером при разрыве, терминал пытался подключиться к серверу, но его отключало по таймауту и на каждый разрыв срабатывал OnDisonnected();

10/02/17 в 02:48:44 сервер QUIK был запущен и терминал подключился корректно, без отрыва по таймауту, но на сервере отсутствовали классы (т.е. ни один шлюз после рестарта сервера еще не подключился), соответственно сервер QUIK не меняет дату торгов, он ее поменяет только после прихода хотя бы одного шлюза с новой датой торгов;

10/02/17 в 03:16:26 на сервер QUIK пришел какой-то шлюз => сменилась дата торгов и сессия на сервере, в терминале сработали OnCleanUp т.к. сменился идентификатор сессии и OnConnected с flag=true т.к. терминал получил класс и дата торгов поменялась.

Все как ранее мной и было сказано.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Ага. ...


спасибо , Николай, за разъяснения
 
getTradeDate() в OnCleanUp всегда даёт актуальную дату торгов или это у меня так совпало?
 
Цитата
Старатель написал:
getTradeDate() в OnCleanUp всегда даёт актуальную дату торгов или это у меня так совпало?

getTradeDate возвращает дату торговой сессии.
Торговая сессия это НЕ тоже самое что астрономическая дата.
например если брокер дает доступ к своему серверу в субботу, то Вы увидите дату пятницы.
 
getTradeDate() в OnCleanUp всегда даёт актуальную дату торговой сессии или это у меня так совпало?

Скрытый текст
 
Старатель,
По идее getTradeDate ничем не должен отличаться от getInfoParam("TRADEDATE")
Страницы: 1 2 След.
Читают тему (гостей: 1)
Наверх