Может, есть другой, более правильный способ определить дату текущих торгов?
Спасибо.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
26.09.2017 04:55:04
Цитата
s_mike@rambler.ru написал: Вопрос по tradedate. В какой момент происходит ее изменение?
tradedate меняется после смены сессии на сервере. Это не тоже самое что смена астрономической даты. Смена сессии как правило происходит утром следующего дня, после рестарта сервера. Иногда делается два рестарта сервера, при этом сессия меняется только после второго рестарта. А иногда, сервер утром подымают на старых данных и сессия меняется только после подключения первого шлюза. Все зависит от нужд брокера.
На нашем демо контуре, смена сессии происходит ежедневно после первого рестарта утром, примерно в 3 часа по МСК. Судя по логам, 25го числа демо контур корректно поменял сессию примерно в 3 утра по МСК и никаких проблем с этим не было. В связи с чем объяснить почему Вы видели 24е число к сожалению не можем. Проверили сегодня, проблема не повторяется. В связи с чем можем предположить что это какая-то локальная проблема.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.09.2017 05:25:34
Приход колбека oncleanup в 10 часов утра понедельника ставит под сомнение написанное вами, Сергей.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
26.09.2017 07:00:26
s_mike@rambler.ru, Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет. Если есть проблема, значит с ней нужно разбираться, а не надеяться что ответ будет найден сходу. Как уже было сказано и еще раз повторим, у нас описанная ситуация не повторяется. А у Вас? И хотелось бы взглянуть на полную версию кода.
Пользователь
Сообщений: Регистрация: 23.01.2015
26.09.2017 07:01:33
s_mike@rambler.ru, И дополнительно к сказанному, из Вашего поста не понятно о каком часовом поясе идет речь.
Пользователь
Сообщений: Регистрация: 23.01.2015
26.09.2017 07:02:51
Цитата
Sergey Gorokhov написал: s_mike@rambler.ru , И дополнительно к сказанному, из Вашего поста не понятно о каком часовом поясе идет речь.
Приходится экспериментировать, так как нет внятной документации.
Приход колбека в 10 -00 был обусловлен настройками автоподключения. Время автоподключения было установлено с 10-00 до 23-00.
В момент подключения приходит колбек, в котором производится запрос getInfoParam("TRADEDATE")
Результат исполнения - либо пустой либо строка времени. Исходя из ваших разъяснений время может придти как вчерашнее так и сегодняшнее взависимости от температуры бабушки системного администратора сервера квик.
Кашамала какая-то..
Сергей.
Сможете привести однозначный алгоритм определения торговой даты, которая работает всегда и надежно, без расползающихся условностей?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 09:14:36
Точнее задача стоит так:
1. Определить торговую дату в момент старта скрипта 2. Получить сигнал об изменении торговой даты и вернуть новую дату
При этом правильно обработать все отключения и подключения к серверу.
Похоже что Вы запрашиваете данные через getInfoParam в момент когда в терминал эти данные еще не пришли. Колбеки срабатывают непосредственно перед тем как данные появятся в терминале. Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp Можем предложить зарегистрировать пожелание на добавление в OnCleanUp параметра, в котором будет возвращаться дата торгов.
Похоже что Вы запрашиваете данные через getInfoParam в момент когда в терминал эти данные еще не пришли. Колбеки срабатывают непосредственно перед тем как данные появятся в терминале. Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp Можем предложить зарегистрировать пожелание на добавление в OnCleanUp параметра, в котором будет возвращаться дата торгов.
Был бы толк от этих регистраций....
Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
s_mike@rambler.ru написал: Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
написал: Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
да
От моего имени зарегистрировано за 10 лет пара десятков пожеланий.Не было случая чтобы реализовали. Уж не знаю какой у вас толк, а для меня никакого.
"Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp "
Отлично. И насколько позже? И как узнать, что данные уже обновились, если придти может снова вчерашняя дата?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 09:45:53
Цитата
s_mike@rambler.ru написал: От моего имени зарегистрировано за 10 лет пара десятков пожеланий.Не было случая чтобы реализовали. Уж не знаю какой у вас толк, а для меня никакого.
Простите, но именно лично от Вас было зарегистрировано пожелание на добавление функций SetValue, GetValue, SetRangeValue Конкретно пост на старом форуме 19/03/2014 18:54 реализовано в версии 6.15 от 03.10.2014. Да делаем не все и не сразу, но это не значит что "толку нет".
Цитата
s_mike@rambler.ru написал: Отлично. И насколько позже? И как узнать, что данные уже обновились, если придти может снова вчерашняя дата?
Добавить флаг в OnCleanUp и следить за ним в main?
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 09:52:53
Про Setvalue я действительно когда-то писал, было. Помнится, что писало об этом уйма народу кроме меня - слишком очевидная дырка была. Ну что же, теперь можно констатировать, что толк есть. Целый один толк. )))
"Добавить флаг в OnCleanUp и следить за ним в main?"
Следить за чем? Куда смотреть, что ждать?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 10:05:49
Цитата
s_mike@rambler.ru написал: Следить за чем? Куда смотреть, что ждать?
Добавить флаг в OnCleanUp В цикле который в main проверять значение флага. как только флаг поменялся, дернуть getInfoParam
не вижу проблемы в том чтобы определить что дата вчерашняя.
кроме того, можно еще заточиться на параметр SESSIONID
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 10:26:59
Узнать -то не проблема..
правильно ли это утверждение:
1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
Sessioniddd.
что это за зверь и каковы его своейства?
я подразумеваю, что документация этого мне не расскпжет,. Если ошибаюсь - прошу прощения
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 10:27:23
Непустую
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 10:28:53
Актуальная торговая дата в моем понимании -это совпадающая с тем что на графиках, таблицах и прочие.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 11:08:49
Цитата
s_mike@rambler.ru написал: 1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
Это некий уникальные набор букв и цифр, которые однозначно определяют торговую сессию на сервере. Если этот набор поменялся, значит на сервере поменялась сессия, ну либо это какой-то другой сервер. По этому и было сказано что лучше его использовать совместно с TRADEDATE.
Цитата
s_mike@rambler.ru написал: Актуальная торговая дата в моем понимании -это совпадающая с тем что на графиках, таблицах и прочие.
Тогда Вам лучше забыть про TRADEDATE, т.к. после перехода на полночь она не меняется.
s_mike@rambler.ru написал: 1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
нет, Вы же сами про это целый пост создали.
Прошу прощения, вопрос был не так понят. Если OnCleanUp сработал именно из-за смены сессии, то да, после колбека Вы получите актуальную дату торговой сессии. Однако, OnCleanUp может сработать не только из-за смены сессии на сервере.
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 11:31:43
Уффф.
как же это все же тяжело.... Вроде и вопросы стараюсь делать понятно и так, чтобы из нельзя было прочесть неправильно.
сергей.
как в вашем чертовом терминале получить сигнал о смене торговой даты?
мне не нужно других сигналов, на которые срабатывает oncleanup и всего остального. Мне нужно только получить торговую дату при старте скрипта (дату, а не nil, не бум, и не бац) и получить сигнал об изменении ее со значением новой торговой даты.
если где-то можно прочитать про эти ваши нагромождения неописаннвх сущностей -скпжиье где. Если нет - не могли бы вы просто привести луа код, который будет правильно ВСЕГДА работать?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 12:35:39
s_mike@rambler.ru, Для начала, Вам нужно определиться, для чего именно Вам нужна дата. Если для получения данных из таблиц, графиков и прочие, то как уже было сказано TRADEDATE в данном случае не подойдет. Так как TRADEDATE это дата торговой сессии, а не астрономическая дата. Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним. На наш взгляд, дата торговой сессии Вам не нужна. А нужна текущая астрономическая дата, т.е. компьютера.
Пользователь
Сообщений: Регистрация: 02.07.2015
28.09.2017 12:42:34
Цитата
Sergey Gorokhov написал: А нужна текущая астрономическая дата, т.е. компьютера.
Sergey Gorokhov написал: А нужна текущая астрономическая дата, т.е. компьютера.
Причем в таймзоне сервера.
Не обязательно, если в настройках терминала стоит галка "Показывать дату и время торговых данных с учетом локальной временной зоны"
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 13:23:38
Цитата
Sergey Gorokhov написал: , Для начала, Вам нужно определиться, для чего именно Вам нужна дата. Если для получения данных из таблиц, графиков и прочие, то как уже было сказано TRADEDATE в данном случае не подойдет. Так как TRADEDATE это дата торговой сессии, а не астрономическая дата. Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним. На наш взгляд, дата торговой сессии Вам не нужна. А нужна текущая астрономическая дата, т.е. компьютера.
Сергей, мне даже неудобно Вам на это указывать, но астрономическая дата никак не связана с содержимым таблиц терминала. Например в воскресенье, если данные в терминале не очищены с пятницы. Они будут разными отсутствии соединения с брокером и т.д.
Тем более если время в таблицах квика зависит от какой-то глубоко закопанной галочки, о которой 99% пользователей (и я в том числе) просто не имеют понятия, так как она нахрен не нужна.
Цитата
"Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним."
Я не уверен, что вы уверены в написанном вами.
Зачем мне требуется весь этот огород Мне нужно собирать данные из таблицы обезличенных сделок, обрабатывать их и раскладывать по файлам. Один файл - один торговый (!) день. С отсеиванием вечерней сессии.
Ээээ, да это же просто!
А вот хрен. Потому что datetime зависит от тонны условностей, о которых уже упоминалось выше. Только не надо предлагать косорылые способы. Надо нормальный и надежный. И желательно не зависящий от галочек, разбросанных по всем пыльным углам терминала.
Повторяю свою надобность
Нужна функция, которая возвращает дату текущей сессии при старте программы. Под этой датой я понимаю последнюю дату, в которую в таблицу обезличенных сделок терминала приходили сделки.
Нужен текст колбека или еще чего-то, что мне сообщит, что эта торговая дата изменена и необходимо сделать рестарт всего скрипта.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 13:33:09
Цитата
s_mike@rambler.ru написал: Сергей, мне даже неудобно Вам на это указывать, но астрономическая дата никак не связана с содержимым таблиц терминала. Например в воскресенье, если данные в терминале не очищены с пятницы. Они будут разными отсутствии соединения с брокером и т.д.
Михаил, мне даже неудобно Вам на это указывать, но если в час ночи Вы выставите заявку по какому-нибудь рынку который в это время торгуется, то увидите текущую астрономическую дату, а не дату торговой сессии.
Цитата
s_mike@rambler.ru написал: "Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним." Я не уверен, что вы уверены в написанном вами.
Цитата
Sergey Gorokhov написал: Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет.
Цитата
s_mike@rambler.ru написал: Мне нужно собирать данные из таблицы обезличенных сделок, обрабатывать их и раскладывать по файлам. Один файл - один торговый (!) день. С отсеиванием вечерней сессии.
Есть нормальный и надежный костыль. Если дата торгов не совпадает с датой сделки, значит что это "вечерние" сделки предыдущего дня. Оба параметра есть в таблице обезличенных сделок и никакой TRADEDATE не нужен впринципе.
Пятница повторяю, чтобы не терялась основная цель, которую я преследую. Иначе все время мы уходим в сторону.
вот и сейчас вы пишете про выставление каких-то ночных заявок. Зачем мне это? Мне все равно что там будет во времени.
к меня есть терминал и в нем есть таблица обезличенных сделок.
сделки в этой таблице могут быть датированы одним днём или двумя. Больше двух дней торговых сессий я не знаю)
мне нужно отфильтровать те сделки, которые идут последним днём. После этого собрать все эти сделки, обработать и записать в файл.
последний день я определяю через tradedate.
идея просто посмотреть, за какие даты есть в таблице обезличенных сделок сделки и выбрать те, что имеют старшую дату, не проходит из-за того, что таблица обезличенных сделок может быть в процессе закачки и сделки второго дня ещё в ней могут не присутствовать.
фильтповать по астрономическому времени нельзя. Ничто не мешает запустить скрипт в воскресенье без соединения с брокером и ни одной сделки за воскоесенье в нем не найти, хотя за пятницу (tradedate) они там будут. Я об этом вам писал и мне было неудобно.
как я понимаю, кроме общих слов я добиться ничего не смогу. Если так, я прошу прощения за беспокойство, благодарю за внимание и перестаю тратить время.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
28.09.2017 14:04:27
Цитата
s_mike@rambler.ru написал: идея просто посмотреть, за какие даты есть в таблице обезличенных сделок сделки и выбрать те, что имеют старшую дату, не проходит из-за того, что таблица обезличенных сделок может быть в процессе закачки и сделки второго дня ещё в ней могут не присутствовать.
Цитата
Sergey Gorokhov написал: Если дата торгов не совпадает с датой сделки, значит что это "вечерние" сделки предыдущего дня.
Чем не устраивает этот вариант?
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 14:10:26
Сергей.
Что такое "дата торгов"? Это параметр терминала, который tradedate? Получение tradedate есть цель первого поста этой ветки.
или это нечто другое?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
28.09.2017 14:29:35
Добрый день.
Попробую помочь в решении Вашей задачи. В документации на 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'
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 14:39:40
Николай, спасибо.
скрипт должен работать и без подключения к серверу.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 14:40:23
Цитата
написал: Николай, спасибо.
скрипт должен работать и без подключения к серверу.
на имеющихся в нем данных. Если они имеются.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
28.09.2017 14:47:40
Цитата
написал: Николай, спасибо.
скрипт должен работать и без подключения к серверу.
Тогда нужно реализовывать две ветки, собственно работа скрипта оффлайт (дата торгов не поменяется точно) и работа скрипта после коннекта к серверу (только тут уже смотреть не на OnCleanUp, а на OnConnected), а там уже в зависимости от того поменялась дата торгов или нет свои алгоритмы...
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
скрипт должен работать и без подключения к серверу.
Тогда нужно реализовывать две ветки, собственно работа скрипта оффлайт (дата торгов не поменяется точно) и работа скрипта после коннекта к серверу (только тут уже смотреть не на OnCleanUp, а на OnConnected), а там уже в зависимости от того поменялась дата торгов или нет свои алгоритмы...
а вы уверены, что торговая дата всегда меняется при с разрывом связи? Я не уверен. А точно это никто не знает)
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 14:54:02
Ничто не мешает администратору сервера, которой внук своей бабушки, взять и не выключить сервер на ночь ))
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 17:15:20
Цитата
написал:
Михаил,а чем не устраивает дата торгов из ТТП?
Пользователь
Сообщений: Регистрация: 30.01.2015
28.09.2017 17:26:00
Цитата
Николай Камынин написал: Михаил,а чем не устраивает дата торгов из ТТП
Николай, это еще более условная штука, чем tradedate. ТТП может быть у пользователя вовсе не открыта или этот параметр в ней не будет присутствовать. Какие в нем инструменты есть - непонятно. Да и колбек не получишь - придется долбиться в нее на каждом проходе как ошпаренному
При этом мы ничего не выигрываем: заполнение полей ТТП произойдет уж точно никак не раньше чем параметра tradedate.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
29.09.2017 07:10:05
Цитата
написал: а вы уверены, что торговая дата всегда меняется при с разрывом связи? Я не уверен. А точно это никто не знает)
Михаил, добрый день. Что Вы имеете ввиду под изменением торговой даты с разрывом связи? Давайте разберем возможные варианты: (1) При подключении к серверу сработал OnCleanUp() следовательно (=>) идентификатор сессии в терминале не совпадает с идентификатором сессии на сервере (это возможно когда действительно сменился идентификатор сессии на сервер или когда Вы подключились к другому/резервному серверу или Вы подключились другим пользователем), дальше возможны два пути: 1 - после вызова OnConnected() смотрим на дату торгов в терминале и сравниваем ее с прошлой датой торгов (например можно хранить прошлую дату торгов в файле), если новая дата торгов БОЛЬШЕ старой => дата торгов сменилась; 2 - после вызова OnConnected() смотрим на дату торгов в терминале и сравниваем ее с прошлой датой торгов, если новая дата торгов РАВНА старой => дата торгов НЕ сменилась (такое в теории возможно, например когда брокер рестартует сервер QUIK с чисткой данных среди дня => сервер поменяет идентификатор сессии, НО дата торгов после прихода шлюзов останется прежней);
(2) При подключении к серверу OnCleanUp() НЕ СРАБОТАЛ => Вы подключились к серверу QUIK в этой сессии не первый раз и идентификатор сессии на сервере и в терминале совпадают => дата торгов не поменяется, т.к. Вы уже сегодня подключались и прошли по алгоритму (1).
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 30.01.2015
29.09.2017 10:43:26
Николай. Вопрос в том, будет ли приходить onconnected, если соединение с брокером не прерывалось с момента 23-50 до 10-00.
будет ли приходить onconnected в этом случае? Я не уверен. Нужно экспериментировать и проверять (вот нечем мне в жизни заниматься кроме как ставить опыты и конспектировать поведение этого чучела)
а вообще это просто феерия: получение торговой даты (базовая функция!) вызывает у нас какие-то неимоверные усилия. Вы пишете простыни на пол экрана с кучей условий. И все это ради элементарнейшей цели.
а тот факт, что разработчики а принципе не в состоянии сказать ничего внятного, вообще удручает.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
29.09.2017 11:44:19
Михаил, "простыни" я пишу, чтобы Вам объяснить более детально, но можно и коротко: получайте утром новую дату торгов после срабатывания цепочки OnCleanUp() -> OnConnected().
По поводу срабатывания OnConnected(), если терминал подключен с 23-50 до 10-00. Во первых, такого не может быть, т.к. брокеру для корректной работы системы необходимо выполнить рестарт сервера между сессиями, а значит будет разрыв связи терминала с сервером QUIK (исключением может быть выходные дни). Во вторых, в документации явно написано: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OnConnected Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса. Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false». Формат вызова: OnConnected(BOOLEAN flag) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 30.01.2015
29.09.2017 11:58:01
Ok, я проверю.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
02.10.2017 13:25:54
Вот и проверил. 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
написал: Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
да
не подтверждается.
10/02/17 03:16:26 Connected OnCleanUp 01.10.2017
Торговая дата доступна функции getInfoParam только после завершения колбека, но в непосредственно в нем самом
2. Поведение параметра tradedate отличается от параметра servertime ServerTime недоступен в отсутствии связи с брокером а также внутри колбеков OnCleanUp и OnConnected. Про иные колбеки сказать ничего о не могу. Возможно, недоступность servertime из колбеков не есть всеобщее правило и обусловлено оно стечением обстоятельств в данном случае.
3. Предположение о том, что oncleanUp должен сопровождаться onconnected(true) не опровергается
Толпа колбеков OnDisconnected на уже отсоединенном от сервера терминале. Откуда и что они означают - сказать трудно. При этом в 02-48-44 связь как ни в чем не бывало уже имеется и никаких onconnected и близко нет. Туманно, загадочно и волки воют.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
02.10.2017 14:08:03
Цитата
написал: Толпа колбеков 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'
Пользователь
Сообщений: Регистрация: 30.01.2015
02.10.2017 14:26:35
Ага. ...
спасибо , Николай, за разъяснения
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
14.05.2020 08:46:59
getTradeDate() в OnCleanUp всегда даёт актуальную дату торгов или это у меня так совпало?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
14.05.2020 11:28:53
Цитата
Старатель написал: getTradeDate() в OnCleanUp всегда даёт актуальную дату торгов или это у меня так совпало?
getTradeDate возвращает дату торговой сессии. Торговая сессия это НЕ тоже самое что астрономическая дата. например если брокер дает доступ к своему серверу в субботу, то Вы увидите дату пятницы.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
14.05.2020 12:12:19
getTradeDate() в OnCleanUp всегда даёт актуальную дату торговой сессии или это у меня так совпало?
Скрытый текст
Чтобы не вставать два раза, поясню: В данной теме обсуждается проблема получения в OnCleanUp параметра "Дата торгов" через запрос getInfoParam("TRADEDATE"). И действительно данный запрос в OnCleanUp возвращает дату предыдущей торговой сессии. Как обстоит дело с getTradeDate()?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
14.05.2020 12:25:56
Старатель, По идее getTradeDate ничем не должен отличаться от getInfoParam("TRADEDATE")